Advertisement
Guest User

isr uart tx string

a guest
Jul 1st, 2022
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4.  
  5.  
  6. #define BAUD 9600
  7. #define BRC 103 //9600baud
  8.  
  9. #define tx_buffer_size 128
  10.  
  11.  
  12. char serialBuffer[tx_buffer_size];
  13. uint8_t serialReadPosition=0;
  14. uint8_t serialWritePosition=0;
  15.  
  16. void serialWrite(char c[]);
  17. void serialAppend(char c);
  18.  
  19. #include <util/delay.h>
  20. #include <avr/interrupt.h>
  21.  
  22.  
  23. void serialAppend(char c){
  24.  
  25. serialBuffer[serialWritePosition]=c;
  26. serialWritePosition++;
  27.  
  28. if(serialWritePosition>=tx_buffer_size){
  29. serialWritePosition=0;
  30. }
  31. }
  32.  
  33.  
  34. void serialWrite(char c[]){
  35.  
  36. for(uint8_t i=0;i<strlen(c);i++){
  37. serialAppend(c[i]);
  38. }
  39.  
  40. if (UCSR0A & (1<<UDRE0))
  41. {
  42. UDR0=0;
  43. }
  44.  
  45. }
  46.  
  47.  
  48.  
  49. void USART_init(){
  50.  
  51. UBRR0H = (BRC>>8);
  52. UBRR0L = BRC;
  53.  
  54. UCSR0B|=(1<<TXEN0)|(1<<TXCIE0); //1 bit 8 bit data
  55. //TX setup
  56. UCSR0C |=(1<<UCSZ01)|(1<<UCSZ00);
  57.  
  58. sei();
  59.  
  60. }
  61.  
  62. void send_char(unsigned char data){
  63.  
  64. while (!(UCSR0A&(1<<UDRE0)));
  65. UDR0 =data;
  66.  
  67. }
  68.  
  69.  
  70. int main(void){
  71. USART_init();
  72. _delay_ms(100);
  73. serialWrite("Hello World!");
  74. _delay_ms(2000);
  75. while(1){
  76.  
  77. }
  78.  
  79. return 0;
  80. }
  81.  
  82.  
  83.  
  84. ISR(USART_TX_vect){
  85.  
  86. if(serialReadPosition!=serialWritePosition)
  87. {
  88. send_char(serialBuffer[serialReadPosition]);
  89. serialReadPosition++;
  90. }
  91.  
  92. if(serialReadPosition>=tx_buffer_size)
  93. {
  94. serialReadPosition=0;
  95. }
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement