📄 1100.lst
字号:
414 //输入:地址,读出数据后暂存的缓冲区,读出配置个数
415 //输出:无
416 //功能描述:SPI连续写配置寄存器
417 //*****************************************************************************************
418 void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
419 {
420 1 INT8U i,temp;
421 1 temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
422 1 CSN = 0;
423 1 while (MISO);
424 1 SpiTxRxByte(temp);
425 1 for (i = 0; i < count; i++)
C51 COMPILER V7.06 1100 12/19/2007 21:09:47 PAGE 8
426 1 {
427 2 buffer[i] = SpiTxRxByte(0);
428 2 }
429 1 CSN = 1;
430 1 }
431
432
433 //*****************************************************************************************
434 //函数名:INT8U halSpiReadReg(INT8U addr)
435 //输入:地址
436 //输出:该状态寄存器当前值
437 //功能描述:SPI读状态寄存器
438 //*****************************************************************************************
439 INT8U halSpiReadStatus(INT8U addr)
440 {
441 1 INT8U value,temp;
442 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
443 1 CSN = 0;
444 1 while (MISO);
445 1 SpiTxRxByte(temp);
446 1 value = SpiTxRxByte(0);
447 1 CSN = 1;
448 1 return value;
449 1 }
450 //*****************************************************************************************
451 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
452 //输入:无
453 //输出:无
454 //功能描述:配置CC1100的寄存器
455 //*****************************************************************************************
456 void halRfWriteRfSettings(void)
457 {
458 1
459 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
460 1 // Write register settings
461 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
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 12/19/2007 21:09:47 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 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
525 {
526 1 INT8U status[2];
527 1 INT8U packetLength;
528 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
529 1
530 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
531 1 //delay(5);
532 1 //while (!GDO1);
533 1 //while (GDO1);
534 1 delay(2);
535 1 while (GDO0)
536 1 {
537 2 delay(2);
538 2 --i;
539 2 if(i<1)
540 2 return 0;
541 2 }
542 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
543 1 {
544 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
545 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
546 2 {
547 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
548 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
549 3
C51 COMPILER V7.06 1100 12/19/2007 21:09:47 PAGE 10
550 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
551 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
552 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
553 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
554 3 }
555 2 else
556 2 {
557 3 *length = packetLength;
558 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
559 3 return 0;
560 3 }
561 2 }
562 1 else
563 1 return 0;
564 1 }
565
566 void StartUART( void )
567 { //波特率4800
568 1 SCON = 0x50;
569 1 TMOD = 0x20;
570 1 TH1 = 0xFA;
571 1 TL1 = 0xFA;
572 1 PCON = 0x00;
573 1 TR1 = 1;
574 1 }
575 void R_S_Byte(INT8U R_Byte)
576 {
577 1 SBUF = R_Byte;
578 1 while( TI == 0 ); //查询法
579 1 TI = 0;
580 1
581 1 }
582 void main(void)
583 {
584 1 INT8U i,leng =0;
585 1 INT8U RxBuf[8]={0}; // 8字节, 如果需要更长的数据包,请正确设置
586 1 CpuInit();
587 1 POWER_UP_RESET_CC1100();
588 1 halRfWriteRfSettings();
589 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);//发射功率设置
590 1 delay(6000);
591 1 StartUART();
592 1 while(1)
593 1 {
594 2 leng =8; // 预计接受8 bytes
595 2 if(halRfReceivePacket(RxBuf,&leng)) //判断是否接收到数据
596 2 {
597 3 for(i=0;i<8;i++)
598 3 {
599 4 R_S_Byte(RxBuf[i]) ;
600 4 delay(3000);
601 4 }
602 3 }
603 2 }
604 1
605 1 }
606
607
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 908 ----
C51 COMPILER V7.06 1100 12/19/2007 21:09:47 PAGE 11
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 43 30
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 + -