📄 wireless_api.lst
字号:
C51 COMPILER V9.00 WIRELESS_API 11/13/2010 15:06:02 PAGE 5
237 1
238 1 irq_status=Rf24L01_ReadByte(STATUS);//read state word
239 1
240 1 switch(irq_status&MASK_IRQ_FLAGS) //取4 5 6 bit
241 1 {
242 2 case MASK_RX_DR_FLAG: //rf receive data
243 2 {
244 3 if(Rf24L01_ReadByte(FIFO_STATUS) & MASK_RX_EMPTY)//empty fifo
245 3 {
246 4 irq_status =IDLE;
247 4 }
248 3 else
249 3 {
250 4 Rf24L01_RX(rev_buf);
251 4 gnDataPipeNumber=(irq_status>>1)&0x7;
252 4 irq_status = (unsigned char)RX_DR;
253 4 }
254 3
255 3 break;
256 3 }
257 2
258 2
259 2
260 2 case MASK_TX_DS_FLAG: //send rf data success (with ack response)
261 2 {
262 3 irq_status = (unsigned char)TX_DS;
263 3 break;
264 3 }
265 2
266 2 case MASK_MAX_RT_FLAG: //Maximum number of TX retries interrupt If MAX_RT is set it must be cle
-ared to enable further communication.
267 2 {
268 3 irq_status = (unsigned char)MAX_RT;
269 3 break;
270 3 }
271 2
272 2 case IDLE:
273 2 {
274 3 irq_status = (unsigned char)IDLE;
275 3 break;
276 3 }
277 2
278 2 }
279 1
280 1 if(Rf24L01_ReadByte(FIFO_STATUS) & MASK_RX_EMPTY) // if empty clear interrupt RQ
281 1 Rf24L01_Clear_IRQ(MASK_IRQ_FLAGS);
282 1
283 1 return irq_status;
284 1
285 1 }
286
287
288 //-----------------------------------------------------------------------------
289
290 unsigned char Rf24L01_Set_Init(SetupData *drc)
291 {
292 1 unsigned char btemp;
293 1
294 1 RFCKEN = 1; // enable L01 clock
295 1 RF = 0; //rf中断清零
296 1 CE_LOW(); //选中RF芯片
297 1
C51 COMPILER V9.00 WIRELESS_API 11/13/2010 15:06:02 PAGE 6
298 1 Rf24L01_Flush_RX(); //flush TX/RX FIFO to be empty
299 1 Rf24L01_Flush_TX(); //
300 1 Rf24L01_Clear_IRQ(MASK_IRQ_FLAGS); //clear IRQ STATUS register
301 1
302 1 //------------------------------------------------------
303 1 //1 set config
304 1 //------------------------------------------------------
305 1 //'comm config' default value:0000 1000
306 1 //bit7 must be 0;
307 1 //bit6,0--enable,RX interrupt enable,IRQ pin active low
308 1 //bit5,0--enable TX Succeed interrupt enable,IRQ pin active low
309 1 //bit4,0--eanble TX time over interrupt enable,IRQ pin active low
310 1 //bit3,CRC enable,if EN_AA be set,this bit will be forced to high
311 1 //bit2,CRC width,0--one byte,1--two bytes
312 1 //bit1,RF POWER ON/OFF,1--ON, 0--OFF
313 1 //bit0,transmmit mode: 1--PTX,0--PRX
314 1 btemp =0x0e;
315 1 if (drc->nOn == Dev_Normal) btemp +=0x01;
316 1 Rf24L01_WriteByte(WRITE_REG + CONFIG, btemp);
317 1
318 1 //------------------------------------------------------
319 1 //2 set ee_aa
320 1 //------------------------------------------------------
321 1 //'Enable Auto Acknowledgment'
322 1 // bit76 must be 00;
323 1 // bit 5-0 response to Pip5-0; bit: 1-en, 0-disen
324 1 // bit0 = 1;only enble pipe0
325 1 // Enable Auto.Ack:Pipe0
326 1
327 1 Rf24L01_WriteByte(WRITE_REG + EN_AA, drc->nAutoAck);
328 1
329 1 //------------------------------------------------------
330 1 //3 set en_rxaddr
331 1 //------------------------------------------------------
332 1 //'Enabled RX addresses', default 0000 0011
333 1 //bit76 must be 00;
334 1 //bit 5-0 response to Pip5-0, bit: 1-en, 0-disen
335 1 //pipe rx enble,bit0 = 1,only enable pipe0 RX
336 1 Rf24L01_WriteByte(WRITE_REG + EN_RXADDR, drc->nRecvAddr);
337 1
338 1 //------------------------------------------------------
339 1 //4 set setup_aw
340 1 //------------------------------------------------------
341 1 //'address width',default 0000 0011
342 1 //bit765432 must be 000000;
343 1 //bit10,value must be 1~3, 1--3Bytes width,2--4Bytes,3--5Bytes
344 1 //address width is 5 bytes;bit10: 00--illegal,01--3bytes,10--4bytes,11--5bytes
345 1 Rf24L01_WriteByte(WRITE_REG + SETUP_AW, 0x03);
346 1
347 1 //------------------------------------------------------
348 1 //5 set setup_retr
349 1 //------------------------------------------------------
350 1 //'Auto. Retransmite delay time and count', default 0000 0011
351 1 //delay time(bit7~3):(bit7~3+1)*250+86us;
352 1 //retran count(bit2~0):0--disenable retran,otherwise 1~15 times
353 1 //0x10;
354 1 //retran delay time:250us+86us
355 1 //drc->Retran;
356 1 btemp = (drc->nART_Factor&0x0f)<<4;
357 1 btemp += (drc->nRetran > 15 ? 15 : drc->nRetran);
358 1 btemp=0x17;//self
359 1 Rf24L01_WriteByte(WRITE_REG + SETUP_RETR, btemp);
C51 COMPILER V9.00 WIRELESS_API 11/13/2010 15:06:02 PAGE 7
360 1
361 1 //------------------------------------------------------
362 1 //6 set rf_ch
363 1 //------------------------------------------------------
364 1 //'rf frequency channel' 2400+rf_ch,default:0000 0010
365 1 // bit7 must be 0
366 1 // bit6~0 rf frequency channel,one step deputy 1MHZ
367 1 // we use frequency at less than 2.49GHZ,beause WLAN use frequency band 2.4G~2.4835Ghz
368 1 // we choice rf_ch = 100; thats 2.5GHZ
369 1 // default we choice frequency range 2.495GHz~2.513GHZ channel
370 1 if (drc->nChannel>122)
371 1 {
372 2 drc->nChannel = 0;
373 2 }
374 1
375 1 Rf24L01_WriteByte(WRITE_REG + RF_CH, drc->nChannel);
376 1
377 1 //------------------------------------------------------
378 1 //7 set rf_setup
379 1 //------------------------------------------------------
380 1 //'RF setup' default 0000 1111
381 1 // bit7~4 must be 00000
382 1 // bit 3 data rate :0--1Mbps,1--2Mbps;
383 1 // bit 2~1 rf power:00,-18dbm,,01,-12dbm,,10,-6dbm,,11,0dbm
384 1 // bit 0 must be 1
385 1 btemp =((drc->nPower&0x0f)>3 ? 3:(drc->nPower&0x0f))<<1;
386 1 btemp +=0x01;
387 1 if((drc->nPower&0xf0)>0) btemp += 0x08;
388 1
389 1 //btemp |= 0x20;
390 1 btemp=0x0e; //self
391 1 Rf24L01_WriteByte(WRITE_REG + RF_SETUP, btemp);
392 1
393 1 //------------------------------------------------------
394 1 //8 set rx_addr_p0
395 1 //------------------------------------------------------
396 1 //pipe0 rx address buf
397 1
398 1 Rf24L01_WriteMultiByte(WRITE_REG + RX_ADDR_P0,drc->aAddr1,5);
399 1
400 1 //------------------------------------------------------
401 1 //9 set rx_addr_p1
402 1 //------------------------------------------------------
403 1 //'pipe1 rx payload width'
404 1 //'pipe0 rx payload width' 00000000
405 1 //bit76 must be 00
406 1 //bit5~0,at less than must be one byte
407 1 //the most width is 32 bytes
408 1 if (drc->nLen>32)
409 1 {
410 2 drc->nLen = 32;
411 2 }
412 1 else if (drc->nLen == 0)
413 1 {
414 2 drc->nLen = 1;
415 2 }
416 1
417 1 Rf24L01_WriteByte(WRITE_REG + RX_PW_P0, drc->nLen);
418 1
419 1 btemp = drc->nRecvAddr;
420 1 btemp = btemp>>1;
421 1 if (btemp&1)
C51 COMPILER V9.00 WIRELESS_API 11/13/2010 15:06:02 PAGE 8
422 1 {
423 2 //81 get rx_addr_p1
424 2 Rf24L01_WriteMultiByte(WRITE_REG + RX_ADDR_P1,drc->aAddr2,5);
425 2
426 2 //91 get rx_pw_p1
427 2 Rf24L01_WriteByte(WRITE_REG + RX_PW_P1, drc->nLen);
428 2 }
429 1
430 1 //------------------------------------------------------
431 1 //10 set tx_addr
432 1 //------------------------------------------------------
433 1 //tx address buf
434 1 Rf24L01_WriteMultiByte(WRITE_REG + TX_ADDR,drc->aAddr1,5);
435 1
436 1
437 1 //------------------------------------------------------
438 1 //11 ACTIVATE
439 1 //------------------------------------------------------
440 1 // Rf24L01_WriteByte(ACTIVATE, 0x73);
441 1
442 1 //------------------------------------------------------
443 1 //12 get FEATURE
444 1 //------------------------------------------------------
445 1 Rf24L01_WriteByte(WRITE_REG + FEATURE, 0x05);
446 1
447 1 //------------------------------------------------------
448 1 //13 get DYNPD
449 1 //------------------------------------------------------
450 1 Rf24L01_WriteByte(WRITE_REG + DYNPD, drc->nRecvAddr);
451 1
452 1
453 1 RF = 1;
454 1 if(drc->nOn == Dev_Normal)
455 1 {
456 2 CE_HIGH();
457 2 }
458 1
459 1 return 0;
460 1 }
461
462 void wireless_init(void)
463 {
464 1 SetupData mSetup;
465 1
466 1 memset(&mSetup,0,sizeof(SetupData)); //chu shi hua wei 0
467 1 mSetup.nChannel=20;
468 1 mSetup.nPower=3; //0dbm
469 1 mSetup.nRecvAddr=0x01;
470 1 mSetup.nAutoAck=0x01;
471 1 mSetup.nLen=32;
472 1 mSetup.nRetran=8;
473 1 mSetup.nOn=1;
474 1
475 1 memcpy(mSetup.aAddr1,address,5); //copy the address
476 1 mSetup.nOn=1;
477 1
478 1 Rf24L01_Set_Init((SetupData *)&mSetup);
479 1
480 1 }
C51 COMPILATION COMPLETE. 3 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -