00001
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
00039 volatile unsigned char *local_ptr;
00040
00041 local_ptr = gl.recv_ptr;
00042
00043 if (UCSR0A & 0x18)
00044 {
00045 gl.recv_error = TRUE;
00046 }
00047
00048 *local_ptr++ = UDR0;
00049 switch (buf[0])
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;
00064 local_ptr = &buf[0];
00065 break;
00066 }
00067 gl.recv_ptr = local_ptr;
00068 }