本人并不是一个大神,只是在做比赛的时候需要认真理解CC1120的连接程序。在经过4、5天的认真学习之后,觉得还是有一些收获的,因此把它分享出来,希望对大家有些许帮助。好啦,言归正传,首先来介绍一下CC1120。CC1120是深圳市芯威科技有限公司专业开发的一款高性能单片收发器,适合面向ETSI1类符合169MHz和433MHz频带无线传感器网络和有源RFID的系统,为经济高效的无线系统在低功耗和低电压操作下实现高性能而设计。提供扩展硬件,以支持数据包处理、数据缓冲和突发传输、广播声道评估、链路质量指示和无线电唤醒。CC1120主要运行参数可以通过SPI接口控制。配合TI SmartRF05或SmartRF TRXEB开发板使用,在模块上通过调整P3短路帽的方面来确定接收或发射状态。CC1120是通过MSP430控制的,所以程序运行在MSP430上。
CC1120的简单连接程序主要包括TX(发送数据)和RX(接收数据)两个C语言文件,这两个文件是完成CC1120之间通信的关键。
TX文件中的头文件包括 "msp430.h"、 "lcd_dogm128_6.h"、 "hal_spi_rf_trxeb.h"、"cc112x_spi.h"、"stdlib.h"、"bsp.h"、"bsp_key.h"、 "io_pin_int.h"、"bsp_led.h"、"cc112x_easy_link_reg_config.h"。其中"msp430.h"是系统头文件,用于存放msp430的函数声明,其他头文件依次对应一些c语言文件。而后声明了一些宏,如下:
#define ISR_ACTION_REQUIRED 1
#define ISR_IDLE 0
#define PKTLEN 30 // 1 < PKTLEN < 126
#define GPIO3 0x04
#define GPIO2 0x08
#define GPIO0 0x80
它们的含义为:
ISR_ACTION_REQUIRED 中断服务请求,ISR_IDLE 中断服务闲置,PKTLEN 包长度,GPIO3、GPIO2、GPIO0指通用输入输出接口。
下面是两个全局变量:
static uint8_t packetSemaphore; //包信号
uint16_t packetCounter = 0; //包计数
其后是对该文件中出现的函数所做的声明,便于以后引用,在此不一一赘述。
下面就是程序的主函数部分,主函数一共调用了三个函数,分别是:initMCU()、registerConfig()、runTX()。intMCU()用于微处理器的初始化,registerConfig()用于设置广播寄存器,runTX()用于发送无线信号。
首先,initMCU()中调用的都是MCP430的系统初始化程序,具体的实现就不一一赘述,可在bsp程序包中找到,下面我只说它们的功能。 bspInit(BSP_SYS_CLK_8MHZ) 实现了时钟以及输入输出的初始化&