This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 使用 CCS 通过 SPI 配置 CC1120

Guru**** 2589265 points
Other Parts Discussed in Thread: CC1120, MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/567530/configuring-cc1120-over-spi-using-ccs

主题中讨论的其他器件:CC1120MSP430F5529

您好,

在 Code Composer Studio 中使用 C 代码通过 SPI 配置 CC1120时遇到了一些问题。我通过从 SmartRF 导入868MHz 的设置来编写了以下代码。但通信未正常进行。我在发送器和接收器侧执行了相同的设置。下面是代码 发送器侧

#include
unsigned char 命令 Byte、dataByte、receivedByte、i;
void SPI_init();
void sendData (unsigned char);
unsigned char receiveData (void);
void send_Serial (unsigned char);
void init_serial (void);
void send_value (unsigned char);

int main (空)

   WDTCTL = WDTPW | WDTHOLD;                      //停止看门狗计时器
   spi_init();                                  //初始化 SPI
   init_serial();
   P1OUT=0x01;                                  //选择输出
   P1OUT^= BIT0;
   while (1)//***检查空 RXFIFO 的条件
   {

                  sendData (0x01);
                  sendData (0x02);
                  sendData (0x03);
                  sendData (0x04);
                  sendData (0x05);
   }
   返回0;

void send_value (无符号字符字节)

   unsigned char 字节2、字节1、字节0;
      字节2=(字节/100);
      字节2=字节2|0X30;
      SEND_Serial (字节2);
      字节=字节%100;
      字节1 =字节/10;
      字节1=字节1|0X30;
      SEND_Serial (字节1);
      字节0=byte%10;
      字节0=字节0|0X30;
      SEND_Serial (字节0);
       SEND_Serial ('\n');

void send_Serial (无符号字符字节)


      UCA1TXBUF=字节;
      while (UCA1STAT 和 UCBUSY);

   UCA1TXBUF=0x0A;//LE
   while (UCA1STAT 和 UCBUSY);
   UCA1TXBUF=0x0D;//CR
      while (UCA1STAT 和 UCBUSY);

void init_serial (void)

      P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
      UCA1CTL1|=UCSWRST;//复位 UART
      UCA1CTL1|=UCSSEL_1;//选择32668HZ
      UCA1BR0=3;//设置9600波特率
      UCA1BR1=0x00;
      UCA1MCTL=0x06;
      UCA1CTL0=0x00;
      UCA1CTL1 &=~UCSWRST;


void SPI_init()

   P2DIR|=BIT2;                                  //为输出配置 CS
   P2OUT = BIT2;                                     // CS High
   P3REN=BIT1;                                     //
      P3DIR |= BIT0 + BIT2;                         //设置为输出
      P3SEL = BIT0+ BIT1 + BIT2;                          //配置 SPI
      /* USCI */
      UCB0CTL1 = UCSWRST;                            //将状态机复位
      UCB0CTL0 |= UCCKPL + UCMSB+UCMST + UCSYNC;       // 3引脚8位 SPI 主器件
      UCB0CTL1 |= UCSSEL_2;                         // USCI 时钟源:SMCLK
      UCB0BR0 |= 0x02;
      UCB0BR1 = 0;
      UCB0CTL1 &=~UCSWRST;                         //启用模块或模块初始化
      P2OUT &=~BIT2;                               //选择设备



void sendData (无符号字符数据字节)

         UCB0TXBUF =数据字节;                      //输入要发送的0-255值

          while (UCB0STAT 和 UCBUSY);                   //等待移位寄存器和缓冲区为空完成
          _DELAY_CYCLES (1000);

unsigned char receiveData()



   while (UCB0STAT 和 UCBUSY);                   //等待移位寄存器和缓冲区为空完成

      接收字节= UCB0RXBUF;                //存储接收到的数据

          _DELAY_CYCLES (1000);
          return receivedByte;

 在接收器端、我编写了以下代码。

#include
unsigned char 命令 Byte、dataByte、receivedByte、i;
void SPI_init();
void sendData (unsigned char);
unsigned char receiveData (void);
void send_Serial (unsigned char);
void init_serial (void);
void send_value (unsigned char);

int main (空)

   WDTCTL = WDTPW | WDTHOLD;                      //停止看门狗计时器
   spi_init();                                  //初始化 SPI
   init_serial();
   P1OUT=0x01;                                  //选择输出
   P1OUT^= BIT0;
   while (1)//***检查空 RXFIFO 的条件
   {

                  receivedByte=receiveData();
                  SEND_VALUE (接收字节);
   }
   返回0;

void send_value (无符号字符字节)

   unsigned char 字节2、字节1、字节0;
      字节2=(字节/100);
      字节2=字节2|0X30;
      SEND_Serial (字节2);
      字节=字节%100;
      字节1 =字节/10;
      字节1=字节1|0X30;
      SEND_Serial (字节1);
      字节0=byte%10;
      字节0=字节0|0X30;
      SEND_Serial (字节0);
       SEND_Serial ('\n');

