usart.s 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. ;Incs and Defs---------------------------------------------------------
  2. .include "atm328p.inc"
  3. .include "global.inc"
  4. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5. ;USART-Initialize
  6. .global usart_init
  7. usart_init:
  8. sts UDR0, false ;clear Registers
  9. sts UCSR0A, false
  10. sts UCSR0B, false
  11. sts UCSR0C, false
  12. ldi usart_r, hi8(Baud) ;set Baudrate
  13. sts UBRR0H, usart_r ;to 19.2k
  14. ldi usart_r, lo8(Baud)
  15. sts UBRR0L, usart_r
  16. ldi usart_r, (1<<UCSZ01)|(1<<UCSZ00) ;8-Bit Character
  17. sts UCSR0C, usart_r ;Aysnchonous USART
  18. sts frame_cnt, false ;init Frame cnt
  19. ret
  20. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  21. ;RXC-Interrupt-Handler
  22. .global usart_RXC
  23. usart_RXC:
  24. push usart_r
  25. lds frame, UDR0 ;read Frame
  26. mov usart_r, frame
  27. andi usart_r, nibble_hi ;check Frame
  28. cpi usart_r, frame_mask
  29. brne .+12
  30. st X+, frame ;store Frame
  31. lds usart_r, frame_cnt
  32. inc usart_r
  33. sts frame_cnt, usart_r
  34. pop usart_r
  35. reti
  36. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  37. ;UDRE-Interrupt-Handler
  38. .global usart_UDRE
  39. usart_UDRE:
  40. push usart_r
  41. ld frame, X+ ;load new Frame
  42. sts UDR0, frame ;set Frame
  43. lds usart_r, frame_cnt
  44. inc usart_r
  45. sts frame_cnt, usart_r
  46. lds usart_r, UCSR0B
  47. cbr usart_r, 1<<UDRIE0 ;disable UDREI
  48. sbr usart_r, (1<<TXEN0)|(1<<TXCIE0) ;enable TX, TXCI
  49. sts UCSR0B, usart_r
  50. pop usart_r
  51. reti
  52. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  53. ;TXC-Interrupt-Handler
  54. .global usart_TXC
  55. usart_TXC:
  56. push usart_r
  57. lds usart_r, UCSR0B
  58. cbr usart_r, (1<<TXEN0)|(1<<TXCIE0) ;disable TX, TXCI
  59. sbr usart_r, 1<<UDRIE0 ;enable UDREI
  60. sts UCSR0B, usart_r
  61. pop usart_r
  62. reti