Main Page | File List | Globals

uart.c

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00023 #include "xmodem.h"
00024 
00025 extern volatile unsigned char buf[133];
00026 
00027 extern struct global
00028 {
00029   volatile unsigned char *recv_ptr;
00030   volatile unsigned char buffer_status;
00031   volatile unsigned char recv_error;
00032   volatile unsigned char t1_timed_out;
00033 } gl;
00034 
00035 #pragma vector=USART_RX_vect
00036 __interrupt void UART_RX_interrupt(void)
00037 {
00038                               // use local pointer until IAR optimizes pointer variables better in the next release
00039     volatile unsigned char *local_ptr;
00040 
00041     local_ptr = gl.recv_ptr;
00042                               // check for errors before reading data register ... reading UDR clears status
00043     if (UCSR0A & 0x18)           // Framing or over run error
00044     {
00045       gl.recv_error = TRUE;   // will NAK sender in respond.c
00046     }                         // always read a character otherwise another interrupt could get generated
00047                               // read status register before reading data register
00048     *local_ptr++ = UDR0;       // get char
00049     switch (buf[0])           // determine if buffer full
00050     {
00051         case (SOH) :
00052             if (local_ptr == (&buf[132] + 1))
00053             {
00054                 gl.buffer_status = full;
00055                 local_ptr = &buf[0];
00056             }
00057         break;
00058         case (EOT) :
00059             gl.buffer_status = full;
00060             local_ptr = &buf[0];
00061         break;
00062         default :
00063             gl.buffer_status = full;    // first char unknown
00064             local_ptr = &buf[0];
00065         break;
00066     }
00067     gl.recv_ptr = local_ptr;            // restore global pointer
00068 }

Generated on Tue Aug 23 13:47:52 2005 for Atmel AVR Application Note by  doxygen 1.4.4