📄 1100.lst
字号:
462 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
463 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
464 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
465 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
466 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
467 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
468 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
469 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
470 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
471 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
472 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
473 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
474 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
475 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
476 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
477 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
478 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
479 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
480 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
481 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
482 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
483 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
484 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
485 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
486 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
487 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
C51 COMPILER V7.06 1100 10/28/2008 22:55:12 PAGE 9
488 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
489 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
490 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
491 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
492 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
493 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
494 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
495 1 }
496
497 //*****************************************************************************************
498 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
499 //输入:发送的缓冲区,发送数据个数
500 //输出:无
501 //功能描述:CC1100发送一组数据
502 //*****************************************************************************************
503
504 void halRfSendPacket(INT8U *txBuffer, INT8U size)
505 {
506 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
507 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
508 1
509 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
510 1
511 1 // Wait for GDO0 to be set -> sync transmitted
512 1 while (!GDO0);
513 1 // Wait for GDO0 to be cleared -> end of packet
514 1 while (GDO0);
515 1 halSpiStrobe(CCxxx0_SFTX);
516 1 }
517
518
519 void setRxMode(void)
520 {
521 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
522 1 }
523
524 /*
525 // Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
526 #define CCxx00_STATE_BM 0x70
527 #define CCxx00_FIFO_BYTES_AVAILABLE_BM 0x0F
528 #define CCxx00_STATE_TX_BM 0x20
529 #define CCxx00_STATE_TX_UNDERFLOW_BM 0x70
530 #define CCxx00_STATE_RX_BM 0x10
531 #define CCxx00_STATE_RX_OVERFLOW_BM 0x60
532 #define CCxx00_STATE_IDLE_BM 0x00
533
534 static INT8U RfGetRxStatus(void)
535 {
536 INT8U temp, spiRxStatus1,spiRxStatus2;
537 INT8U i=4;// 循环测试次数
538 temp = CCxxx0_SNOP|READ_SINGLE;//读寄存器命令
539 CSN = 0;
540 while (MISO);
541 SpiTxRxByte(temp);
542 spiRxStatus1 = SpiTxRxByte(0);
543 do
544 {
545 SpiTxRxByte(temp);
546 spiRxStatus2 = SpiTxRxByte(0);
547 if(spiRxStatus1 == spiRxStatus2)
548 {
549 if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
C51 COMPILER V7.06 1100 10/28/2008 22:55:12 PAGE 10
550 {
551 halSpiStrobe(CCxxx0_SFRX);
552 return 0;
553 }
554 return 1;
555 }
556 spiRxStatus1=spiRxStatus2;
557 }
558 while(i--);
559 CSN = 1;
560 return 0;
561 }
562 */
563 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
564 {
565 1 INT8U status[2];
566 1 INT8U packetLength;
567 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
568 1
569 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
570 1 //delay(5);
571 1 //while (!GDO1);
572 1 //while (GDO1);
573 1 delay(2);
574 1 while (GDO0)
575 1 {
576 2 delay(2);
577 2 --i;
578 2 if(i<1)
579 2 return 0;
580 2 }
581 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
582 1 {
583 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
584 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
585 2 {
586 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
587 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
588 3
589 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
590 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
591 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
592 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
593 3 }
594 2 else
595 2 {
596 3 *length = packetLength;
597 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
598 3 return 0;
599 3 }
600 2 }
601 1 else
602 1 return 0;
603 1 }
604 /*
605 void Delay(unsigned int s)
606 {
607 unsigned int i;
608 for(i=0; i<s; i++);
609 for(i=0; i<s; i++);
610 }
611
C51 COMPILER V7.06 1100 10/28/2008 22:55:12 PAGE 11
612 */
613 void main(void)
614 {
615 1 INT8U leng =0;
616 1 INT8U tf =0;
617 1 INT8U TxBuf[8]={0}; // 8字节, 如果需要更长的数据包,请正确设置
618 1 INT8U RxBuf[8]={0};
619 1 CpuInit();
620 1 POWER_UP_RESET_CC1100();
621 1 halRfWriteRfSettings();
622 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
623 1
624 1 //TxBuf[0] = 8 ;
625 1 TxBuf[1] = 1 ;
626 1 TxBuf[2] = 1 ;
627 1 halRfSendPacket(TxBuf,8); // Transmit Tx buffer data
628 1 delay(6000);
629 1 P0=0xBF;
630 1 led0=0;led1=0;led2=0;led3=0;
631 1 while(1)
632 1 {
633 2 //setRxMode();
634 2 if(KEY1 ==0 )
635 2 {
636 3 TxBuf[1] = 1 ;
637 3 tf = 1 ;
638 3 //while(KEY1 ==0);
639 3 }
640 2 if(KEY2 ==0 )
641 2 {
642 3 TxBuf[2] = 1 ;
643 3 tf = 1 ;
644 3 }
645 2
646 2 if (tf==1)
647 2 {
648 3 halRfSendPacket(TxBuf,8); // Transmit Tx buffer data
649 3 TxBuf[1] = 0xff;
650 3 TxBuf[2] = 0xff;
651 3 tf=0;
652 3 delay(500);
653 3 led0=0;led1=0;led2=0;led3=0;
654 3 }
655 2
656 2 leng =8; // 预计接受8 bytes
657 2 if(halRfReceivePacket(RxBuf,&leng))
658 2 {
659 3
660 3 if( RxBuf[1]==1)
661 3 {
662 4 P0=0xF7;
663 4 led0=0;led1=0;led2=0;led3=0;
664 4 }
665 3 if( RxBuf[2]==1)
666 3 {
667 4 P0=0xFE;
668 4 led0=0;led1=0;led2=0;led3=0;
669 4 }
670 3 delay(1000);
671 3 led0=1;led1=1;led2=1;led3=1;
672 3 }
673 2
C51 COMPILER V7.06 1100 10/28/2008 22:55:12 PAGE 12
674 2 RxBuf[1] = 0xff;
675 2 RxBuf[2] = 0xff;
676 2 }
677 1
678 1 }
679
680
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1003 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 43 38
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 + -