__interrupt void TimerAhandler(void) { //unsigned char Register; unsigned char Register[2]; //kputchar('V'); stopCounter; //Register = IRQStatus; //IRQ status register address //irqCLR; //PORT2 interrupt flag clear //ReadSingle(&Register, 1); //function call for single address read //IRQ status register has to be read Register[0] = IRQStatus; /* IRQ status register address */ Register[1] = IRQMask; //Dummy read //ReadSingle(Register, 2); /* function call for single address read */ //ReadCont(Register, 1); ReadCont(Register, 2); // ReadSingle(Register, 1); *Register = *Register & 0xF7; //set the parity flag to 0 //if(Register == 0x00) if(*Register == 0x00 || *Register == 0x80) //added code //if(RXTXstate > 1) // i_reg = 0xFF; //else i_reg = 0x00; else i_reg = 0x01; __low_power_mode_off_on_exit(); }//TimerAhandler
/* ======================================================================================================================= ======================================================================================================================= */ void InterruptHandlerReader(unsigned char *Register) { /*~~~~~~~~~~~~~~~~*/ /* * char phello[20]; * //for testing */ unsigned char len; /*~~~~~~~~~~~~~~~~*/ /* * Register = Register & 0xF7; * //set the parity flag to 0 ; * parity is not used in 15693 and Tag-It */ #if DBG Put_byte(*Register); #endif if(*Register == 0xA0) { /* TX active and only 3 bytes left in FIFO */ i_reg = 0x00; #if DBG kputchar('.'); /* FIFO filling is done in the transmit function */ #endif } else if(*Register == BIT7) { /* TX complete */ i_reg = 0x00; *Register = Reset; /* reset the FIFO after TX */ DirectCommand(Register); #if DBG kputchar('T'); #endif } else if((*Register & BIT1) == BIT1) { /* collision error */ i_reg = 0x02; /* RX complete */ // *Register = StopDecoders; /* reset the FIFO after TX */ // DirectCommand(Register); CollPoss = CollisionPosition; ReadSingle(&CollPoss, 1); // *Register = 0x0c; // ReadSingle(Register, 1); /* * CollPoss &= 0xF7; */ len = CollPoss - 0x20; /* number of valid bytes if FIFO */ if(!POLLING) { kputchar('{'); Put_byte(CollPoss); kputchar('}'); } if((len & 0x0f) != 0x00) len = len + 0x10; /* add 1 byte if broken byte recieved */ len = len >> 4; if(len != 0x00) { buf[RXTXstate] = FIFO; /* write the recieved bytes to the correct place of the * buffer; * */ ReadCont(&buf[RXTXstate], len); RXTXstate = RXTXstate + len; } /* if */ *Register = StopDecoders; /* reset the FIFO after TX */ DirectCommand(Register); *Register = Reset; DirectCommand(Register); *Register = IRQStatus; /* IRQ status register address */ *(Register + 1) = IRQMask; //ReadSingle(Register, 2); /* function call for single address read */ // ReadCont(Register, 2); if (SPIMODE) ReadCont(Register, 2); else ReadSingle(Register, 1); TRF_IRQ_CLEAR(); }