1100.lst
来自「无线模块cc1101学习资料」· LST 代码 · 共 882 行 · 第 1/4 页
LST
882 行
420 1 CSN = 0;
421 1 while (MISO);
422 1 SpiTxRxByte(temp);
423 1 for (i = 0; i < count; i++)
424 1 {
425 2 buffer[i] = SpiTxRxByte(0);
C51 COMPILER V7.06 1100 12/20/2007 00:13:08 PAGE 8
426 2 }
427 1 CSN = 1;
428 1 }
429
430
431 //*****************************************************************************************
432 //函数名:INT8U halSpiReadReg(INT8U addr)
433 //输入:地址
434 //输出:该状态寄存器当前值
435 //功能描述:SPI读状态寄存器
436 //*****************************************************************************************
437 INT8U halSpiReadStatus(INT8U addr)
438 {
439 1 INT8U value,temp;
440 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
441 1 CSN = 0;
442 1 while (MISO);
443 1 SpiTxRxByte(temp);
444 1 value = SpiTxRxByte(0);
445 1 CSN = 1;
446 1 return value;
447 1 }
448 //*****************************************************************************************
449 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
450 //输入:无
451 //输出:无
452 //功能描述:配置CC1100的寄存器
453 //*****************************************************************************************
454 void halRfWriteRfSettings(void)
455 {
456 1
457 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
458 1 // Write register settings
459 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
460 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
461 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
462 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
463 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
464 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
465 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
466 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
467 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
468 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
469 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
470 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
471 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
472 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
473 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
474 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
475 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
476 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
477 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
478 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
479 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
480 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
481 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
482 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
483 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
484 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
485 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
486 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
487 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
C51 COMPILER V7.06 1100 12/20/2007 00:13:08 PAGE 9
488 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
489 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
490 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
491 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
492 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
493 1 }
494
495 //*****************************************************************************************
496 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
497 //输入:发送的缓冲区,发送数据个数
498 //输出:无
499 //功能描述:CC1100发送一组数据
500 //*****************************************************************************************
501
502 void halRfSendPacket(INT8U *txBuffer, INT8U size)
503 {
504 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
505 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
506 1
507 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
508 1
509 1 // Wait for GDO0 to be set -> sync transmitted
510 1 while (!GDO0);
511 1 // Wait for GDO0 to be cleared -> end of packet
512 1 while (GDO0);
513 1 halSpiStrobe(CCxxx0_SFTX);
514 1 }
515
516
517 void setRxMode(void)
518 {
519 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
520 1 }
521
522 /*
523 // Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
524 #define CCxx00_STATE_BM 0x70
525 #define CCxx00_FIFO_BYTES_AVAILABLE_BM 0x0F
526 #define CCxx00_STATE_TX_BM 0x20
527 #define CCxx00_STATE_TX_UNDERFLOW_BM 0x70
528 #define CCxx00_STATE_RX_BM 0x10
529 #define CCxx00_STATE_RX_OVERFLOW_BM 0x60
530 #define CCxx00_STATE_IDLE_BM 0x00
531
532 static INT8U RfGetRxStatus(void)
533 {
534 INT8U temp, spiRxStatus1,spiRxStatus2;
535 INT8U i=4;// 循环测试次数
536 temp = CCxxx0_SNOP|READ_SINGLE;//读寄存器命令
537 CSN = 0;
538 while (MISO);
539 SpiTxRxByte(temp);
540 spiRxStatus1 = SpiTxRxByte(0);
541 do
542 {
543 SpiTxRxByte(temp);
544 spiRxStatus2 = SpiTxRxByte(0);
545 if(spiRxStatus1 == spiRxStatus2)
546 {
547 if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
548 {
549 halSpiStrobe(CCxxx0_SFRX);
C51 COMPILER V7.06 1100 12/20/2007 00:13:08 PAGE 10
550 return 0;
551 }
552 return 1;
553 }
554 spiRxStatus1=spiRxStatus2;
555 }
556 while(i--);
557 CSN = 1;
558 return 0;
559 }
560 */
561 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
562 {
563 1 INT8U status[2];
564 1 INT8U packetLength;
565 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
566 1
567 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
568 1 //delay(5);
569 1 //while (!GDO1);
570 1 //while (GDO1);
571 1 delay(2);
572 1 while (GDO0)
573 1 {
574 2 delay(2);
575 2 --i;
576 2 if(i<1)
577 2 return 0;
578 2 }
579 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
580 1 {
581 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
582 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
583 2 {
584 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
585 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
586 3
587 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
588 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
589 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
590 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
591 3 }
592 2 else
593 2 {
594 3 *length = packetLength;
595 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
596 3 return 0;
597 3 }
598 2 }
599 1 else
600 1 return 0;
601 1 }
602 //--------------------------------------------------------------------------------------------------
603 // 函数名称: UART_init()串口初始化函数
604 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
605 // 串口接收中断允许,发送中断禁止
606 //--------------------------------------------------------------------------------------------------
607 void UART_init()
608 {
609 1 //初始化串行口和波特率发生器
610 1 SCON =0x58; //选择串口工作方式,打开接收允许
611 1 TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
C51 COMPILER V7.06 1100 12/20/2007 00:13:08 PAGE 11
612 1 TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
613 1 TL1 =0xfd;
614 1 TR1 =1; //启动定时器T1
615 1 ET1 =0;
616 1 ES=1; //允许串行口中断
617 1 PS=1; //设计串行口中断优先级
618 1 EA =1; //单片机中断允许
619 1 }
620 //--------------------------------------------------------------------------------------------------
621 // 函数名称: com_interrup()串口接收中断处理函数
622 // 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
623 //--------------------------------------------------------------------------------------------------
624 com_interrupt(void) interrupt 4 using 3
625 {
626 1 // char RECEIVR_buffer;
627 1 if(RI) //处理接收中断
628 1 {
629 2 RI=0; //清除中断标志位
630 2 KEY0=SBUF;
631 2 SBUF=KEY0;
632 2 }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?