void send_Serial (无符号字符字节)


      UCA1TXBUF=字节;
      while (UCA1STAT 和 UCBUSY);

   UCA1TXBUF=0x0A;//LE
   while (UCA1STAT 和 UCBUSY);
   UCA1TXBUF=0x0D;//CR
      while (UCA1STAT 和 UCBUSY);

void init_serial (void)

      P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
      UCA1CTL1|=UCSWRST;//复位 UART
      UCA1CTL1|=UCSSEL_1;//选择32668HZ
      UCA1BR0=3;//设置9600波特率
      UCA1BR1=0x00;
      UCA1MCTL=0x06;
      UCA1CTL0=0x00;
      UCA1CTL1 &=~UCSWRST;


void SPI_init()

      P3DIR |= BIT1;                         //设置为输出
      P3SEL = BIT0+ BIT1 + BIT2;                          //配置 SPI
      /* USCI */
      UCB0CTL1 = UCSWRST;                            //将状态机复位
      UCB0CTL0 |= UCCKPL + UCMSB + UCSYNC;       // 3引脚8位 SPI 主器件
      UCB0CTL1 |= UCSSEL_2;                         // USCI 时钟源:SMCLK
      UCB0BR0 |= 0x02;
      UCB0BR1 = 0;
      UCB0CTL1 &=~UCSWRST;                         //启用模块或模块初始化


void sendData (无符号字符数据字节)

         UCB0TXBUF =数据字节;                      //输入要发送的0-255值

          while (UCB0STAT 和 UCBUSY);                   //等待移位寄存器和缓冲区为空完成
          _DELAY_CYCLES (1000);

unsigned char receiveData()


   unsigned char receivedByte;
   while (UCB0STAT 和 UCBUSY);                   //等待移位寄存器和缓冲区为空完成

      接收字节= UCB0RXBUF;                //存储接收到的数据

          _DELAY_CYCLES (1000);
          return receivedByte;

