📄 cc1100_rx.lst
字号:
284 //输入:地址和配置字
285 //输出:无
286 //功能描述:SPI写寄存器
287 //*****************************************************************************************
288 void halSpiWriteReg(INT8U addr, INT8U value)
289 {
290 1 CSN = 0;
291 1 while (MISO);
292 1 SpiTxRxByte(addr); //写地址
293 1 SpiTxRxByte(value); //写入配置
294 1 CSN = 1;
295 1 }
296
297 //*****************************************************************************************
298 //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
299 //输入:地址,写入缓冲区,写入个数
300 //输出:无
301 //功能描述:SPI连续写配置寄存器
C51 COMPILER V7.01 CC1100_RX 09/13/2006 17:53:03 PAGE 6
302 //*****************************************************************************************
303 void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
304 {
305 1 INT8U i, temp;
306 1 temp = addr | WRITE_BURST;
307 1 CSN = 0;
308 1 while (MISO);
309 1 SpiTxRxByte(temp);
310 1 for (i = 0; i < count; i++)
311 1 {
312 2 SpiTxRxByte(buffer[i]);
313 2 }
314 1 CSN = 1;
315 1 }
316
317 //*****************************************************************************************
318 //函数名:void halSpiStrobe(INT8U strobe)
319 //输入:命令
320 //输出:无
321 //功能描述:SPI写命令
322 //*****************************************************************************************
323 void halSpiStrobe(INT8U strobe)
324 {
325 1 CSN = 0;
326 1 while (MISO);
327 1 SpiTxRxByte(strobe); //写入命令
328 1 CSN = 1;
329 1 }
330
331
332
333
334
335 //*****************************************************************************************
336 //函数名:INT8U halSpiReadReg(INT8U addr)
337 //输入:地址
338 //输出:该寄存器的配置字
339 //功能描述:SPI读寄存器
340 //*****************************************************************************************
341 INT8U halSpiReadReg(INT8U addr)
342 {
343 1 INT8U temp, value;
344 1 temp = addr|READ_SINGLE;//读寄存器命令
345 1 CSN = 0;
346 1 while (MISO);
347 1 SpiTxRxByte(temp);
348 1 value = SpiTxRxByte(0);
349 1 CSN = 1;
350 1 return value;
351 1 }
352
353
354 //*****************************************************************************************
355 //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
356 //输入:地址,读出数据后暂存的缓冲区,读出配置个数
357 //输出:无
358 //功能描述:SPI连续写配置寄存器
359 //*****************************************************************************************
360 void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
361 {
362 1 INT8U i,temp;
363 1 temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
C51 COMPILER V7.01 CC1100_RX 09/13/2006 17:53:03 PAGE 7
364 1 CSN = 0;
365 1 while (MISO);
366 1 SpiTxRxByte(temp);
367 1 for (i = 0; i < count; i++)
368 1 {
369 2 buffer[i] = SpiTxRxByte(0);
370 2 }
371 1 CSN = 1;
372 1 }
373
374
375 //*****************************************************************************************
376 //函数名:INT8U halSpiReadReg(INT8U addr)
377 //输入:地址
378 //输出:该状态寄存器当前值
379 //功能描述:SPI读状态寄存器
380 //*****************************************************************************************
381 INT8U halSpiReadStatus(INT8U addr)
382 {
383 1 INT8U value,temp;
384 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
385 1 CSN = 0;
386 1 while (MISO);
387 1 SpiTxRxByte(temp);
388 1 value = SpiTxRxByte(0);
389 1 CSN = 1;
390 1 return value;
391 1 }
392
393
394 //*****************************************************************************************
395 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
396 //输入:无
397 //输出:无
398 //功能描述:配置CC1100的寄存器
399 //*****************************************************************************************
400 void halRfWriteRfSettings(void)
401 {
402 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
403 1 // Write register settings
404 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
405 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
406 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
407 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
408 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
409 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
410 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
411 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
412 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
413 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
414 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
415 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
416 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
417 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
418 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
419 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
420 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
421 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
422 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
423 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
424 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
425 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
C51 COMPILER V7.01 CC1100_RX 09/13/2006 17:53:03 PAGE 8
426 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
427 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
428 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
429 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
430 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
431 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
432 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
433 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
434 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
435 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
436 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
437 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
438 1 }
439
440
441
442
443
444
445 //*****************************************************************************************
446 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
447 //输入:发送的缓冲区,发送数据个数
448 //输出:无
449 //功能描述:CC1100发送一组数据
450 //*****************************************************************************************
451 void halRfSendPacket(INT8U *txBuffer, INT8U size)
452 {
453 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
454 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
455 1
456 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
457 1
458 1 // Wait for GDO0 to be set -> sync transmitted
459 1 while (!GDO0);
460 1
461 1 // Wait for GDO0 to be cleared -> end of packet
462 1 while (GDO0);
463 1 halSpiStrobe(CCxxx0_SFTX);
464 1 }
465
466
467
468 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
469 {
470 1 INT8U status[2];
471 1 INT8U packetLength;
472 1
473 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
474 1 while (!GDO0);
475 1 while (GDO0);
476 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
477 1 {
478 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
479 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
480 2 {
481 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
482 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
483 3
484 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
485 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
486 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
487 3 }
C51 COMPILER V7.01 CC1100_RX 09/13/2006 17:53:03 PAGE 9
488 2 else
489 2 {
490 3 *length = packetLength;
491 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
492 3 return 0;
493 3 }
494 2 }
495 1 else
496 1 return 0;
497 1 }
498
499 /******************************************************************************************
500 *******************************************************************************************
501 ************************************中断服务程序*********************************************
502 *******************************************************************************************
503 ******************************************************************************************/
504 /*void Timer0ISR(void) interrupt 1
505 {
506 EA = 0;
507 TH0+=TIMER0H;
508 TL0+=TIMER0L;
509 TimerCount++;
510 timer[0]++;
511 timer[1]++;
512 EA = 1;
513 }
514 */
515
516
517
518 /******************************************************************************************
519 *******************************************************************************************
520 ******************************************主程序*******************************************
521 *******************************************************************************************
522 ******************************************************************************************/
523 main(void)
524 {
525 1 INT8U leng;
526 1 INT8U arrTx[4];
527 1 INT8U arrRx[4];
528 1 CpuInit();
529 1 POWER_UP_RESET_CC1100();
530 1 halRfWriteRfSettings();
531 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
532 1 // LED1 = 0;
533 1 delay(60000);
534 1 // LED1 = 1;
535 1 delay(30000);
536 1 arrTx[0] = 0xBB;
537 1 arrTx[1] = 0xAA;
538 1 arrTx[2] = 0x55;
539 1 arrTx[3] = 0x09;
540 1 leng = 3;
541 1 while(1)
542 1 {
543 2 /* halRfSendPacket(arrTx,4);
544 2 LED2 = 0;
545 2 delay(10000);
546 2 LED2 = 1;
547 2 delay(20000);*/
548 2 if(halRfReceivePacket(arrRx,&leng))
549 2 {
C51 COMPILER V7.01 CC1100_RX 09/13/2006 17:53:03 PAGE 10
550 3 // LED2 = 0;
551 3 delay(10000);
552 3 // LED2 = 1;
553 3 halSpiStrobe(CCxxx0_SFRX);
554 3 SendCh(arrRx[0]);
555 3 SendCh(arrRx[1]);
556 3 SendCh(arrRx[2]);
557 3 SendCh(arrRx[3]);
558 3 }
559 2 }
560 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 894 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 32
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -