//********************************************* //********* TIMER 1 interrupt handler ********* // Action: Test if RTC crystall is runing, like // Toglle LEDx with frequency 1Hz. //********************************************* void __ISR(_TIMER_1_VECTOR, ipl3) Timer1Handler(void) { // clear the interrupt flag mT1ClearIntFlag(); LED0_IO ^= 1; // Check and display LEDs status into Terminal USART_Test_Menu_Begin(); if(PORTDbits.RD0){ USART_Send_String("\n\r | LED1 | ON | :) "); USART_Send_Data(0X01); // emoticon ASCII code USART_Send_String(" |"); } else{ USART_Send_String("\n\r | LED1 | OFF | :( "); USART_Send_Data(0X02); // emoticon ASCII code USART_Send_String(" |"); } if(PORTDbits.RD1){ USART_Send_String("\n\r | LED2 | ON | :) "); USART_Send_Data(0X01); // emoticon ASCII code USART_Send_String(" |"); } else{ USART_Send_String("\n\r | LED2 | OFF | :( "); USART_Send_Data(0X02); // emoticon ASCII code USART_Send_String(" |"); } if(PORTDbits.RD2){ USART_Send_String("\n\r | LED3 | ON | :) "); USART_Send_Data(0X01); // emoticon ASCII code USART_Send_String(" |"); } else{ USART_Send_String("\n\r | LED3 | OFF | :( "); USART_Send_Data(0X02); // emoticon ASCII code USART_Send_String(" |"); } USART_Send_String("\n\r ------ -------- ---------- \n\r"); }
// Initialize the RFA1's low-power 2.4GHz transceiver. // Sets up the state machine, and gets the radio into // the RX_ON state. Interrupts are enabled for RX // begin and end, as well as TX end. uint8_t rfBegin(uint8_t channel) { USART_Send_String("RF Init started\n"); for (int i=0; i<128; i++) { radioRXBuffer.buffer[i] = 0; } radioRXBuffer.tail = 0; radioRXBuffer.head = 0; // Transceiver Pin Register -- TRXPR. // This register can be used to reset the transceiver, without // resetting the MCU. TRXPR |= (1<<TRXRST); // TRXRST = 1 (Reset state, resets all registers) _delay_ms(1); //TRXPR &= ~(1<<TRXRST); //clear reset (RZ) // Transceiver Interrupt Enable Mask - IRQ_MASK // This register disables/enables individual radio interrupts. // First, we'll disable IRQ and clear any pending IRQ's IRQ_MASK = 0; // Disable all IRQs // Transceiver State Control Register -- TRX_STATE // This register controls the states of the radio. // First, we'll set it to the TRX_OFF state. TRX_STATE = TRX_OFF; // Set to TRX_OFF (0x08) state | 0xE0 = 11100000 _delay_ms(1); USART_Send_String("\nTRX_STATE Set to off\n"); // Transceiver Status Register -- TRX_STATUS // This read-only register contains the present state of the radio transceiver. // After telling it to go to the TRX_OFF state, we'll make sure it's actually // there. if ((TRX_STATUS & 0x1F) != TRX_OFF )// Check to make sure state is correct | 0x1F = 00011111 return FAILURE; // Error, TRX isn't off // Transceiver Control Register 1 - TRX_CTRL_1 // We'll use this register to turn on automatic CRC calculations. TRX_CTRL_1 |= (1<<TX_AUTO_CRC_ON); // Enable automatic CRC calc. // Enable RX start/end and TX end interrupts IRQ_MASK = (1<<RX_START_EN) | (1<<RX_END_EN) | (1<<TX_END_EN); // Transceiver Clear Channel Assessment (CCA) -- PHY_CC_CCA // This register is used to set the channel. CCA_MODE should default // to Energy Above Threshold Mode. // Channel should be between 11 and 26 (2405 MHz to 2480 MHz) if ((channel < 11) || (channel > 26)) channel = 11; PHY_CC_CCA = (PHY_CC_CCA & 0xE0) | 11; // Set the channel to 11 // Set transceiver transmit power PHY_TX_PWR = 0; //maximum power @ 3.5dBm / 2mW // Finally, we'll enter into the RX_ON state. Now waiting for radio RX's, unless // we go into a transmitting state. TRX_STATE = (TRX_STATE & 0xE0) | RX_ON; // Default to receiver USART_Send_String("RF Init OK\n"); return SUCCESS; }