| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- ;Incs and Defs---------------------------------------------------------
- .include "atm328p.inc"
- .include "global.inc"
- ;USART-Initialize------------------------------------------------------
- .global usart_init
- usart_init:
- sts UDR0, false ;clear Registers
- sts UCSR0A, false
- sts UCSR0B, false
- sts UCSR0C, false
- ldi usart_r, hi8(Baud) ;set Baudrate to 19.2k
- sts UBRR0H, usart_r
- ldi usart_r, lo8(Baud)
- sts UBRR0L, usart_r
- ldi usart_r, (1<<UCSZ01)|(1<<UCSZ00) ;8-Bit Character
- sts UCSR0C, usart_r ;Aysnchonous USART
- ldi usart_r, 0x41 ;init 'ACK'
- sts ack_A, usart_r
- ldi usart_r, 0x43
- sts ack_C, usart_r
- ldi usart_r, 0x4B
- sts ack_K, usart_r
- ldi usart_r, 0x52 ;init 'REQ'
- sts req_R, usart_r
- ldi usart_r, 0x45
- sts req_E, usart_r
- ldi usart_r, 0x51
- sts req_Q, usart_r
- ret
- ;RXC-Interrupt-Handler-------------------------------------------------
- .global usart_RX
- usart_RX:
- push usart_r
- lds data, UDR0 ;harvest Data
- lds usart_r, pagemode ;check for Pagemode
- cpse usart_r, true
- rjmp RX_req
-
- RX_page: ;Receive Page
- st X+, data ;store Data
- cpi X_l, 0x40 ;check for End of Page
- brne RX_def
- sts pagemode, false
- rjmp RX_def
- RX_req: ;Receive Request
- ld usart_r, X
- cp usart_r, data ;check for Request
- brne RX_def
- adiw X_l, 1 ;increment Pointer-pos
- cpi X_l, 0x26 ;check for REC-complete
- brne RX_def
- sts req_complete, true
- RX_def:
- lds usart_r, UCSR0B
- cbr usart_r, 1<<RXCIE0 ;RXCI disable
- sbr usart_r, 1<<UDRIE0 ;UDREI enable
- sts UCSR0B, usart_r
- pop usart_r
- reti
- ;UDRE-Interrupt-Handler------------------------------------------------
- .global usart_UDRE
- usart_UDRE:
- push usart_r
- lds usart_r, UCSR0B
- cbr usart_r, 1<<UDRIE0 ;disable UDREI
- sbrc usart_r, RXEN0 ;choose USART-Mode
- rjmp UDRE_receive
- sbrc usart_r, TXEN0
- rjmp UDRE_transmit
- rjmp UDRE_def
- UDRE_receive:
- sbr usart_r, 1<<RXCIE0 ;enable RXCI
- rjmp UDRE_def
- UDRE_transmit:
- ld data, X
- sbr usart_r, 1<<TXCIE0 ;enable TXCI
- sts UDR0, data ;send Data
- adiw X_l, 1
- cpi X_l, 0x23 ;check for ACK-send
- brne UDRE_def
- sts ack_complete, true
- rjmp UDRE_def
- UDRE_def:
- sts UCSR0B, usart_r
- pop usart_r
- reti
-
- ;TXC-Interrupt-Handler-------------------------------------------------
- .global usart_TX
- usart_TX:
- push usart_r
- lds usart_r, UCSR0B
- sbr usart_r, 1<<UDRIE0 ;enable UDRIE
- cbr usart_r, 1<<TXCIE0 ;disable TXCIE
- sts UCSR0B, usart_r
- pop usart_r
- reti
|