fds

Committer:
brainliang
Date:
Mon Dec 09 09:13:59 2019 +0000
Revision:
2:6c547cdb94e6
Parent:
1:c41959327807
ade

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ucial 0:4caead137300 1 #include "nRF24L01P.h"
Ucial 0:4caead137300 2
Ucial 1:c41959327807 3
Ucial 0:4caead137300 4 uint8_t NRF24L01_RXDATA[32];
Ucial 0:4caead137300 5 uint8_t NRF24L01_TXDATA[32];
Ucial 0:4caead137300 6 static uint8_t TX_ADDRESS[5]= {0x00,0x00,0x00,0x00,0x08};
Ucial 0:4caead137300 7 static uint8_t RX_ADDRESS[5]= {0x00,0x00,0x00,0x00,0x08};
Ucial 0:4caead137300 8 int Nrf_Erro=0;
Ucial 0:4caead137300 9 int ledtick;
Ucial 0:4caead137300 10
Ucial 0:4caead137300 11 uint8_t nRF24L01P::NRF_Read_Reg(uint8_t reg)
Ucial 0:4caead137300 12 {
Ucial 0:4caead137300 13 uint8_t reg_val;
Ucial 0:4caead137300 14 nCS_=0;
Ucial 0:4caead137300 15 spi_.write(reg);
Ucial 0:4caead137300 16 reg_val = spi_.write(0);
Ucial 0:4caead137300 17 nCS_=1;
Ucial 0:4caead137300 18 return reg_val;
Ucial 0:4caead137300 19
Ucial 0:4caead137300 20 }
Ucial 0:4caead137300 21 uint8_t nRF24L01P::NRF_Write_Reg(uint8_t reg, uint8_t value)
Ucial 0:4caead137300 22 {
Ucial 0:4caead137300 23 uint8_t status;
Ucial 0:4caead137300 24 nCS_=0;
Ucial 0:4caead137300 25 status = spi_.write(reg);
Ucial 0:4caead137300 26 spi_.write(value);
Ucial 0:4caead137300 27 nCS_=1;
Ucial 0:4caead137300 28 return status;
Ucial 0:4caead137300 29 }
Ucial 0:4caead137300 30 uint8_t nRF24L01P::NRF_Read_Buff(uint8_t reg, uint8_t *pBuf, uint8_t uchars)
Ucial 0:4caead137300 31 {
Ucial 0:4caead137300 32 uint8_t i;
Ucial 0:4caead137300 33 uint8_t status;
Ucial 0:4caead137300 34 nCS_=0;
Ucial 0:4caead137300 35 status = spi_.write(reg);
Ucial 0:4caead137300 36 for(i=0; i<uchars; i++)
Ucial 0:4caead137300 37 {
Ucial 0:4caead137300 38 pBuf[i] = spi_.write(0);
Ucial 0:4caead137300 39 }
Ucial 0:4caead137300 40 nCS_=1;
Ucial 0:4caead137300 41 return status;
Ucial 0:4caead137300 42 }
Ucial 0:4caead137300 43 uint8_t nRF24L01P::NRF_Write_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars)
Ucial 0:4caead137300 44 {
Ucial 0:4caead137300 45 uint8_t i;
Ucial 0:4caead137300 46 uint8_t status;
Ucial 0:4caead137300 47 nCS_=0;
Ucial 0:4caead137300 48 status = spi_.write(reg);
Ucial 0:4caead137300 49 for(i=0; i<uchars; i++)
Ucial 0:4caead137300 50 {
Ucial 0:4caead137300 51 spi_.write(pBuf[i]);
Ucial 0:4caead137300 52 }
Ucial 0:4caead137300 53 nCS_=1;
Ucial 0:4caead137300 54 return status;
Ucial 0:4caead137300 55 }
Ucial 0:4caead137300 56 void nRF24L01P::NRF24L01_Set_TX(void)
Ucial 0:4caead137300 57 {
Ucial 0:4caead137300 58 ce_=0;
Ucial 0:4caead137300 59 nRF24L01P::NRF_Write_Reg(NRF_WRITE_REG + CONFIG,0x0E);
Ucial 0:4caead137300 60 ce_=1;
Ucial 0:4caead137300 61 }
Ucial 0:4caead137300 62 void nRF24L01P::NRF24L01_Set_RX(void)
Ucial 0:4caead137300 63 {
Ucial 0:4caead137300 64 ce_=0;
Ucial 0:4caead137300 65 NRF_Write_Reg(NRF_WRITE_REG + CONFIG,0x0F);//½ÓÊÕ
Ucial 0:4caead137300 66 ce_=1;
Ucial 0:4caead137300 67 }
Ucial 0:4caead137300 68 void nRF24L01P::NRF_Send_TX(uint8_t * tx_buf, uint8_t len)
Ucial 0:4caead137300 69 {
Ucial 0:4caead137300 70 nRF24L01P::NRF24L01_Set_TX();
Ucial 0:4caead137300 71 ce_=0;
Ucial 0:4caead137300 72 nRF24L01P::NRF_Write_Buf(WR_TX_PLOAD, tx_buf, len);
Ucial 0:4caead137300 73 ce_=1;
Ucial 0:4caead137300 74 wait_us(10);
Ucial 0:4caead137300 75 ledtick++;
Ucial 0:4caead137300 76 if(ledtick>=50)
Ucial 0:4caead137300 77 {
Ucial 0:4caead137300 78 check_led=!check_led;
Ucial 0:4caead137300 79 ledtick=0;
Ucial 0:4caead137300 80 }
Ucial 0:4caead137300 81 }
Ucial 0:4caead137300 82 nRF24L01P::nRF24L01P(PinName mosi,
Ucial 0:4caead137300 83 PinName miso,
Ucial 0:4caead137300 84 PinName sck,
Ucial 0:4caead137300 85 PinName csn,
Ucial 0:4caead137300 86 PinName ce,
Ucial 0:4caead137300 87 PinName irq):spi_(mosi,miso,sck),nCS_(csn),ce_(ce),nIRQ_(irq),check_led(PC_13)
Ucial 0:4caead137300 88 {
Ucial 0:4caead137300 89 nCS_ = 1;
Ucial 0:4caead137300 90
Ucial 0:4caead137300 91 spi_.frequency(9000000);
Ucial 0:4caead137300 92 spi_.format(8,0);
Ucial 0:4caead137300 93 wait_us(4); // Wait for Power-on reset
Ucial 1:c41959327807 94 NRF24L01_Init(40,1);
Ucial 1:c41959327807 95 NRF24L01_Check();
Ucial 0:4caead137300 96 }
Ucial 0:4caead137300 97
Ucial 0:4caead137300 98
Ucial 0:4caead137300 99 void nRF24L01P::NRF24L01_Check(void)
Ucial 0:4caead137300 100 {
Ucial 0:4caead137300 101 uint8_t buf[5];
Ucial 0:4caead137300 102 uint8_t i;
Ucial 0:4caead137300 103 NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,5);
Ucial 0:4caead137300 104 NRF_Read_Buff(TX_ADDR,buf,5);
Ucial 0:4caead137300 105 for(i=0;i<5;i++)
Ucial 0:4caead137300 106 {
Ucial 0:4caead137300 107 if(buf[i]!=TX_ADDRESS[i])
Ucial 0:4caead137300 108 break;
Ucial 0:4caead137300 109 }
Ucial 0:4caead137300 110
Ucial 0:4caead137300 111 if(i==5)
Ucial 0:4caead137300 112 {
Ucial 0:4caead137300 113 uint8_t ledt;
Ucial 0:4caead137300 114 for(ledt=0;ledt<5;ledt++)
Ucial 0:4caead137300 115 {
Ucial 0:4caead137300 116 check_led=0;
Ucial 0:4caead137300 117 wait_ms(100);
Ucial 0:4caead137300 118 check_led=1;
Ucial 0:4caead137300 119 wait_ms(100);
Ucial 0:4caead137300 120 }
Ucial 0:4caead137300 121 }
Ucial 0:4caead137300 122 }
Ucial 0:4caead137300 123 void nRF24L01P::NRF24L01_Init(uint8_t Chanal,uint8_t Mode)
Ucial 0:4caead137300 124 {
Ucial 0:4caead137300 125 ce_=0;
Ucial 0:4caead137300 126 ledtick=0;
Ucial 0:4caead137300 127 NRF_Write_Reg(FLUSH_TX,0xff);
Ucial 0:4caead137300 128 NRF_Write_Reg(FLUSH_RX,0xff);
Ucial 0:4caead137300 129 NRF_Write_Buf(NRF_WRITE_REG + TX_ADDR, TX_ADDRESS,5);
Ucial 0:4caead137300 130 NRF_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0,RX_ADDRESS,5);
Ucial 0:4caead137300 131
Ucial 0:4caead137300 132 NRF_Write_Reg(NRF_WRITE_REG + EN_AA, 0x01);
Ucial 0:4caead137300 133 NRF_Write_Reg(NRF_WRITE_REG + EN_RXADDR, 0x01);
Ucial 0:4caead137300 134 NRF_Write_Reg(NRF_WRITE_REG + SETUP_RETR,0x1a);
Ucial 0:4caead137300 135 NRF_Write_Reg(NRF_WRITE_REG + RF_CH, Chanal);
Ucial 0:4caead137300 136 NRF_Write_Reg(NRF_WRITE_REG + RX_PW_P0, 32);
Ucial 0:4caead137300 137 NRF_Write_Reg(NRF_WRITE_REG + RF_SETUP, 0x0f);
Ucial 0:4caead137300 138
Ucial 0:4caead137300 139 if(Mode==TX)
Ucial 0:4caead137300 140 NRF_Write_Reg(NRF_WRITE_REG + CONFIG,0x0E);
Ucial 0:4caead137300 141 else if(Mode==RX)
Ucial 0:4caead137300 142 NRF_Write_Reg(NRF_WRITE_REG + CONFIG,0x0F);
Ucial 0:4caead137300 143
Ucial 0:4caead137300 144 ce_=1;
Ucial 0:4caead137300 145 }
Ucial 0:4caead137300 146 void nRF24L01P::NRF24L01_IRQ(void)
Ucial 0:4caead137300 147 {
Ucial 0:4caead137300 148 uint8_t status = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
Ucial 0:4caead137300 149
Ucial 0:4caead137300 150 if(status & (1<<RX_DR))//½ÓÊÕÖжÏ
Ucial 0:4caead137300 151 {
Ucial 0:4caead137300 152 uint8_t rx_len = NRF_Read_Reg(R_RX_PL_WID);//ÊÕµ½Êý¾Ý³¤¶È
Ucial 0:4caead137300 153 if(rx_len==32)
Ucial 0:4caead137300 154 {
Ucial 0:4caead137300 155 NRF_Read_Buff(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);//¶ÁÈ¡½ÓÊÕFIFOÊý¾Ý
Ucial 0:4caead137300 156 Nrf_Erro = 0;
Ucial 0:4caead137300 157 }
Ucial 0:4caead137300 158 else
Ucial 0:4caead137300 159 {
Ucial 0:4caead137300 160 NRF_Write_Reg(FLUSH_RX,0xff);//Çå¿Õ½ÓÊÕ»º³åÇø
Ucial 0:4caead137300 161 }
Ucial 0:4caead137300 162 }
Ucial 0:4caead137300 163 if(status & (1<<MAX_RT))//´ïµ½×î¶à´ÎÖØ·¢ÖжÏ
Ucial 0:4caead137300 164 {
Ucial 0:4caead137300 165 if(status & (1<<TX_FULL))//TX FIFO Òç³ö
Ucial 0:4caead137300 166 {
Ucial 0:4caead137300 167 NRF_Write_Reg(FLUSH_TX,0xff);//Çå¿Õ·¢ËÍ»º³åÇø
Ucial 0:4caead137300 168 }
Ucial 0:4caead137300 169 }
Ucial 0:4caead137300 170 // if(status & (1<<TX_DS))//·¢ËÍÍê³É
Ucial 0:4caead137300 171 // {
Ucial 0:4caead137300 172 NRF24L01_Set_RX();//ÉèÖÃNrf2401Ϊ½ÓÊÕģʽ
Ucial 0:4caead137300 173 // }
Ucial 0:4caead137300 174 NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, status);//Çå³ýÖжϱê־λ
Ucial 0:4caead137300 175 }
Ucial 1:c41959327807 176 void nRF24L01P::Nrf_Connect(void)//500HZ
Ucial 1:c41959327807 177 {
Ucial 1:c41959327807 178 Nrf_Erro++;
Ucial 1:c41959327807 179 if(Nrf_Erro%50==0)
Ucial 1:c41959327807 180 {
Ucial 1:c41959327807 181 NRF24L01_IRQ();
Ucial 1:c41959327807 182 }
Ucial 1:c41959327807 183 if(Nrf_Erro>=500)
Ucial 1:c41959327807 184 {
Ucial 1:c41959327807 185 Nrf_Erro = 1;
Ucial 1:c41959327807 186 }
Ucial 1:c41959327807 187 }
Ucial 1:c41959327807 188
brainliang 2:6c547cdb94e6 189 uint8_t nRF24L01P::Get_Checksum(uint8_t mydata[])
brainliang 2:6c547cdb94e6 190 {
brainliang 2:6c547cdb94e6 191 uint8_t i;
brainliang 2:6c547cdb94e6 192 uint8_t checksum=0;
brainliang 2:6c547cdb94e6 193 uint8_t length = mydata[3];
brainliang 2:6c547cdb94e6 194
brainliang 2:6c547cdb94e6 195 for(i=0;i<length+2;i++)
brainliang 2:6c547cdb94e6 196 checksum ^= (mydata[3+i]&0xFF);
brainliang 2:6c547cdb94e6 197 return checksum;
brainliang 2:6c547cdb94e6 198 }