пишем spi на ассемблере для atmega 128 a, тихим тихим. буду признательна, если поможете) еще uart нужен, с ним вообще сложно
CODE
.include "m128def.inc"
.equ LowByte=60
.equ CS=PB0
.equ SCK=PB7
.org $000
rjmp reset
.org $001C
rjmp timer1_ovf
reset:
cli
ldi r16, TCNT1H
out TCNT1H, r16
ldi r16, LowByte
//ldi r16, TCNT1L
out LowByte, r16
ldi r16, (1<<TOIE1)
out TIMSK, r16
ldi r16, (1<<CS10)|(1<<CS11)
out TCCR1B, r16
ldi r17, (1<<4)
out DDRB, r17
clr r16
sei
main:
RJMP main
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
out ADCSRA, r18
timer1_ovf:
eor r16, r17
out PORTE, r16///
;start ADC 1/32=125; interrupt enable
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0|1<<ADSC
out ADCSRA, r18
/*ldi r18, 1<<ADFR
out ADCSRA, r18
ldi r18, 1<<ADSC
out ADCSRA, r18*/
SPI_MasterInit:
; Установка MOSI и SCK на вывод, все остальные на ввод
ldi r17,(1<<DDB5)|(1<<DDB1)
out DDRB,r17
; Разрешение SPI в режиме мастера, установка скорости связи fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_MasterTransmit:
; Запуск передачи данных (r16)
out SPDR,r16
Wait_Transmit:
; Ожидание завершения передачи данных
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
SPI_SlaveInit:
; Установка MISO на вывод и всех ост. на ввод
ldi r17,(1<<DDB3)
out DDRB,r17
; Разрешение SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
; Ожидание завершения передачи
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Чтение принятых данных и выход из процедуры
in r16,SPDR
ret
.equ LowByte=60
.equ CS=PB0
.equ SCK=PB7
.org $000
rjmp reset
.org $001C
rjmp timer1_ovf
reset:
cli
ldi r16, TCNT1H
out TCNT1H, r16
ldi r16, LowByte
//ldi r16, TCNT1L
out LowByte, r16
ldi r16, (1<<TOIE1)
out TIMSK, r16
ldi r16, (1<<CS10)|(1<<CS11)
out TCCR1B, r16
ldi r17, (1<<4)
out DDRB, r17
clr r16
sei
main:
RJMP main
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
out ADCSRA, r18
timer1_ovf:
eor r16, r17
out PORTE, r16///
;start ADC 1/32=125; interrupt enable
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0|1<<ADSC
out ADCSRA, r18
/*ldi r18, 1<<ADFR
out ADCSRA, r18
ldi r18, 1<<ADSC
out ADCSRA, r18*/
SPI_MasterInit:
; Установка MOSI и SCK на вывод, все остальные на ввод
ldi r17,(1<<DDB5)|(1<<DDB1)
out DDRB,r17
; Разрешение SPI в режиме мастера, установка скорости связи fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_MasterTransmit:
; Запуск передачи данных (r16)
out SPDR,r16
Wait_Transmit:
; Ожидание завершения передачи данных
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
SPI_SlaveInit:
; Установка MISO на вывод и всех ост. на ввод
ldi r17,(1<<DDB3)
out DDRB,r17
; Разрешение SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
; Ожидание завершения передачи
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Чтение принятых данных и выход из процедуры
in r16,SPDR
ret