南华大学电气工程学院课程设计(论文)
*/
uint8_t NRF_Write_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars) { uint8_t i; uint8_t status; SPI_CSN_L(); /* ??í¨?÷?t */ status = SPI_RW(reg); /* D′??′??÷μ??· */ for(i=0; i ***************************************************************** ***************************************************************** */ uint8_t NRF_Read_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars) { uint8_t i; uint8_t status; SPI_CSN_L(); /* ??í¨?÷?t */ status = SPI_RW(reg); /* D′??′??÷μ??· */ for(i=0; i /****************************************************************** * D′êy?Y°ü ******************************************************************/ void NRF_TxPacket(uint8_t * tx_buf, uint8_t len) { SPI_CE_L(); //StandBy I?£ê? NRF_Write_Buf(WR_TX_PLOAD, tx_buf, len); // ×°??êy?Y SPI_CE_H(); //????CE£??¤·¢êy?Y·¢?í } /* ***************************************************************** 第35页,共69页 南华大学电气工程学院课程设计(论文) ***************************************************************** */ u8 NRF_CHECK(void) { u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5}; u8 i; NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5); //?ònRFμ???′??÷D′è?????êy×? buf[1] = 0X11; NRF_Read_Buf(TX_ADDR,buf,5); //?ònRFμ???′??÷D′è?????êy×? for(i=0;i<5;i++) if(buf[i]!=0XA5) break; if(i!=5)return 0;//?ònRFμ???′??÷D′è?????êy×? return 1; } void NRF24L01_INIT(void) { SPI_CE_L(); //StandBy I?£ê? SPI_CE_L(); NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//D′RX?úμ?μ??· NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //D′TX?úμ?μ??· NRF_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01) NRF_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a); NRF_Write_Reg(NRF_WRITE_REG+RF_CH,40); //éè??RFí¨μà?aCHANAL NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//?? NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x26); NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); // IRQê?·¢íê3é?D???ìó|£?16??CRC£??÷·¢?í SPI_CE_H(); } /* ***************************************************************** * ?óê??£ê? ***************************************************************** */ void SetRX_Mode(void) 第36页,共69页 南华大学电气工程学院课程设计(论文) { SPI_CE_L(); NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); // IRQê?·¢íê3é?D???ìó|£?16??CRC £??÷?óê? SPI_CE_H(); } /* ***************************************************************** * ·¢?í?£ê? ***************************************************************** */ void SetTX_Mode(void) { SPI_CE_L(); NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e); // IRQê?·¢íê3é?D???ìó|£?16??CRC£??÷·¢?í SPI_CE_H(); } /*======================================================================*/ void NRF_IRQ(void) { uint8_t sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS); if(sta & (1< NRF_Read_Buf(0x61,NRF24L01_RXDATA,32);// read receive payload from RX_FIFO buffer NRF_Write_Reg(0x27, 0xff);//??3ynrfμ??D??±ê???? } if(sta & (1< void NRF_GPIO_Interrupt_Init(void) //nRFê1ó?μ?ía2??D??μ?òy??3?ê??ˉ { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_2); IntEnable(INT_GPIOE); 第37页,共69页 南华大学电气工程学院课程设计(论文) GPIOIntEnable(GPIO_PORTE_BASE,GPIO_INT_PIN_2); GPIOIntTypeSet(GPIO_PORTE_BASE,GPIO_PIN_2,GPIO_FALLING_EDGE); } void NRF24L01_Configure(void) { uint8_t flag=0; SPI1_INIT(); flag=NRF_CHECK(); if(!flag) { while(1) { ROM_SysCtlDelay(SysCtlClockGet()/3); printf(\ failure!\\r\\n\ } } NRF24L01_INIT(); NRF_GPIO_Interrupt_Init(); NRF_IRQ(); } uint32_t nrf_check; void NRF_Data_Receive(void) { uint8_t i; NRF_IRQ(); //??3ynRFμ??D??±ê???? // printf(\TA); // printf(\ nrf_check = 0; for(i=0;i<30;i++) { nrf_check = nrf_check + NRF24L01_RXDATA[i]; } if((nrf_check < 250*30 ) && (nrf_check != 0 ) && ((NRF24L01_RXDATA[30] == (uint8_t)(nrf_check & 0x00ff)) && (NRF24L01_RXDATA[31] == (uint8_t)((nrf_check & 0xff00) >> 8)))) { //??êy?Y??DD?é?¤ uint8_t id=NRF24L01_RXDATA[1]; uint8_t id_str[3]; uint8_t temp_str[4]; uint8_t alarm; uint8_t str[]=\ 第38页,共69页 南华大学电气工程学院课程设计(论文) uint8_t str_x[]=\ uint8_t str_alarm[2]; uint16_t temp; float tempture; temp= (NRF24L01_RXDATA[3]<<8) + NRF24L01_RXDATA[2]; alarm=NRF24L01_RXDATA[4]; tempture=temp * 0.0625; printf(\ Temp=%f alarm=%d\\r\\n\ LcdShowStr(0,0,str); id_str[2] = id+'0'; id_str[1] = id/10+'0'; id_str[0] = id/10/10+'0'; LcdShowStr(3,0,id_str); temp =tempture *10; temp_str[3]=temp+'0'; temp_str[2]='.'; temp_str[1]=temp/10+'0'; temp_str[0]=temp/10/10 % 10+'0'; LcdShowStr(12,0,temp_str); LcdShowStr(0,1,str_x); str_alarm[0]=alarm /10 +'0'; str_alarm[1]=alarm +'0'; LcdShowStr(6,1,str_alarm); } } void EXTI_PE_Handler(void) { uint32_t status; status=GPIOIntStatus(GPIO_PORTE_BASE,true); GPIOIntClear(GPIO_PORTE_BASE,status); if(status & GPIO_PIN_2) { NRF_Data_Receive(); } } //nrf24l01.h #ifndef _NRF24L01_H_ #define _NRF24L01_H_ 第39页,共69页