📄 1100.lst
字号:
398 1 SpiTxRxByte(temp);
399 1 value = SpiTxRxByte(0);
400 1 CSN = 1;
401 1 return value;
402 1 }
403
404
405 //*****************************************************************************************
406 //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
407 //输入:地址,读出数据后暂存的缓冲区,读出配置个数
408 //输出:无
409 //功能描述:SPI连续写配置寄存器
410 //*****************************************************************************************
411 void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
412 {
413 1 INT8U i,temp;
414 1 temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
415 1 CSN = 0;
416 1 while (MISO);
417 1 SpiTxRxByte(temp);
418 1 for (i = 0; i < count; i++)
419 1 {
420 2 buffer[i] = SpiTxRxByte(0);
421 2 }
422 1 CSN = 1;
423 1 }
424
425
C51 COMPILER V7.06 1100 12/20/2007 00:40:14 PAGE 8
426 //*****************************************************************************************
427 //函数名:INT8U halSpiReadReg(INT8U addr)
428 //输入:地址
429 //输出:该状态寄存器当前值
430 //功能描述:SPI读状态寄存器
431 //*****************************************************************************************
432 INT8U halSpiReadStatus(INT8U addr)
433 {
434 1 INT8U value,temp;
435 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
436 1 CSN = 0;
437 1 while (MISO);
438 1 SpiTxRxByte(temp);
439 1 value = SpiTxRxByte(0);
440 1 CSN = 1;
441 1 return value;
442 1 }
443 //*****************************************************************************************
444 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
445 //输入:无
446 //输出:无
447 //功能描述:配置CC1100的寄存器
448 //*****************************************************************************************
449 void halRfWriteRfSettings(void)
450 {
451 1
452 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
453 1 // Write register settings
454 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
455 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
456 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
457 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
458 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
459 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
460 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
461 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
462 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
463 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
464 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
465 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
466 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
467 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
468 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
469 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
470 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
471 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
472 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
473 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
474 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
475 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
476 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
477 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
478 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
479 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
480 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
481 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
482 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
483 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
484 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
485 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
486 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
487 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
C51 COMPILER V7.06 1100 12/20/2007 00:40:14 PAGE 9
488 1 }
489
490 //*****************************************************************************************
491 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
492 //输入:发送的缓冲区,发送数据个数
493 //输出:无
494 //功能描述:CC1100发送一组数据
495 //*****************************************************************************************
496
497 void halRfSendPacket(INT8U *txBuffer, INT8U size)
498 {
499 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
500 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
501 1
502 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
503 1
504 1 // Wait for GDO0 to be set -> sync transmitted
505 1 while (!GDO0);
506 1 // Wait for GDO0 to be cleared -> end of packet
507 1 while (GDO0);
508 1 halSpiStrobe(CCxxx0_SFTX);
509 1 }
510 //*****************************************************************************************
511 void setRxMode(void)
512 {
513 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
514 1 }
515 //*****************************************************************************************
516 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
517 {
518 1 INT8U status[2];
519 1 INT8U packetLength;
520 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
521 1
522 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
523 1 delay(2);
524 1 while (GDO0)
525 1 {
526 2 delay(2);
527 2 --i;
528 2 if(i<1)
529 2 return 0;
530 2 }
531 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
532 1 {
533 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
534 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
535 2 {
536 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
537 3 *length = packetLength; //把接收数据长度的修改为当前数据的长
538 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
539 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
540 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
541 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
542 3 }
543 2 else
544 2 {
545 3 *length = packetLength;
546 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
547 3 return 0;
548 3 }
549 2 }
C51 COMPILER V7.06 1100 12/20/2007 00:40:14 PAGE 10
550 1 else
551 1 return 0;
552 1 }
553
554 //----------------------------------------主函数---------------------------------------------------
555 void main(void)
556 {
557 1 INT8U tf =0;
558 1 INT8U TxBuf[4]={0}; // 4字节, 如果需要更长的数据包,请正确设置
559 1 CpuInit();
560 1 POWER_UP_RESET_CC1100();
561 1 halRfWriteRfSettings();
562 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
563 1 // halRfSendPacket(TxBuf,8); // Transmit Tx buffer data
564 1 delay(6000);
565 1 while(1)
566 1 {
567 2
568 2 if(KEY1 ==0 )
569 2 {
570 3 TxBuf[0] = 0x01 ;TxBuf[1]=0x02;TxBuf[2]=0x03;TxBuf[3]=0x04;
571 3 halRfSendPacket(TxBuf,4); // Transmit Tx buffer data
572 3
573 3 }
574 2 if(KEY2 ==0 )
575 2 {
576 3 TxBuf[0] = 0x11 ;TxBuf[1]=0x12;TxBuf[2]=0x13;TxBuf[3]=0x14;
577 3 halRfSendPacket(TxBuf,4); // Transmit Tx buffer data
578 3
579 3 }
580 2 TxBuf[0] = 0;TxBuf[1]=0;TxBuf[2]=0;TxBuf[3]=0;
581 2 delay(3000);
582 2 }
583 1
584 1 }
585
586
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 886 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 25
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 + -