123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- #include "bsp.h"
- #include "board_gpio.h"
- #include "board_spi.h"
- #include "timer3.h"
- #define isMaster 0
- #define CRC_ENABLE
- uint16_t rx_cnt =0;
- uint16_t tx_cnt =0;
- uint16_t rx_error_cnt;
- uint8_t vectRxBuffer[255];
- uint16_t cRxData;
- uint16_t nPayloadLength = 12;
- int rssi_value;
- volatile SFlagStatus xTxDoneFlag = S_RESET;
- volatile SFlagStatus xRxDoneFlag = S_RESET;
- const uint8_t PN9_Tab2[256]={
- 0xFF,0x83,0xDF,0x17,0x32,0x09,0x4E,0xD1,
- 0xE7,0xCD,0x8A,0x91,0xC6,0xD5,0xC4,0xC4,
- 0x40,0x21,0x18,0x4E,0x55,0x86,0xF4,0xDC,
- 0x8A,0x15,0xA7,0xEC,0x92,0xDF,0x93,0x53,
- 0x30,0x18,0xCA,0x34,0xBF,0xA2,0xC7,0x59,
- 0x67,0x8F,0xBA,0x0D,0x6D,0xD8,0x2D,0x7D,
- 0x54,0x0A,0x57,0x97,0x70,0x39,0xD2,0x7A,
- 0xEA,0x24,0x33,0x85,0xED,0x9A,0x1D,0xE0,
- 0xFF,0x83,0xDF,0x17,0x32,0x09,0x4E,0xD1,
- 0xE7,0xCD,0x8A,0x91,0xC6,0xD5,0xC4,0xC4,
- 0x40,0x21,0x18,0x4E,0x55,0x86,0xF4,0xDC,
- 0x8A,0x15,0xA7,0xEC,0x92,0xDF,0x93,0x53,
- 0x30,0x18,0xCA,0x34,0xBF,0xA2,0xC7,0x59,
- 0x67,0x8F,0xBA,0x0D,0x6D,0xD8,0x2D,0x7D,
- 0x54,0x0A,0x57,0x97,0x70,0x39,0xD2,0x7A,
- 0xEA,0x24,0x33,0x85,0xED,0x9A,0x1D,0xE0,
- 0xFF,0x83,0xDF,0x17,0x32,0x09,0x4E,0xD1,
- 0xE7,0xCD,0x8A,0x91,0xC6,0xD5,0xC4,0xC4,
- 0x40,0x21,0x18,0x4E,0x55,0x86,0xF4,0xDC,
- 0x8A,0x15,0xA7,0xEC,0x92,0xDF,0x93,0x53,
- 0x30,0x18,0xCA,0x34,0xBF,0xA2,0xC7,0x59,
- 0x67,0x8F,0xBA,0x0D,0x6D,0xD8,0x2D,0x7D,
- 0x54,0x0A,0x57,0x97,0x70,0x39,0xD2,0x7A,
- 0xEA,0x24,0x33,0x85,0xED,0x9A,0x1D,0xE0,
- 0xFF,0x83,0xDF,0x17,0x32,0x09,0x4E,0xD1,
- 0xE7,0xCD,0x8A,0x91,0xC6,0xD5,0xC4,0xC4,
- 0x40,0x21,0x18,0x4E,0x55,0x86,0xF4,0xDC,
- 0x8A,0x15,0xA7,0xEC,0x92,0xDF,0x93,0x53,
- 0x30,0x18,0xCA,0x34,0xBF,0xA2,0xC7,0x59,
- 0x67,0x8F,0xBA,0x0D,0x6D,0xD8,0x2D,0x7D,
- 0x54,0x0A,0x57,0x97,0x70,0x39,0xD2,0x7A,
- 0xEA,0x24,0x33,0x85,0xED,0x9A,0x1D,0xE0,
- };
-
- static PAN312xRadioInit RadioInit = {
- 433920000,
- 0,
- 0,
- MOD_2FSK,
- 10000,
- 10000,
- 10000,
- POWER_LDO_0603,
- POWER_20dBm,
- };
- static PAN312xCrcInit CrcInit = {
- CRC_MODE_16_BIT,
- 0x8005,
- 0xffff,
- CRC_BIT_ORDER_MSB_FIRST,
- CRC_BYTE_MSB_FIRST,
- CRC_RANGE_WHOLE_PAYLOAD,
- S_DISABLE,//S_ENABLE,//,
- };
- static PAN321xPacketInit PacketInit = {
- 4,
- PREAMBLE_0101,
- 0,
- 4,
- 0x2dd42dd4,
- MANCHESTER_ZeroToTwo,
- S_DISABLE,
- MANCHESTER_ZeroToTwo,
- S_DISABLE,
- MANCHESTER_ZeroToTwo,
- S_DISABLE,
- FEC_HAMING_DISABLE,
- WHITENING_DISABLE,
- DATA_MODE_PACKET,
- };
- typedef enum
- {
- TX_LED,
- RX_LED
- }TX_RX_LED;
- RF_States rf_statues = RF_STAND_BY;
- void board_led_toggle( TX_RX_LED led )
- {
- if( led == TX_LED )
- {
- Gpio_WriteOutputIO(LED_TX_PORT, LED_TX_PIN, FALSE);
- delay1ms(15);
- Gpio_WriteOutputIO(LED_TX_PORT, LED_TX_PIN, TRUE);
- }
- else
- {
- Gpio_WriteOutputIO(LED_RX_PORT, LED_RX_PIN, FALSE);
- delay1ms(15);
- Gpio_WriteOutputIO(LED_RX_PORT, LED_RX_PIN, TRUE);
-
- }
- }
- void GPIO_SLEEP_state(void)
- {
-
- Gpio_SetAnalogMode(RADIO_IRQ_PORT, RADIO_IRQ_PIN);
- Gpio_SetAnalogMode(RADIO_NSS_PORT, RADIO_NSS_PIN);
- Gpio_SetAnalogMode(RADIO_RST_POT, RADIO_RST_PIN);
- Gpio_SetAnalogMode(RADIO_BUSY_PORT, RADIO_BUSY_PIN);
- Gpio_SetAnalogMode(RADIO_MISO_PORT, RADIO_MISO_PIN);
- Gpio_SetAnalogMode(RADIO_MOSI_PORT, RADIO_MOSI_PIN);
- Gpio_SetAnalogMode(RADIO_SCK_PORT, RADIO_SCK_PIN);
- }
- void board_rf_pan3120_init(void)
- {
- PAN312x_DIO8_INTDISABLE();
-
- PAN312x_Fsk_Init();
-
- uint16_t fwid_buf;
- PAN312x_Get_FwId(&fwid_buf);
-
- PAN312x_RadioInit(&RadioInit);
- PAN312x_PktInit(&PacketInit);
- PAN312x_CrcInit(&CrcInit);
-
- DIO8_EnableInterrupt();
-
- #if 0//cw test
-
- PAN312x_Enter_Carrier(433920000,POWER_21dBm);
- while(1);
-
- #endif
-
- #if 0 //sleep test
-
- PAN312x_Enter_Sleep(DEEP_SLEEP_MODE, WAKE_UP_STATE_READY);
- GPIO_SLEEP_state();//把所有与模块相接的IO口设置为模拟端口
-
- delay1ms(3000);//RF休眠3S后重新进入工作状态
-
- board_GpioInit();
- board_spi_int();
-
-
- PAN312x_DIO8_INTDISABLE();
- PAN312x_Fsk_Init();
- PAN312x_RadioInit(&RadioInit);
- PAN312x_PktInit(&PacketInit);
- PAN312x_CrcInit(&CrcInit);
- DIO8_EnableInterrupt();
-
- #endif
-
- rf_statues = RF_START_RX;
- }
- void board_rf_pan3120_task(void)
- {
- switch( rf_statues )
- {
- case RF_START_TX:
-
- PAN312x_Enter_Ready();
-
- #ifdef CRC_ENABLE
- PAN312x_Set_TxPacket_Config(TxVariablePackedCrcEnable);
- #else
- PAN312x_Set_TxPacket_Config(TxVariablePackedCrcDisable);
- #endif
-
- PAN312x_GpioIrq_Config((PAN312xIrqList)(IRQ_MASK_TX_DONE), S_ENABLE);
- PAN312x_System_Ctrl(SYS_CTRL_AUTO_CLEAR_STATUS);
-
- PAN312x_Irq_Clear_AllStatus();
-
- PAN312x_Write_Fifo((uint8_t *)PN9_Tab2, nPayloadLength);
- PAN312x_Enter_Tx(0, 0, nPayloadLength);
-
- rf_statues = RF_TX_RUNNING;
-
- break;
-
-
- case RF_TX_RUNNING:
-
- if(xTxDoneFlag)
- {
- xTxDoneFlag = S_RESET;
-
- board_led_toggle( TX_LED );
-
- tx_cnt++;
-
- rf_statues = RF_START_RX;
- //delay1ms(1000);
- // rf_statues = RF_START_TX;
- }
-
- break;
-
-
- case RF_START_RX:
-
- PAN312x_Enter_Ready();
-
- #if DCDC_ENABLE == 1
- PAN312x_DCDC_Enable();
- #endif
-
- #ifdef CRC_ENABLE
- if(CrcInit.CrcBitInv == S_DISABLE){
- PAN312x_Set_RxPacket_Config(RxVariablePackedCrcEnable);
- }else if(CrcInit.CrcBitInv == S_ENABLE){
- PAN312x_Set_RxPacket_Config(RxVariablePackedCrcBitInvCrcEnable);
- }
- #else
- PAN312x_Set_RxPacket_Config(RxVariablePackedCrcDisable);
- #endif
-
- PAN312x_GpioIrq_Config((PAN312xIrqList)(IRQ_MASK_RX_DONE | IRQ_MASK_RX_CRC_ERROR), S_ENABLE);
-
- PAN312x_System_Ctrl(SYS_CTRL_AUTO_CLEAR_STATUS);
-
- PAN312x_Set_RxTimeOut(400000); //400ms
- PAN312x_Set_RxTimeout_ExitState(STATE_RX);
- PAN312x_Set_RxInvalid_ExitState(STATE_RX);
- PAN312x_Set_RxValid_ExitState(STATE_RX);
-
- #ifdef RX_TIMEOUT_ENABLE
- PAN312x_Enter_Rx(0, START_COND_ENABLE_TIMEOUT, 0);
-
- #else
-
- PAN312x_Enter_Rx(0, 0, 0);
-
- #endif
-
- rf_statues = RF_RX_RUNNING;
-
- break;
-
- case RF_RX_RUNNING:
-
- if(xRxDoneFlag)
- {
- rssi_value = PAN312x_GetRSSI();
-
- rx_cnt ++ ;
- cRxData = PAN312x_Get_Rx_Length();
- PAN312x_Read_Fifo(vectRxBuffer, cRxData);
-
- PAN312x_Irq_Clear_RxDone_Status();
-
- if(memcmp(vectRxBuffer, PN9_Tab2, cRxData) == 0)
- {
- board_led_toggle( RX_LED);
-
- printf("Rx Cnt = %d\r\n", rx_cnt);
- printf("Rssi Value = -%d\r\n", rssi_value);
- printf("Payload length = %d\r\n", nPayloadLength);
- /* print the received data */
- printf("B data received: [");
- for(uint8_t i = 0; i < nPayloadLength ; i++)
- printf("%02x ", vectRxBuffer[i]);
- printf("]\r\n");
-
- memset(vectRxBuffer,0,sizeof(vectRxBuffer));
- }
-
- xRxDoneFlag = S_RESET;
-
- #if isMaster
-
- rf_statues =RF_START_RX;
- #else
- //rf_statues = RF_START_ACK_TX;
- //rf_statues =RF_START_RX;
-
- #endif
-
- }
-
- break;
-
-
-
- case RF_STAND_BY: break;
-
-
- default:break;
-
- }
- }
- PAN312xIrqs xIrqStatus;
- void PortA_IRQHandler(void)
- {
- if(TRUE == Gpio_GetIrqStatus(RADIO_IRQ_PORT, RADIO_IRQ_PIN))
- {
- if(DIO8_GetState() == TRUE)
- {
- PAN312x_Irq_Get_Status(&xIrqStatus);
-
- if(xIrqStatus.IRQ_STATUS0_F.IRQ_TX_DONE){
- xTxDoneFlag = S_SET;
- }
-
- if(xIrqStatus.IRQ_STATUS0_F.IRQ_RX_DONE){
- xRxDoneFlag = S_SET;
-
- }
-
- if(xIrqStatus.IRQ_STATUS0_F.IRQ_RX_CRC_ERROR){
- PAN312x_Irq_Clear_RxCrcError_Status();
- }
- }
-
- Gpio_ClearIrq(RADIO_IRQ_PORT, RADIO_IRQ_PIN);
- }
- }
|