Advertisement
tovis

AVR UART handling basic test plain assembler

Jun 9th, 2015
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. ; Should be the same as previous, but for now it's plain assembler compiled with avra
  2. ; The result is slightly different, now it's well seen that stackpointer is overwritten
  3. ; At the start it's trasnmit '\' = 0x5C but when I start transmit from the PC side
  4. ; quickly changed to something different, after a while even go into the trap for
  5. ; unused interrupts - at the start I'm disble interrupts globally.
  6. ;
  7. ;* *********************************************************************
  8. ;* avr-uart-test.asm
  9. ;* AVR uart handler for ATmega16
  10. ;* Plain assembler using avra
  11. ;* by tovis 2015
  12. ;* avra avr-uart-test.asm -l avr-uart-test.lst
  13. ;***********************************************************************
  14. .INCLUDE "rg_m16def.inc"
  15.  
  16. ;***********************************************************************
  17. .ORG 0x0000
  18. JMP START0 ; RESET
  19. JMP ISR_TRAP ; INT0
  20. JMP ISR_TRAP ; INT1
  21. JMP ISR_TRAP ; TIMER2_COMPARE
  22. JMP ISR_TRAP ; TIMER2_OVERFLOW
  23. JMP ISR_TRAP ; TIMER1_CAPTURE
  24. JMP ISR_TRAP ; TIMER1_COMPARE_A
  25. JMP ISR_TRAP ; TIMER1_COMPARE_B
  26. JMP ISR_TRAP ; TIMER1_OVERFLOW
  27. JMP ISR_TRAP ; TIMER0_OVERFLOW
  28. JMP ISR_TRAP ; SPI_TRASNFER_COMPLETE
  29. JMP ISR_TRAP ; USART_RX_COMPLETE
  30. JMP ISR_TRAP ; USART_TX_COMPLETE
  31. JMP ISR_TRAP ; ADC_CONVERSION_COMPLETE
  32. JMP ISR_TRAP ; EEPROM_READY
  33. JMP ISR_TRAP ; ANALOG_COMPARATOR
  34. JMP ISR_TRAP ; TWI_INTERFACE
  35. JMP ISR_TRAP ; INT2
  36. JMP ISR_TRAP ; TIMER0_COMPARE_MATCH
  37. JMP ISR_TRAP ; STORE_PROGRAM_MEMORY_READY
  38.  
  39. ISR_TRAP:
  40. CALL toggle_A7
  41. RJMP ISR_TRAP
  42.  
  43. ;***********************************************************************
  44. .ORG 0x0100
  45. START0:
  46. CLR R16 ; Clear R16
  47. OUT SREG, R16 ; Disable interrupt
  48. LDI R16, LOW(RAMEND) ; Stack pouinter to RAMEND = 0x045F
  49. OUT SPL, R16
  50. ; ??? LDI R16, HIGH(RAMEND)
  51. LDI R16, 0x02
  52. OUT SPH, R16
  53. ;-------
  54. SER R16
  55. OUT DDRA, R16 ; PORTA all pins are output
  56. CALL uart_setup
  57. ; ??? SEI ; Global interrupt enable
  58. main_loop:
  59. CALL uart_get
  60. CALL uart_put
  61. CALL toggle_A0
  62. RJMP main_loop
  63. ;***********************************************************************
  64. uart_get:
  65. SBIS UCSRA,RXC ; check if received data available
  66. RJMP uart_get_notready
  67. CALL toggle_A2 ; ???
  68. PUSH R16
  69. IN R16, UDR ; read data from receiver buffer
  70. POP R16
  71. uart_get_notready:
  72. RET
  73. ;-----------------------------------------------------------------------
  74. uart_put:
  75. SBIS UCSRA, UDRE ; check if UDR is empty
  76. RJMP uart_put_notready
  77. CALL toggle_A1 ; ???
  78. ; LDI R16, 'o'
  79. IN R16, SPL
  80. OUT UDR, R16
  81. uart_put_notready:
  82. RET
  83. ;-----------------------------------------------------------------------
  84. uart_setup:
  85. EOR R16, R16 ; Clear R16
  86. OUT UCSRB, R16 ; Disable USART interrupts
  87. ; Disable receive/transmit
  88. ; and UCSZ2 = 0 for 8 bit data
  89. LDI R16, LOW(103) ; Setup Baud rate 9600
  90. OUT UBRRL, R16
  91. LDI R16, HIGH(103)
  92. ANDI R16, 0x7F ; URSEL = 0 - access UBRRH
  93. OUT UBRRH, R16
  94.  
  95. OUT UCSRA, R16 ; Clrear status and U2X, MPCM
  96. LDI R16, 0b10000110 ; Asynchronous 8n1 and URSEL = 1
  97. OUT UCSRC, R16 ; Set ssynchronous 8n1
  98. ;---
  99. SBI UCSRB, TXEN ; Transmitter enable
  100. SBI UCSRB, RXEN ; Receiver enable
  101. RET
  102. ;***********************************************************************
  103. toggle_A0:
  104. IN R16, PORTA
  105. LDI R17, 0x01
  106. EOR R16, R17
  107. OUT PORTA, R16
  108. RET
  109. ;-----------------------------------------------------------------------
  110. toggle_A1:
  111. IN R16, PORTA
  112. LDI R17, 0x02
  113. EOR R16, R17
  114. OUT PORTA, R16
  115. RET
  116. ;-----------------------------------------------------------------------
  117. toggle_A2:
  118. IN R16, PORTA
  119. LDI R17, 0x04
  120. EOR R16, R17
  121. OUT PORTA, R16
  122. RET
  123. ;-----------------------------------------------------------------------
  124. toggle_A3:
  125. IN R16, PORTA
  126. LDI R17, 0x08
  127. EOR R16, R17
  128. OUT PORTA, R16
  129. RET
  130. ;-----------------------------------------------------------------------
  131. toggle_A7:
  132. IN R16, PORTA
  133. LDI R17, 0x80
  134. EOR R16, R17
  135. OUT PORTA, R16
  136. RET
  137. ;/***********************************************************************
  138. ;* avr-uart-test.asm
  139. ; **********************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement