| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- ;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
- sts UBRR0H, usart_r ;to 19.2k
- 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
- sts frame_cnt, false ;init Frame cnt
- ret
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;RXC-Interrupt-Handler
- .global usart_RXC
- usart_RXC:
- push usart_r
- lds frame, UDR0 ;read Frame
- mov usart_r, frame
- andi usart_r, nibble_hi ;check Frame
- cpi usart_r, frame_mask
- brne .+12
- st X+, frame ;store Frame
- lds usart_r, frame_cnt
- inc usart_r
- sts frame_cnt, usart_r
- pop usart_r
- reti
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;UDRE-Interrupt-Handler
- .global usart_UDRE
- usart_UDRE:
- push usart_r
- ld frame, X+ ;load new Frame
- sts UDR0, frame ;set Frame
- lds usart_r, frame_cnt
- inc usart_r
- sts frame_cnt, usart_r
- lds usart_r, UCSR0B
- cbr usart_r, 1<<UDRIE0 ;disable UDREI
- sbr usart_r, (1<<TXEN0)|(1<<TXCIE0) ;enable TX, TXCI
- sts UCSR0B, usart_r
- pop usart_r
- reti
-
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;TXC-Interrupt-Handler
- .global usart_TXC
- usart_TXC:
- push usart_r
- lds usart_r, UCSR0B
- cbr usart_r, (1<<TXEN0)|(1<<TXCIE0) ;disable TX, TXCI
- sbr usart_r, 1<<UDRIE0 ;enable UDREI
- sts UCSR0B, usart_r
- pop usart_r
- reti
|