请建议我采取补救措施,使其正确发生

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、代码如下所示
    发送器侧
    #include
    #define uint8无符号字符
    /*地址配置=无地址检查*/
    /*比特率= 1.2 */
    /*载波频率= 868.000000 */
    /*偏差= 3.997803 */
    /*器件地址= 0 */
    /*曼彻斯特启用= false */
    /*调制格式= 2-FSK */
    /* PA 斜升= true */
    /*数据包位长度= 0 */
    /*数据包长度= 255 */
    /*数据包长度模式=变量*/
    /*性能模式=高性能*/
    /* RX 滤波器带宽= 25.000000 */
    /*符号速率= 1.2 */
    /* TX 功率= 15 */
    /*惠氏= false */
    // CC1120的射频设置
    typedef 结构{
    uint8 iocfg3; // GPIO3 IO 引脚配置
    uint8 iocfg2; // GPIO2 IO 引脚配置
    uint8 iocfg1; // GPIO1 IO 引脚配置
    uint8 iocfg0; // GPIO0 IO 引脚配置
    uint8 synct3; //同步字配置[31:24]
    uint8 synct2; //同步字配置[23:16]
    uint8 synct1; //同步字配置[15:8]
    uint8 synct0; //同步字配置[7:0]
    uint8 sync_cfg1; //同步字检测配置寄存器 1
    uint8 sync_cfg0; //同步字长度配置寄存器 0
    uint8 deviation_m; //频率偏差配置
    uint8 modcfg_dev_e; //调制格式和频率偏差配置
    uint8 dcfilt_cfg; //数字直流移除配置
    uint8前导码_cfg1;//前导码长度配置寄存器 1
    uint8 freq_if_cfg; // RX 混频器频率配置
    uint8 iqic; //数字图像通道补偿配置
    UINT8 CHAN_Bw; //通道滤波器配置
    uint8 mdmcfg0; //常规调制解调器参数配置寄存器 0
    uint8 symbol_rate2; //符号速率配置指数和尾数[1..
    uint8 symbol_rate1; //符号速率配置尾数[15:8]
    uint8 symbol_rate0; //符号速率配置尾数[7:0]
    uint8 AGC_ref; // AGC 基准电平配置
    uint8 AGC_CS_THR; //载波侦听阈值配置
    uint8 AGC_GAIN_ADJUST;
    uint8 AGC_cfg3; //自动增益控制配置寄存器 1
    uint8 AGC_cfg2;
    uint8 AGC_cfg1; //自动增益控制配置寄存器 1
    uint8 AGC_cfg0; //自动增益控制配置寄存器 0
    uint8 fifo_cfg; // FIFO 配置
    uint8 fs_cfg; //频率合成器配置
    uint8 pkt_cfg0; //数据包配置寄存器 0
    uint8 pa_cfg0; //功率放大器配置寄存器 0
    uint8 pkt_len; //数据包长度配置
    uint8 if_mif_cfg; //如果混合配置
    uint8 TOC_cfg; //时序偏移校正配置
    uint8 freq2; //频率配置[23:16]
    uint8 freq1; //频率配置[15:8]
    uint8 fs_dig1; //频率合成器数字寄存器 1
    uint8 fs_dig0; //频率合成器数字寄存器 0
    uint8 FS_CAL1; //频率合成器校准寄存器 1
    uint8 fs_cal0; //频率合成器校准寄存器 0
    uint8 fs_divtwo; //频率合成器除以2
    uint8 fs_dsm0; // FS 数字合成器模块配置寄存器 0
    uint8 fs_dvc0; //频率合成器分频器链配置.
    uint8 FS_PFD; //频率合成器相位频率检测器连接
    uint8 fs_pre; //频率合成器预分频器配置
    UINT8 FS_REG_DIV_CML;//频率合成器分频器稳压器配置
    uint8 FS_SPARE; //频率合成器备用
    uint8 fs_vco0; // FS 压控振荡器配置寄存器
    uint8 xosc5; //晶体振荡器配置寄存器 5.
    uint8 xosc1; //晶体振荡器配置寄存器 1
    } RF_SETTINGS;
    /*main */
    unsigned char 命令 Byte、dataByte、receivedByte、i;
    void SPI_init();
    void sendCommand (unsigned char);
    void sendData (unsigned char);
    unsigned char receiveData (void);
    void CC1120_init();
    void mydelay (unsigned int);
    void send_Serial (unsigned char);
    void init_serial (void);
    void send_value (unsigned char);

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    // UCSCTL1 = 0x0020;//将 DCO 设置为1MHz
    // FCTL1 = FWKEY + WRT + SWRT; //针对闪存时序发生器的 MCLK/3

    SFRIE1=0X0010;
    SPI_init();//initialize SPI
    CC1120_init();//initialize RF Settings
    init_serial();//initialize UART
    P1DIR=P1DIR|BIT0;

    P1OUT=0x01;
    P1OUT^= BIT0;
    //mydelay (1000);
    sendCommand (0x31);
    sendCommand (0x35);
    执行//***检查空 RXFIFO 的条件


    sendCommand (0x7F);
    (i=0;i<128;i++)

    // while (FCTL3&Busy); //检查忙标志;如果从 RAM 运行此代码、则很重要
    sendData (i);
    SEND_VALUE (I);
    mydelay (1000);

    P2OUT |= BIT2;
    //mydelay (1000);


    P2OUT &=~BIT2;

    receivedByte=receiveData();
    }while (!(receivedByte=0x70));


    返回0;

    void send_value (无符号字符字节)

    unsigned char 字节2、字节1、字节0;
    字节2=(字节/100);
    字节2=字节2|0X30;
    SEND_Serial (字节2);
    字节=字节%100;
    字节1 =字节/10;
    字节1=字节1|0X30;
    SEND_Serial (字节1);
    字节0=byte%10;
    字节0=字节0|0X30;
    SEND_Serial (字节0);
    SEND_Serial ('\n');

    void send_Serial (无符号字符字节)


    UCA1TXBUF=字节;
    while (UCA1STAT 和 UCBUSY);

    UCA1TXBUF=0x0A;//LE
    while (UCA1STAT 和 UCBUSY);
    UCA1TXBUF=0x0D;//CR
    while (UCA1STAT 和 UCBUSY);

    void init_serial (void)

    P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
    UCA1CTL1|=UCSWRST;//复位 UART
    UCA1CTL1|=UCSSEL_1;//选择32668HZ
    UCA1BR0=3;//设置9600波特率
    UCA1BR1=0x00;
    UCA1MCTL=0x06;
    UCA1CTL0=0x00;
    UCA1CTL1 &=~UCSWRST;

    void mydelay (unsigned int n)

    unsigned int i、j;
    for (i=0;i<2*n;i++)

    for (j=0;j<167;j++){}




    void SPI_init()

    P2DIR=0x04;//将 P2.2设置为输出(CS)
    P2OUT = BIT2;// CS High
    P3DIR |= BIT0 + BIT2;//设置为输出
    P3SEL = BIT0+ BIT1;//配置 SPI
    P3SEL = BIT2;//配置 SPI
    /* USCI */
    UCB0CTL1 = UCSWRST;//将状态机复位
    UCB0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3引脚8位 SPI 主设备
    UCB0CTL1 |= UCSSEL_2;// USCI 时钟源:SMCLK
    UCB0BR0 |= 0x02;
    UCB0BR1 = 0;
    UCB0CTL1 &=~UCSWRST;//使能模块或模块初始化
    P2OUT &=~BIT2;//选择器件、即 CS 使能
    sendCommand (0X30);//重置芯片
    //while (!((P3IN&0x02)=0x02);


    void sendCommand (无符号字符命令字节)

    //启用串行接口
    _DELAY_CYCLES (100);//等待从器件初始化
    UCB0TXBUF =命令字节;//发送命令字节

    while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
    _DELAY_CYCLES (100);

    void sendData (无符号字符数据字节)

    UCB0TXBUF =数据字节;//输入要发送的0-255值
    _DELAY_CYCLES (100);

    while (UCB0STAT 和 UCBUSY);//等待移位寄存器和缓冲区为空的完成

    _DELAY_CYCLES (100);

    unsigned char receiveData()



    while (UCB0STAT 和 UCBUSY);//等待移位寄存器和缓冲区为空的完成

    接收字节= UCB0RXBUF;//存储接收到的数据

    _DELAY_CYCLES (1000);
    return receivedByte;


    空 CC1120_init()

    rf_settings rfSettings ={
    0xB0、// IOCFG3 GPIO3 IO 引脚配置
    0x06、// IOCFG2 GPIO2 IO 引脚配置
    0xB0、// IOCFG1 GPIO1 IO 引脚配置
    0x40、// IOCFG0 GPIO0 IO 引脚配置
    0x55、// SYNC3 同步字配置[31:24]
    0x55、// SYNC2 同步字配置[23:16]
    0x7A、// SYNC1 同步字配置[15:8]
    0x0E、// SYNC0 同步字配置[7:0]
    0x08、// SYNC_CFG1 同步字检测配置寄存器 1
    0x0B、// SYNC_CFG0 同步字长度配置寄存器 0
    0x99、//偏差_M 频率偏差配置
    0x0D、// MODCFG_DEV_E 调制格式和频率偏差配置
    0x15、// DCFILT_CFG 数字直流移除配置
    0x18、//前导码_CFG1 前导码长度配置寄存器 1
    0x3A、// FREQ_IF_CFG RX 混频器频率配置
    0x00、// IQIC 数字图像信道补偿配置
    0x02、// CHAN_BW 通道滤波器配置
    0x05、// MDMCFG0 常规调制解调器参数配置寄存器 0
    0x99、// symbol_Rate2 符号速率配置指数和尾数[1..
    0x99、// symbol_rate1 符号速率配置尾数[15:8]
    0x99、// symbol_RATE0 符号速率配置尾数[7:0]
    0x3C、// AGC_REF AGC 基准电平配置
    0xEF、// AGC_CS_THR 载波检测阈值配置
    0x00、//AGC 增益调节
    0x00、
    0x00、
    0xA9、// AGC_CFG1 自动增益控制配置寄存器 1
    0xC0、// AGC_CFG0 自动增益控制配置寄存器 0
    0x00、// FIFO_CFG FIFO 配置
    0x12、// FS_CFG 频率合成器配置
    0x20、// PKT_CFG0 数据包配置寄存器 0
    0x79、// PA_CFG0 功率放大器配置寄存器 0
    0xFF、// PKT_LEN 数据包长度配置
    0x00、// if_mix _CFG 如果混合配置
    0x0A、// TOC_CFG 时序偏移校正配置
    0x6C、// FREQ2 频率配置[23:16]
    0x80、// FREQ1 频率配置[15:8]
    0x00、// FS_DIG1 频率合成器数字稳压器 1
    0x5F、// FS_DIG0 频率合成器数字稳压器 0
    0x40、// FS_CAL1 频率合成器校准寄存器 1
    0x0E、// FS_CAL0 频率合成器校准寄存器 0
    0x03、// FS_DIVTWO 频率合成器除以2
    0x33、// FS_DSM0 FS 数字合成器模块配置寄存器 0
    0x17、// FS_DVC0 频率合成器分频器链配置.
    0x50、// FS_PFD 频率合成器相位频率检测器连接
    0x6E、// FS_PRE 频率合成器预分频器配置
    0x14、// FS_REG_DIV_CML 频率合成器分频器稳压器配置。
    0xAC、// FS_SPARE 频率合成器备件
    0xB4、// FS_VCO0 FS 压控振荡器配置寄存器
    0x0E、// XOSC5 晶体振荡器配置寄存器 5.
    0x03、// XOSC1 晶体振荡器配置寄存器 1
    };



    sendCommand (0X30);
    receivedByte=receiveData();
    SEND_VALUE (接收字节);
    while (!(receivedByte&0x00)=0x00);
    sendCommand (0x31);
    receivedByte=receiveData();
    SEND_VALUE (接收字节);
    while (!(receivedByte&0x00)=0x00);
    sendCommand (0x40);
    sendData (rfSettings.iocfg3);
    sendData (rfSettings.iocfg2);
    sendData (rfSettings.iocfg1);
    sendData (rfSettings.iocfg0);
    sendData (rfSettings.synct3);
    sendData (rfSettings.synct2);
    sendData (rfSettings.synct1);
    sendData (rfSettings.SYNC_cfg1);
    sendData (rfSettings.SYNC_cfg0);
    sendData (rfSettings.deviation_m);
    sendData (rfSettings.modcfg_dev_e);
    sendData (rfSettings.dcfilt_cfg);
    sendData (rfSettings.pend_cfg1);
    sendData (rfSettings.freq_if_cfg);
    sendData (rfSettings.iqic);
    sendData (rfSettings.chan_bw);
    sendData (rfSettings.mdmcfg0);
    sendData (rfSettings.symbol_rat2);
    sendData (rfSettings.symbol_rate1);
    sendData (rfSettings.symbol_rate0);
    sendData (rfSettings.AGC_ref);
    sendData (rfSettings.AGC_CS_THR);
    sendData (rfSettings.AGC_GAIN_ADJUST);
    sendData (rfSettings.AGC_cfg3);
    sendData (rfSettings.AGC_cfg2);
    sendData (rfSettings.AGC_cfg1);
    sendData (rfSettings.AGC_cfg0);
    sendData (rfSettings.fifo_cfg);
    P2OUT|=BIT2;
    sendCommand (0x21);
    sendData (rfSettings.fs_cfg);
    sendCommand (0x28);
    sendData (rfSettings.pkt_cfg0);
    sendCommand (0x2D);
    sendData (rfSettings.pa_cfg0);
    sendCommand (0x2E);
    sendData (rfSettings.pkt_len);
    sendCommand (0x21);
    sendCommand (0x2F);
    sendData (0x00);
    sendData (rfSettings.if_Mix_cfg);
    sendCommand (0x2F);
    sendData (0x02);
    sendData (rfSettings.toC_cfg);
    sendCommand (0x2F);
    sendData (0x0C);
    sendData (rfSettings.freq2);
    sendCommand (0x2F);
    sendData (0x0D);
    sendData (rfSettings.freq1);
    sendCommand (0x2F);
    sendData (0x12);
    sendData (rfSettings.fs_dig1);
    sendCommand (0x2F);
    sendData (0x13);
    sendData (rfSettings.fs_dig0);
    sendCommand (0x2F);
    sendData (0x16);
    sendData (rfSettings.FS_CAL1);
    sendCommand (0x2F);
    sendData (0x17);
    sendData (rfSettings.FS_cal0);
    sendCommand (0x2F);
    sendData (0x19);
    sendData (rfSettings.fs_divtwo);
    sendCommand (0x2F);
    sendData (0x1B);
    sendData (rfSettings.fs_dsm0);
    sendCommand (0x2F);
    sendData (0x1D);
    sendData (rfSettings.fs_dvc0);
    sendCommand (0x2F);
    sendData (0x1F);
    sendData (rfSettings.FS_PFD);
    sendCommand (0x2F);
    sendData (0x20);
    sendData (rfSettings.FS_PRE);
    sendCommand (0x2F);
    sendData (0x21);
    sendData (rfSettings.fs_reg_div_cml);
    sendCommand (0x2F);
    sendData (0x22);
    sendData (rfSettings.FS_SPARE);
    sendCommand (0x2F);
    sendData (0x27);
    sendData (rfSettings.fs_vco0);
    sendCommand (0x2F);
    sendData (0x32);
    sendData (rfSettings.xosc5);
    sendCommand (0x2F);
    sendData (0x36);
    sendData (rfSettings.xosc1);



    下面是接收器端代码
    #include
    #define uint8无符号字符
    /*地址配置=无地址检查*/
    /*比特率= 1.2 */
    /*载波频率= 868.000000 */
    /*偏差= 3.997803 */
    /*器件地址= 0 */
    /*曼彻斯特启用= false */
    /*调制格式= 2-FSK */
    /* PA 斜升= true */
    /*数据包位长度= 0 */
    /*数据包长度= 255 */
    /*数据包长度模式=变量*/
    /*性能模式=高性能*/
    /* RX 滤波器带宽= 25.000000 */
    /*符号速率= 1.2 */
    /* TX 功率= 15 */
    /*惠氏= false */
    // CC1120的射频设置
    typedef 结构{
    uint8 iocfg3; // GPIO3 IO 引脚配置
    uint8 iocfg2; // GPIO2 IO 引脚配置
    uint8 iocfg1; // GPIO1 IO 引脚配置
    uint8 iocfg0; // GPIO0 IO 引脚配置
    uint8 synct3; //同步字配置[31:24]
    uint8 synct2; //同步字配置[23:16]
    uint8 synct1; //同步字配置[15:8]
    uint8 synct0; //同步字配置[7:0]
    uint8 sync_cfg1; //同步字检测配置寄存器 1
    uint8 sync_cfg0; //同步字长度配置寄存器 0
    uint8 deviation_m; //频率偏差配置
    uint8 modcfg_dev_e; //调制格式和频率偏差配置
    uint8 dcfilt_cfg; //数字直流移除配置
    uint8前导码_cfg1;//前导码长度配置寄存器 1
    uint8 freq_if_cfg; // RX 混频器频率配置
    uint8 iqic; //数字图像通道补偿配置
    UINT8 CHAN_Bw; //通道滤波器配置
    uint8 mdmcfg0; //常规调制解调器参数配置寄存器 0
    uint8 symbol_rate2; //符号速率配置指数和尾数[1..
    uint8 symbol_rate1; //符号速率配置尾数[15:8]
    uint8 symbol_rate0; //符号速率配置尾数[7:0]
    uint8 AGC_ref; // AGC 基准电平配置
    uint8 AGC_CS_THR; //载波侦听阈值配置
    uint8 AGC_GAIN_ADJUST;
    uint8 AGC_cfg3; //自动增益控制配置寄存器 1
    uint8 AGC_cfg2;
    uint8 AGC_cfg1; //自动增益控制配置寄存器 1
    uint8 AGC_cfg0; //自动增益控制配置寄存器 0
    uint8 fifo_cfg; // FIFO 配置
    uint8 fs_cfg; //频率合成器配置
    uint8 pkt_cfg0; //数据包配置寄存器 0
    uint8 pa_cfg0; //功率放大器配置寄存器 0
    uint8 pkt_len; //数据包长度配置
    uint8 if_mif_cfg; //如果混合配置
    uint8 TOC_cfg; //时序偏移校正配置
    uint8 freq2; //频率配置[23:16]
    uint8 freq1; //频率配置[15:8]
    uint8 fs_dig1; //频率合成器数字寄存器 1
    uint8 fs_dig0; //频率合成器数字寄存器 0
    uint8 FS_CAL1; //频率合成器校准寄存器 1
    uint8 fs_cal0; //频率合成器校准寄存器 0
    uint8 fs_divtwo; //频率合成器除以2
    uint8 fs_dsm0; // FS 数字合成器模块配置寄存器 0
    uint8 fs_dvc0; //频率合成器分频器链配置.
    uint8 FS_PFD; //频率合成器相位频率检测器连接
    uint8 fs_pre; //频率合成器预分频器配置
    UINT8 FS_REG_DIV_CML;//频率合成器分频器稳压器配置
    uint8 FS_SPARE; //频率合成器备用
    uint8 fs_vco0; // FS 压控振荡器配置寄存器
    uint8 xosc5; //晶体振荡器配置寄存器 5.
    uint8 xosc1; //晶体振荡器配置寄存器 1
    } RF_SETTINGS;
    /*main */
    unsigned char 命令 Byte、dataByte、receivedByte、i;
    void SPI_init();
    void sendCommand (unsigned char);
    void sendData (unsigned char);
    unsigned char receiveData (void);
    void CC1120_init();
    void send_Serial (unsigned char);
    void init_serial (void);
    void send_value (unsigned char);

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    //SFRIE1=0X0010;
    SPI_init();//initialize SPI
    CC1120_init();//initialize RF Settings
    init_serial();
    P1OUT=0x01;//选择输出
    P1OUT^= BIT0;
    sendCommand (0x34);//启用 Rx 模式
    执行//***检查空 RXFIFO 的条件

    P2OUT&=~BIT2;
    sendCommand (0xFF);
    (i=0;i<128;i++)

    receivedByte = receiveData();
    SEND_VALUE (接收字节);
    SEND_Serial ('B');
    //__delay_cycles (1000);

    P2OUT|=BIT2;
    //__delay_cycles (1000);
    }while (!(receivedByte=0x06));


    返回0;

    void send_value (无符号字符字节)

    unsigned char 字节2、字节1、字节0;
    字节2=(字节/100);
    字节2=字节2|0X30;
    SEND_Serial (字节2);
    字节=字节%100;
    字节1 =字节/10;
    字节1=字节1|0X30;
    SEND_Serial (字节1);
    字节0=byte%10;
    字节0=字节0|0X30;
    SEND_Serial (字节0);
    SEND_Serial ('\n');

    void send_Serial (无符号字符字节)


    UCA1TXBUF=字节;
    while (UCA1STAT 和 UCBUSY);

    UCA1TXBUF=0x0A;//LE
    while (UCA1STAT 和 UCBUSY);
    UCA1TXBUF=0x0D;//CR
    while (UCA1STAT 和 UCBUSY);

    void init_serial (void)

    P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
    UCA1CTL1|=UCSWRST;//复位 UART
    UCA1CTL1|=UCSSEL_1;//选择32668HZ
    UCA1BR0=3;//设置9600波特率
    UCA1BR1=0x00;
    UCA1MCTL=0x06;
    UCA1CTL0=0x00;
    UCA1CTL1 &=~UCSWRST;


    void SPI_init()

    P2DIR|=BIT2;//为输出配置 CS
    P2OUT = BIT2;// CS High
    P3REN=BIT1;//
    P3DIR |= BIT0 + BIT2;//设置为输出
    P3SEL = BIT0+ BIT1 + BIT2;//配置 SPI
    /* USCI */
    UCB0CTL1 = UCSWRST;//将状态机复位
    UCB0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3引脚8位 SPI 主设备
    UCB0CTL1 |= UCSSEL_2;// USCI 时钟源:SMCLK
    UCB0BR0 |= 0x02;
    UCB0BR1 = 0;
    UCB0CTL1 &=~UCSWRST;//使能模块或模块初始化
    P2OUT &=~BIT2;//选择器件
    P3OUT=~BIT1;
    sendCommand (0X30);//重置芯片
    //__delay_cycles (1000);


    void sendCommand (无符号字符命令字节)


    UCB0TXBUF =命令字节;//发送命令字节

    while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
    _DELAY_CYCLES (1000);

    void sendData (无符号字符数据字节)

    UCB0TXBUF =数据字节;//输入要发送的0-255值

    while (UCB0STAT 和 UCBUSY);//等待移位寄存器和缓冲区为空的完成
    _DELAY_CYCLES (1000);

    unsigned char receiveData()



    while (UCB0STAT 和 UCBUSY);//等待移位寄存器和缓冲区为空的完成

    接收字节= UCB0RXBUF;//存储接收到的数据

    _DELAY_CYCLES (1000);
    return receivedByte;


    空 CC1120_init()

    rf_settings rfSettings ={
    0xB0、// IOCFG3 GPIO3 IO 引脚配置
    0x06、// IOCFG2 GPIO2 IO 引脚配置
    0xB0、// IOCFG1 GPIO1 IO 引脚配置
    0x40、// IOCFG0 GPIO0 IO 引脚配置
    0x55、// SYNC3 同步字配置[31:24]
    0x55、// SYNC2 同步字配置[23:16]
    0x7A、// SYNC1 同步字配置[15:8]
    0x0E、// SYNC0 同步字配置[7:0]
    0x08、// SYNC_CFG1 同步字检测配置寄存器 1
    0x0B、// SYNC_CFG0 同步字长度配置寄存器 0
    0x99、//偏差_M 频率偏差配置
    0x0D、// MODCFG_DEV_E 调制格式和频率偏差配置
    0x15、// DCFILT_CFG 数字直流移除配置
    0x18、//前导码_CFG1 前导码长度配置寄存器 1
    0x3A、// FREQ_IF_CFG RX 混频器频率配置
    0x00、// IQIC 数字图像信道补偿配置
    0x02、// CHAN_BW 通道滤波器配置
    0x05、// MDMCFG0 常规调制解调器参数配置寄存器 0
    0x99、// symbol_Rate2 符号速率配置指数和尾数[1..
    0x99、// symbol_rate1 符号速率配置尾数[15:8]
    0x99、// symbol_RATE0 符号速率配置尾数[7:0]
    0x3C、// AGC_REF AGC 基准电平配置
    0xEF、// AGC_CS_THR 载波检测阈值配置
    0x00、//AGC 增益调节
    0x00、
    0x00、
    0xA9、// AGC_CFG1 自动增益控制配置寄存器 1
    0xC0、// AGC_CFG0 自动增益控制配置寄存器 0
    0x00、// FIFO_CFG FIFO 配置
    0x12、// FS_CFG 频率合成器配置
    0x20、// PKT_CFG0 数据包配置寄存器 0
    0x79、// PA_CFG0 功率放大器配置寄存器 0
    0xFF、// PKT_LEN 数据包长度配置
    0x00、// if_mix _CFG 如果混合配置
    0x0A、// TOC_CFG 时序偏移校正配置
    0x6C、// FREQ2 频率配置[23:16]
    0x80、// FREQ1 频率配置[15:8]
    0x00、// FS_DIG1 频率合成器数字稳压器 1
    0x5F、// FS_DIG0 频率合成器数字稳压器 0
    0x40、// FS_CAL1 频率合成器校准寄存器 1
    0x0E、// FS_CAL0 频率合成器校准寄存器 0
    0x03、// FS_DIVTWO 频率合成器除以2
    0x33、// FS_DSM0 FS 数字合成器模块配置寄存器 0
    0x17、// FS_DVC0 频率合成器分频器链配置.
    0x50、// FS_PFD 频率合成器相位频率检测器连接
    0x6E、// FS_PRE 频率合成器预分频器配置
    0x14、// FS_REG_DIV_CML 频率合成器分频器稳压器配置。
    0xAC、// FS_SPARE 频率合成器备件
    0xB4、// FS_VCO0 FS 压控振荡器配置寄存器
    0x0E、// XOSC5 晶体振荡器配置寄存器 5.
    0x03、// XOSC1 晶体振荡器配置寄存器 1
    };




    sendCommand (0x31);
    receivedByte=receiveData();
    while (!(receivedByte&0x00)=0x00);

    sendCommand (0x40);
    sendData (rfSettings.iocfg3);
    sendData (rfSettings.iocfg2);
    sendData (rfSettings.iocfg1);
    sendData (rfSettings.iocfg0);
    sendData (rfSettings.synct3);
    sendData (rfSettings.synct2);
    sendData (rfSettings.synct1);
    sendData (rfSettings.SYNC_cfg1);
    sendData (rfSettings.SYNC_cfg0);
    sendData (rfSettings.deviation_m);
    sendData (rfSettings.modcfg_dev_e);
    sendData (rfSettings.dcfilt_cfg);
    sendData (rfSettings.pend_cfg1);
    sendData (rfSettings.freq_if_cfg);
    sendData (rfSettings.iqic);
    sendData (rfSettings.chan_bw);
    sendData (rfSettings.mdmcfg0);
    sendData (rfSettings.symbol_rat2);
    sendData (rfSettings.symbol_rate1);
    sendData (rfSettings.symbol_rate0);
    sendData (rfSettings.AGC_ref);
    sendData (rfSettings.AGC_CS_THR);
    sendData (rfSettings.AGC_GAIN_ADJUST);
    sendData (rfSettings.AGC_cfg3);
    sendData (rfSettings.AGC_cfg2);
    sendData (rfSettings.AGC_cfg1);
    sendData (rfSettings.AGC_cfg0);
    sendData (rfSettings.fifo_cfg);
    P2OUT|=BIT2;
    sendCommand (0x21);
    sendData (rfSettings.fs_cfg);
    sendCommand (0x28);
    sendData (rfSettings.pkt_cfg0);
    sendCommand (0x2D);
    sendData (rfSettings.pa_cfg0);
    sendCommand (0x2E);
    sendData (rfSettings.pkt_len);
    sendCommand (0x21);
    sendCommand (0x2F);
    sendData (0x00);
    sendData (rfSettings.if_Mix_cfg);
    sendCommand (0x2F);
    sendData (0x02);
    sendData (rfSettings.toC_cfg);
    sendCommand (0x2F);
    sendData (0x0C);
    sendData (rfSettings.freq2);
    sendCommand (0x2F);
    sendData (0x0D);
    sendData (rfSettings.freq1);
    sendCommand (0x2F);
    sendData (0x12);
    sendData (rfSettings.fs_dig1);
    sendCommand (0x2F);
    sendData (0x13);
    sendData (rfSettings.fs_dig0);
    sendCommand (0x2F);
    sendData (0x16);
    sendData (rfSettings.FS_CAL1);
    sendCommand (0x2F);
    sendData (0x17);
    sendData (rfSettings.FS_cal0);
    sendCommand (0x2F);
    sendData (0x19);
    sendData (rfSettings.fs_divtwo);
    sendCommand (0x2F);
    sendData (0x1B);
    sendData (rfSettings.fs_dsm0);
    sendCommand (0x2F);
    sendData (0x1D);
    sendData (rfSettings.fs_dvc0);
    sendCommand (0x2F);
    sendData (0x1F);
    sendData (rfSettings.FS_PFD);
    sendCommand (0x2F);
    sendData (0x20);
    sendData (rfSettings.FS_PRE);
    sendCommand (0x2F);
    sendData (0x21);
    sendData (rfSettings.fs_reg_div_cml);
    sendCommand (0x2F);
    sendData (0x22);
    sendData (rfSettings.FS_SPARE);
    sendCommand (0x2F);
    sendData (0x27);
    sendData (rfSettings.fs_vco0);
    sendCommand (0x2F);
    sendData (0x32);
    sendData (rfSettings.xosc5);
    sendCommand (0x2F);
    sendData (0x36);
    sendData (rfSettings.xosc1);


    如果我使用 SPI 接口将两个 CC1120模块连接到我的 MSP430F5529板、请建议我采取相应的补救措施来正确执行该操作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我建议您首先设置 MSP430、并确保 SPI 根据 SPI 规范工作。 CC1120用户指南中的内容。 如果您无法正常启动 SPI 并运行、应在 MSP 论坛中寻求帮助。 当 SPI 工作正常时、您应该查看 CC1120的代码示例、并查看能够发送和接收数据包所需的步骤。

    http://www.ti.com/lit/zip/swrc253

     

    在 TX 端、您需要:

     

    初始化 MCU

    重置无线电

    配置无线电

    将数据写入 TXFIFO

    选通 STX

     

    在 RX 端:


    初始化 MCU

    重置无线电

    配置无线电

    Strobe SRX

    等待数据被接收

    从 RXFIFO 读取数据

    BR

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们还在 CCS 中提供了 CC1120/MSP430的代码示例: processors.wiki.ti.com/.../Cc1120_easy_link_vchip_boosterpack_for_MSP430_launchpad_CCS.zip