1、CC2530CC2530简介简介1第1页,共84页。CC2530芯片nCC2530CC2530是基于2.4GHz IEEE802.15.42.4GHz IEEE802.15.4、ZigBeeZigBee和RF4CERF4CE上的一个片上系统解决方案。其特点是以极低的总材料成本建立较为强大的网络节点。nCC2530 CC2530 芯片结合了RF RF 收发器,增强型8051 CPU8051 CPU,系统内可编程闪存,8KB SRAM 8KB SRAM 和许多其他模块的强大的功能。nCC2530 CC2530 主要有四种不同的闪存版本:CC2530F32/64/128/256CC2530F32/6
2、4/128/256(32/64/128/256KB32/64/128/256KB闪存)n其具有多种运行模式,使得它能满足超低功耗系统的要求。同时CC2530CC2530运行模式之间的转换时间很短,使其进一步降低能源消耗。2第2页,共84页。CC2530片内结构方框图片内结构方框图数字模拟混合输入/输出控制器XOSC_Q2 RESET_N XSOC_Q1 P2_4 P2_3 P2_2 P2_1 P2_0 P1_4 P1_3 P1_2 P1_1 P1_0 RF_PP1_7 P1_6 P1_5 P1_4 P1_3 P1_2 P1_1 P1_0 P1_7 P1_6 P1_5 复位看门狗片上稳压器32M
3、Hz晶振高速RC-OSC上电/复位/掉电32.768KHz晶振32.768KHzRC-OSC睡眠定时器调试接口多路时钟校准睡眠模式控制器DMA8051CPU内核存储器仲 裁32/64/128/256KB FLASH8KB SRAMADC音频/直流8通道AES加密和解密IRQ控制FLASH写射频寄存器CSMA/CA选通处理器USART1USART2射步数据接口定时器1(16位)定时器2IEEE 802.15.4 MAC定时器定时器3(8位)定时器4(8位)调制器解调器自动增益控制频率合成器接收链RF_N先进选出和帧控制发送链VDD(2.03.6V)DCOUPL3第3页,共84页。CC2530引脚
4、描述(1)4第4页,共84页。CC2530引脚描述引脚描述(2)5第5页,共84页。CC2530CC2530封装封装6第6页,共84页。CC2530CC2530需要极少的外部连接元件,同时有很多典型电路,需要极少的外部连接元件,同时有很多典型电路,其模块大致可以分为三类:其模块大致可以分为三类:1 1、CPUCPU和内存相关模块和内存相关模块 2 2、外设,时钟和电源管理相关模块、外设,时钟和电源管理相关模块 3 3、无线信号收发相关模块、无线信号收发相关模块CC2530CC2530芯片内部结构芯片内部结构7第7页,共84页。n强大的强大的5 5通道通道DMADMAnIEEE 802.15.4
5、 MACIEEE 802.15.4 MAC定时器,通用定时器(一个定时器,通用定时器(一个1616位位定时器,一个定时器,一个8 8位定时器)位定时器)nIRIR发生电路(发生电路(IR IR 中断)中断)n具有捕获功能的具有捕获功能的32-kHz32-kHz睡眠定时器睡眠定时器n硬件支持硬件支持CSMA/CA(CSMA/CA(载波侦听多路访问冲突避免载波侦听多路访问冲突避免)n支持精确的数字化支持精确的数字化RSSI/LQI(RSSI/LQI(链路质量指示链路质量指示)n电池监视器和温度传感器电池监视器和温度传感器n2121个通用个通用I/OI/O引脚引脚n看门狗定时看门狗定时CC2530C
6、C2530的的外设外设(1)(1)8第8页,共84页。n两个两个8位定时器:定时器位定时器:定时器3,4为为8位定时器,有一个可编程分频器,一位定时器,有一个可编程分频器,一个个8位的周期值,一个计数器通道。位的周期值,一个计数器通道。nMAC定时器:专为定时器:专为MAC或其他协议而设的定时器,可以跟踪已过周或其他协议而设的定时器,可以跟踪已过周期,同时可以记录收发某一的帧精确时间和传输结束时间,以便产期,同时可以记录收发某一的帧精确时间和传输结束时间,以便产生不同的选通命令到无线模块生不同的选通命令到无线模块nADC:支持:支持7到到12位的分辨率,带宽范围为位的分辨率,带宽范围为7-30
7、kHz,在在DC与音频转换与音频转换时,能够使用时,能够使用8个输入通道。个输入通道。nAES加密加密/解密内核:解密内核:CC2530用用128位的位的AES算法进行加密或解密算法进行加密或解密数据,从而保证了数据,从而保证了ZigBee网络层和应用层的安全要求。网络层和应用层的安全要求。nUSART0和和USART1分别被配置为一个主从或一个分别被配置为一个主从或一个UART,其功能,其功能是为是为RX和和TX提供双缓冲,以及硬件流控制。提供双缓冲,以及硬件流控制。n调试接口:用于内部电路调试,具有两线串形接口调试接口:用于内部电路调试,具有两线串形接口nI/O控制器:负责所有的通用的控制
8、器:负责所有的通用的I/O引脚引脚CC2530的的外设外设(2)9第9页,共84页。CC2530具备一个IEEE802.15.4兼容无线收发器,其中的RF内核控制模拟无线模块,另外它还提供了一个连接外部设备的端口,从而可以发出命令和读取状态,操纵各执行电路的事件顺序。同时无线设备还包括数据包过虑模块和地址识别模块。无线设备无线设备10第10页,共84页。CC2530最小系统11第11页,共84页。CC2530的典型应用的典型应用12第12页,共84页。n输入输出匹配:当使用单极子的一个不平衡天线,需要用一个巴伦输入输出匹配:当使用单极子的一个不平衡天线,需要用一个巴伦(平衡非平衡转换器平衡非平
9、衡转换器)来来对性能进行优化,可以采用低成本分立电感或电容来实现,这里主要运用对性能进行优化,可以采用低成本分立电感或电容来实现,这里主要运用C262,L261,C252,L252.如果使用了诸如折叠偶极子这样的平衡天线,巴伦可以忽略。如果使用了诸如折叠偶极子这样的平衡天线,巴伦可以忽略。n1.8V片上稳压器:用以提供片上稳压器:用以提供1.8V的数字逻辑电压,采用这一个稳压器要求用一个去耦电容的数字逻辑电压,采用这一个稳压器要求用一个去耦电容C401来获得稳定运行效果。来获得稳定运行效果。n电源去耦和过滤电源去耦和过滤n必须使用合适的电源去耦以获得最佳的性能。在一个应用中去耦电容和电源过滤的
10、位必须使用合适的电源去耦以获得最佳的性能。在一个应用中去耦电容和电源过滤的位置和尺寸对获得最佳性能是非常重要的。置和尺寸对获得最佳性能是非常重要的。TI 提供了一个紧凑的参考设计,应该很好地提供了一个紧凑的参考设计,应该很好地遵循。遵循。n晶振晶振 32MHz 晶振使用了一个外部晶振使用了一个外部32-MHz 振荡器振荡器XTAL1 和两个负载电容(和两个负载电容(C221 和和C231)。)。n晶振晶振 XTAL2 是一个可选的是一个可选的32.768 kHz 晶振,有两个负载电容(晶振,有两个负载电容(C321 和和C331)用于)用于32.768-kHz晶振。晶振。32.768 kHz
11、晶振用于要求非常低的睡眠电流消耗和精确唤醒时间晶振用于要求非常低的睡眠电流消耗和精确唤醒时间的应用。的应用。元件说明元件说明13第13页,共84页。CC2530模块模块传感器板传感器板14第14页,共84页。步进电机结点步进电机结点15第15页,共84页。CC Debug仿真器16第16页,共84页。CC2530CC2530的的CPUCPU17第17页,共84页。CC2530CC2530的的CPUCPU18第18页,共84页。CC2530的存储器CC2530里的四种存储空间:里的四种存储空间:CODE程序存储器:用处存放程序代码和一些常量,寻址范围程序存储器:用处存放程序代码和一些常量,寻址范
12、围 0000HFFFFH 共共64KB。DATA:内部数据存储空间,可以直接或间接被一个单周期:内部数据存储空间,可以直接或间接被一个单周期CPU指令访指令访问。这一存储空间是问。这一存储空间是256B。其中较低的。其中较低的128B可以直接或间接寻址,较可以直接或间接寻址,较高的高的128B只能间接寻址。只能间接寻址。XDATA:外部数据存储空间,通常需要:外部数据存储空间,通常需要4-5个个CPU指令周期来指令周期来访问。这一存储空间是访问。这一存储空间是64KB。访问。访问XDATA 存储器慢于访问存储器慢于访问DATA,因为,因为CODE 和和XDATA 存储空间共享存储空间共享CPU
13、 内核上的一内核上的一个通用总线。个通用总线。SFR:寄存器存储空间,可以直接被一个:寄存器存储空间,可以直接被一个CPU指令访问。这一存指令访问。这一存储空间含有储空间含有128字节。对于地址是被字节。对于地址是被8 整除的整除的SFR 寄存器,每一位寄存器,每一位还可以单独寻址。还可以单独寻址。19第19页,共84页。CC2530的XDATA存储器映射l 为使为使DMA 访问全部物理存储空间,访问全部物理存储空间,并由此使得并由此使得DMA 在不同在不同8051存储存储空间之间进行传输,空间之间进行传输,CODE和和SFR部分存储空间映射到部分存储空间映射到XDATA存储存储空间。空间。l
14、 XDATA较高的较高的32KB是一个只读区是一个只读区域域(XBANK),任何可用的任何可用的32KB闪存闪存区均可以映射到这里。区均可以映射到这里。l 这使得软件可以访问这使得软件可以访问整个闪存存储器。这整个闪存存储器。这一区域主要用作存储一区域主要用作存储另外的常量数据。另外的常量数据。20第20页,共84页。CC2530CC2530的的CODECODE存储器映射机制一存储器映射机制一 机制一是标准的机制一是标准的8051映射,只有程序存储器(即闪存)映射到映射,只有程序存储器(即闪存)映射到CODE 存储空间存储空间,这是复位后默认映射方式。这是复位后默认映射方式。RootBankF
15、MAP.MAP2:0确定过来的确定过来的Bank21第21页,共84页。CC2530CC2530的的CODECODE存储器映射机制二存储器映射机制二22第22页,共84页。CPU 存储空间l SRAM 映射到的地址范围是映射到的地址范围是0 x0000 到到(SRAM_SIZE 1)。l XREG 区域映射到区域映射到1KB 地址区域地址区域(0 x60000 x63FF)。这些寄存器是另。这些寄存器是另外的寄存器,有效地扩展外的寄存器,有效地扩展SFR 寄存器寄存器l 空间。一些外设寄存器和大多数无线电控制和数据寄存器映射到这里。空间。一些外设寄存器和大多数无线电控制和数据寄存器映射到这里。
16、l SFR 寄存器映射到地址区域寄存器映射到地址区域(0 x70800 x70FF)。l 闪存信息页面(闪存信息页面(2 KB)映射到地址区域)映射到地址区域(0 x78000 x7FFF)。这是一。这是一个只读区域,包含有关设备的各种信息。个只读区域,包含有关设备的各种信息。l XDATA 存储空间存储空间(0 x80000 xFFFF)的较高的较高32KB 是一个只读的闪是一个只读的闪存代码区(存代码区(XBANK),可以使用),可以使用l MEMCTR.XBANK2:0位映射到任何一个可用的闪存区。位映射到任何一个可用的闪存区。l 闪存存储器闪存存储器SRAM 和寄存器到和寄存器到XDA
17、TA 的映射允许的映射允许DMA 控制器和控制器和CPU 访问访问在一个统一的地址空间内的所有物理存储器。在一个统一的地址空间内的所有物理存储器。l 写入存储映射中未执行的区域(图中的阴影部分)没有影响。从为执行的区写入存储映射中未执行的区域(图中的阴影部分)没有影响。从为执行的区域读出返回域读出返回0 x00。写只读区域比如闪存区域将被忽略。写只读区域比如闪存区域将被忽略。23第23页,共84页。物理存储器物理存储器l 闪存存储器:片上闪存存储器主要是为了保存程序代码和常量数据。闪存存闪存存储器:片上闪存存储器主要是为了保存程序代码和常量数据。闪存存储器有以下功能:储器有以下功能:l 页面大
18、小:页面大小:2 KBl 闪存页面擦除时间:闪存页面擦除时间:20msl 闪存芯片(批量)擦除时间:闪存芯片(批量)擦除时间:20msl 闪存写时间(闪存写时间(4 字节):字节):20sl 数据保留(室温下):数据保留(室温下):100 年年l 编程编程/擦除次数:擦除次数:20,000 次次l 信息页面是一个信息页面是一个2 KB 的只读区域,存储设备信息。其他信息中它包括来自的只读区域,存储设备信息。其他信息中它包括来自TI 地地址范围的一个唯一的址范围的一个唯一的IEEE地址。它以最低位优先的形式存储在地址。它以最低位优先的形式存储在XDATA 地址地址0 x780C。将出版一个单独的
19、设计说明,详细介绍信息页面的内容。将出版一个单独的设计说明,详细介绍信息页面的内容。lSFR寄存器:特殊功能寄存器(寄存器:特殊功能寄存器(SFR)控制)控制8051CPU内核和内核和/或外设的一些功能。许多或外设的一些功能。许多8051CPU内核的内核的SFR和标准的和标准的8051SFR 相同。但是有一些控制功能的另外的相同。但是有一些控制功能的另外的SFR,是标,是标准准8051 中所没有的。另外的中所没有的。另外的SFR 用于和外设单元以及用于和外设单元以及RF 收发器接口。收发器接口。24第24页,共84页。与端口有关的寄存器与端口有关的寄存器寄存器名称寄存器名称地址地址描描 述述端
20、端口口P00 x80端口端口0。可从。可从XDATA(0 x7080)只读。)只读。P10 x90端口端口1。可从。可从XDATA(0 x7090)只读。)只读。P20 xA0端口端口2。可从。可从XDATA(0 x70A0)只读。)只读。寄存器名称寄存器名称地址地址描描 述述端端口口控控制制寄寄存存器器P0SEL0 xF3端口端口0功能选择(功能选择(0-通用通用I/O,1-外围功能)外围功能)P1SEL0 xF4端口端口1功能选择(功能选择(0-通用通用I/O,1-外围功能)外围功能)P2SEL0 xF5端口端口2功能选择(功能选择(0-通用通用I/O,1-外围功能)外围功能)P0INP0
21、 x8F端口端口0 输入模式(输入模式(0-三态,三态,1-上拉)上拉)P1INP0 xF6端口端口1输入模式(输入模式(0-三态,三态,1-上拉)上拉)P2INP0 xF7端口端口2输入模式(输入模式(0-三态,三态,1-上拉)上拉)P0DIR0 xFD端口端口0方向选择(方向选择(0-输入,输入,1-输出)输出)P1DIR0 xFE端口端口1方向选择(方向选择(0-输入,输入,1-输出)输出)P2DIR0 xFF端口端口2方向选择(方向选择(0-输入,输入,1-输出)输出)25第25页,共84页。以下代码使以下代码使P1_0引脚电平每隔一定时间反向一次:引脚电平每隔一定时间反向一次:#in
22、clude#define BLED P1_0 /定义定义LED为为P1_0口控制口控制void main()unsigned int d;P1SEL&=0 x01;/选择选择P1_0为通用为通用I/O引脚引脚 P1DIR|=0 x01;/I/O方向选择为输出方向选择为输出 while(1)for(d=0;d30000;d+);/延时延时 BLED=BLED;/电平反向,电平反向,LED闪烁闪烁 26第26页,共84页。将将P1_2设为三态输入,读取按键状态设为三态输入,读取按键状态#define key P0_1 P0SEL&=0X02;/P0_1作为通用作为通用I/O口口P0DIR&=0X0
23、2;/P0_1输入输入P0INP|=0 x02;/P0_1上拉上拉uchar key_scan(void)if(key=0)/低电平有效低电平有效 delay(100);/延时消抖动延时消抖动 if(key=0)/处理按键事件处理按键事件 while(!key);/直到松开按键直到松开按键 27第27页,共84页。定时器定时器T1(1)l 16 位递增或递减计数器位递增或递减计数器l 由由CLKCON.TICKSPD定义活动时钟边沿周期,它设置从定义活动时钟边沿周期,它设置从0.25MHz到到32MHz的不同的时钟标签频率(可以使用的不同的时钟标签频率(可以使用32 MHz XOSC 作为时钟
24、源)。作为时钟源)。l 由由T1CTL.DIV设置分频器值可以从设置分频器值可以从1、8、32 或或128。因此当因此当32 MHz 晶振用作系统时钟源时,定时器晶振用作系统时钟源时,定时器1 可以使用的最低时钟频率是可以使用的最低时钟频率是1953.125Hz,最高是,最高是32 MHz。28第28页,共84页。l 可以通过两个可以通过两个8 位的位的SFR读取读取16位的计数器值:位的计数器值:T1CNTH 和和T1CNTL,分别包含在高位字节和低位字节中。当读取分别包含在高位字节和低位字节中。当读取T1CNTL 时,计数器的时,计数器的高位字节在那时被缓冲到高位字节在那时被缓冲到T1CN
25、TH,以便高位字节可以从,以便高位字节可以从T1CNTH 中读出。因此中读出。因此T1CNTL 必须总是在读取必须总是在读取T1CNTH 之前首先读取。之前首先读取。l 对对T1CNTL 寄存器的所有写入访问将复位寄存器的所有写入访问将复位16 位计数器。位计数器。l 当达到最终计数值(溢出)时,计数器产生一个中断请求。可以用当达到最终计数值(溢出)时,计数器产生一个中断请求。可以用T1CTL 控制寄存器设置启动并停止该计数器。当一个不是控制寄存器设置启动并停止该计数器。当一个不是00 值的写值的写入到入到T1CTL.MODE 时,计数器开始运行。如果时,计数器开始运行。如果00 写入到写入到
26、T1CTL.MODE,计数器停止在它现在的值上。,计数器停止在它现在的值上。l 一般来说控制寄存器一般来说控制寄存器T1CTL 用于控制定时器操作。状态寄存器用于控制定时器操作。状态寄存器T1STAT 保存中断标志。保存中断标志。定时器定时器T1(2)29第29页,共84页。与定时器与定时器1有关的寄存器有关的寄存器寄存器名称寄存器名称地址地址描描 述述T1CC0L0 xDA通道通道0捕获捕获/比较值低字节比较值低字节T1CC0H0 xDB通道通道0捕获捕获/比较值高字节比较值高字节T1CC1L0 xDC通道通道1捕获捕获/比较值低字节比较值低字节T1CC1H0 xDD通道通道1捕获捕获/比较
27、值高字节比较值高字节T1CC2L0 xDE通道通道2捕获捕获/比较值低字节比较值低字节T1CC2H0 xDF通道通道2捕获捕获/比较值高字节比较值高字节T1CNTL0 xE2计数器低字节计数器低字节T1CNTH0 xE3计数器高字节计数器高字节T1CTL0 xE4控制控制T1CCTL00 xE5通道通道0捕获捕获/比较控制比较控制T1CCTL10 xE6通道通道1捕获捕获/比较控制比较控制T1CCTL20 xE7通道通道2捕获捕获/比较控制比较控制T1STAT0 xAF状态状态常用常用30第30页,共84页。T1CTL 定时器定时器1 的控制和状态的控制和状态位位名称名称复位复位R/W描描 述
28、述7:4-0000RO保留保留3:2DIV1:000R/W 分频器划分值。产生主动的时钟边缘用来更分频器划分值。产生主动的时钟边缘用来更新计数器,如下:新计数器,如下:00:标记频率:标记频率/101:标记频率:标记频率/810:标记频率:标记频率/3211:标记频率:标记频率/1281:0MODEMODE1:000R/W 选择定时器选择定时器1模式。定时器操作模式通过下列模式。定时器操作模式通过下列方式选择:方式选择:00:暂停运行。:暂停运行。01:自由运行,从:自由运行,从0 x0000到到0 xFFFF反复计数反复计数10:从:从0 x0000到到T1CC0反复计数。反复计数。11:正
29、计数:正计数/倒计数,从倒计数,从0 x0000到到T1CC0反复反复 计数并且从计数并且从T1CC0倒计数到倒计数到0 x000031第31页,共84页。T1STAT定时器定时器1状态寄存器状态寄存器位位名称名称复位复位R/W描描 述述7:6-0R0保留保留5OVFIF0R/W0定时器定时器1计数器溢出中断标志。当计数器在计数器溢出中断标志。当计数器在自由运行或模模式下达到最终计数值时设置,自由运行或模模式下达到最终计数值时设置,当在正当在正/倒计数模式下达到零时倒计数。写倒计数模式下达到零时倒计数。写1没有影响。没有影响。4CH4IF0R/W0定时器定时器1通道通道4中断标志。当通道中断标
30、志。当通道4中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。3CH3IF0R/W0定时器定时器1通道通道3中断标志。当通道中断标志。当通道3中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。2CH2IF0R/W0定时器定时器1通道通道2中断标志。当通道中断标志。当通道2中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。1CH1IF0R/W0定时器定时器1通道通道1中断标志。当通道中断标志。当通道1中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。0CH0IF0R/W0定时器定时器0通道通道0中断标志。当通道中断标志。当通道0中断
31、条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。32第32页,共84页。利用定时器中断实现指示灯的闪烁利用定时器中断实现指示灯的闪烁#include#define uint unsigned int#define uchar unsigned char#define RLED P1_0/定义定义LED1为为P10口控制口控制#define YLED P1_1/定义定义LED2为为P11口控制口控制uint counter=0;/统计溢出次数统计溢出次数uint LEDFlag;/标志是否要闪烁标志是否要闪烁void InitialT1test(void)/T1初始化程序初始化程序
32、P1DIR=0 x03;/初始化初始化LED控制端口控制端口P1,P10 P11为输出为输出RLED=0;YLED=0;T1CTL=0 x05;/初始化计数器初始化计数器1 T1STAT=0 x21;/通道通道0,中断有效中断有效,8分频分频 /自动重装模式自动重装模式(0 x0000-0 xffff)33第33页,共84页。利用定时器中断实现指示灯的闪烁利用定时器中断实现指示灯的闪烁void main()/主函数主函数InitialT1test();/调用初始化函数调用初始化函数 while(1)/查询溢出查询溢出 if(IRCON 0)/中断标志寄存器,其中中断标志寄存器,其中bit1为为
33、T1IF IRCON=0;/清溢出标志清溢出标志 counter+;if(counter=15)/中断计数,约中断计数,约0.25s counter =0;LEDFlag=!LEDFlag;if(LEDFlag)YLED=RLED;RLED=!RLED;/每每 1s LED灯闪烁一下灯闪烁一下 LEDFlag=!LEDFlag;/闪烁标志变量置闪烁标志变量置0 34第34页,共84页。串口串口0使用(初始化)使用(初始化)void initUARTSEND(void)CLKCONCMD&=0 x40;/设置系统时钟源为设置系统时钟源为32MHZ晶振晶振 while(CLKCONSTA&0 x4
34、0);/等待晶振稳定等待晶振稳定 CLKCONCMD&=0 x47;/设置系统主时钟频率为设置系统主时钟频率为32MHZ PERCFG=0 x00;/位置位置1 P0口口 P0SEL=0 x3c;/P0_2,P0_3,P0_4,P0_5用作串口用作串口 P2DIR&=0XC0;/P0优先作为优先作为UART0 U0CSR|=0 x80;/UART方式方式 U0GCR|=9;U0BAUD|=59;/波特率设为波特率设为19200 UTX0IF=0;/UART0 TX中断标志初始置位中断标志初始置位0 函数功能:函数功能:将系统时钟设为高速晶振,将将系统时钟设为高速晶振,将 P0口设置为串口设置为
35、串 口口0功能引脚,功能引脚,串口串口0使用使用UART模式,波特率设为模式,波特率设为19200,允许接收。,允许接收。该函数在使用串口之前调用。该函数在使用串口之前调用。CLKCONCMDCLKCONSTAPERCFGU0CSRU0GCRU0BAUDUTX0IF35第35页,共84页。串口串口0使用(发送字符串)使用(发送字符串)void UartTX_Send_String(char*Data,int len)int j;for(j=0;jlen;j+)U0DBUF=*Data+;while(UTX0IF=0);UTX0IF=0;函数功能:串口发送数据,函数功能:串口发送数据,*data
36、 为发送缓冲的指针,为发送缓冲的指针,len 为发为发送数据的长度送数据的长度 该函数在初始化串口后才可以正常调用。该函数在初始化串口后才可以正常调用。36第36页,共84页。#include#include#define RLED P1_0 /定义控制灯的端口定义控制灯的端口#define GLED P1_1char Txdata25=XWWK Test Data!;void main(void)uchar i;P1DIR=0 x03;/P1_0,P1_1输出,控制输出,控制LED RLED=1;/RLED灭灭 GLED=0;/GLED亮亮 initUARTSEND();UartTX_Sen
37、d_String(Txdata,25);for(i=0;i30;i+)Txdatai=;strcpy(Txdata,HELLO);/将将UART0 TX test赋给赋给Txdata;while(1)UartTX_Send_String(Txdata,sizeof(HELLO);/串口发送数据串口发送数据 Delay(50000);/延时延时 GLED=!GLED;/GLED闪烁闪烁 Delay(50000);Delay(50000);串口串口0使用(主函数)使用(主函数)37第37页,共84页。通过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(初始化初始化)/*温度传感器初始化函
38、数温度传感器初始化函数*/void initTempSensor(void)DISABLE_ALL_INTERRUPTS();/关闭所有中断关闭所有中断 InitClock();/设置系统主时钟为设置系统主时钟为32M *(BYTE _xdata*)0 x624B)=0 x01;/开启温度传感器开启温度传感器 *(BYTE _xdata*)0 x61BD)=0 x01;/将温度传感器与将温度传感器与 /ADC连接起来连接起来void InitClock(void)CLKCONCMD=0 x28;/设定计数器时钟为设定计数器时钟为1M Hz,系统时钟为系统时钟为32 MHz while(CLKC
39、ONSTA&0 x40);/等晶振稳定等晶振稳定#define DISABLE_ALL_INTERRUPTS()(IEN0=IEN1=IEN2=0 x00)38第38页,共84页。INT8 getTemperature(void)UINT8 i;UINT16 AdcValue;UINT16 value;AdcValue=0;for(i=0;i 2;/ADCL寄存器低寄存器低2位无效位无效 value|=(UINT16)ADCH)2;/累加除以累加除以4,得到平均值,得到平均值 return ADC14_TO_CELSIUS(value);/根据根据AD值,计算出实际的温度值,计算出实际的温度通
40、过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(读读AD值值)#define ADC_SINGLE_CONVERSION(settings)do ADCCON3=(settings);while(0)#define ADC_SAMPLE_SINGLE()do ADC_STOP();ADCCON1|=0 x40;while(0)0 0 H H H H H HADCHL L L L L L X XADCL0 0 0 0 H H H H0 0 L L L L L LH H 0 0 0 0 0 00 0 0 0 H H H H H H L L L L L L#define ADC14_TO
41、_CELSIUS(ADC_VALUE)(ADC_VALUE)4)-335)#define ADC_SAMPLE_READY()(ADCCON1&0 x80)39第39页,共84页。void main(void)char i;char TempValue10;InitUART0();/初始化串口初始化串口initTempSensor();/初始化初始化ADC while(1)AvgTemp=0;for(i=0;i=1;/每次累加后除每次累加后除2.sprintf(TempValue,(char*)%dC,(INT8)AvgTemp);UartTX_Send_String(TempValue,4)
42、;Delay(50000);通过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(主函数主函数)40第40页,共84页。CC2530 Basic RF(简单无线点对点传输协议)(简单无线点对点传输协议)l Basic RF 由由TI 公司提供,它包含了公司提供,它包含了IEEE 802.15.4 标准的数据包的标准的数据包的收发。这个协议只是用来演示无线设备是如何进行数据传输的,不包收发。这个协议只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与含完整功能的协议。但是它采用了与802.15.4 MAC兼容的数据包结兼容的数据包结构及构及ACK 包结构,其功能
43、限制如下:包结构,其功能限制如下:u不提供不提供“多跳多跳”、“设备扫描设备扫描”及及Beacon(信标(信标)。)。u不提供不同种的网络设备,如协调器、路由器等,所有节点同级,只不提供不同种的网络设备,如协调器、路由器等,所有节点同级,只实现点对点传输。实现点对点传输。u传输时会等待信道空闲,但不按传输时会等待信道空闲,但不按802.15.4 CSMA-CA 要求进行两要求进行两次次CCA 检测。检测。u不重传数据不重传数据。l 简言之,简言之,Basic RF 不适合直接用于产品的开发,但可用来进行无不适合直接用于产品的开发,但可用来进行无线设备数据传输的入门学习。线设备数据传输的入门学习
44、。41第41页,共84页。Basic RF 工作原理(工作原理(2)l 启动启动u创建一个创建一个basicRfCfg_t 的数据结构,并初始化其中的成员。的数据结构,并初始化其中的成员。u调用调用basicRfInit()函数进行协议的初始化。函数进行协议的初始化。l 数据发送数据发送u1.创建一个创建一个buffer,把,把payload放入其中。放入其中。u2.调用调用basicRfSendPacket()函数发送。函数发送。l 数据接收数据接收u上层通过上层通过basicRfPacketIsReady()函数来检查是否收到一函数来检查是否收到一个新的数据包,调用个新的数据包,调用bas
45、icRfReceive()函数,把收到的数函数,把收到的数据复制到据复制到buffer 中。中。42第42页,共84页。基于基于Basic RF的无线灯光控制实验的无线灯光控制实验l程序功能程序功能u是一个基本的点对点通信实验,实现了一个节是一个基本的点对点通信实验,实现了一个节点板上的开关控制另一个节点板上的点板上的开关控制另一个节点板上的LED的功的功能。能。u每一个节点是用来做开关还是用来做灯的控制每一个节点是用来做开关还是用来做灯的控制器,可以通过源程序的不同定义进行选择。器,可以通过源程序的不同定义进行选择。u可作为一个无线通信的入门级程序。可作为一个无线通信的入门级程序。lTI例程
46、工程名:例程工程名:cc2530_sw_examples.eww43第43页,共84页。baseRF通信基本流程通信基本流程1.初始化网络地址,打开接收机。初始化网络地址,打开接收机。2.初始化初始化basicRfConfig,确定网络,确定网络ID、信道。、信道。3.初始化外围设备,如时钟、各个初始化外围设备,如时钟、各个I/O口等。口等。4.事件的处理,如发送报文或接受报文后的数据处理等。事件的处理,如发送报文或接受报文后的数据处理等。44第44页,共84页。初始化网络初始化网络(1)void main(void)/射频配置射频配置 basicRfConfig.panId=PAN_ID;b
47、asicRfConfig.channel=RF_CHANNEL;basicRfConfig.ackRequest=TRUE;/要求接受方应答要求接受方应答/IO初始化初始化 halBoardInit();/初始化指示灯和按钮初始化指示灯和按钮 initUART0();/初始化串口初始化串口/RF初始化初始化 if(halRfInit()=FAILED)HAL_ASSERT(FALSE);45第45页,共84页。初始化网络初始化网络(2)uint8 halRfInit(void)/上电设置默认参数上电设置默认参数 FRMCTRL0|=(AUTO_ACK|AUTO_CRC);/推荐的推荐的RX设置
48、设置 TXFILTCFG=0 x09;/TX过滤器配置寄存器过滤器配置寄存器 AGCCTRL1=0 x15;/AGC控制寄存器控制寄存器 FSCAL1=0 x00;/调整频率校准调整频率校准 halRfEnableRxInterrupt();/使能使能RX中断中断 return SUCCESS;void halRfEnableRxInterrupt(void)/enable RXPKTDONE interrupt RFIRQM0|=1 0)if(pRxData0=LIGHT_TOGGLE_CMD)UartTX_Send_String(UartData,17);/向串口发送测试数据向串口发送测试
49、数据 halLedToggle(LED_RED);/改变状态改变状态 Wait(3);halLedToggle(LED_RED);/改变状态改变状态 接收函数(点亮接收函数(点亮LED)49第49页,共84页。发送数据包函数(发送数据包函数(1)uint8 basicRfSendPacket(uint16 destAddr,uint8*pPayload,uint8 length)uint8 mpduLength;uint8 status;if(!txState.receiveOn)/如果没有打开接收机如果没有打开接收机 halRfReceiveOn();length=min(length,BA
50、SIC_RF_MAX_PAYLOAD_SIZE);/包长度包长度 halRfWaitTransceiverReady();/等到收发空闲等到收发空闲 halRfDisableRxInterrupt();/关闭接收帧完成中断避免对关闭接收帧完成中断避免对SPI接口的干扰接口的干扰 mpduLength=basicRfBuildMpdu(destAddr,pPayload,length);halRfWriteTxBuf(txMpdu,mpduLength);halRfEnableRxInterrupt();/打开接收帧打开接收帧ACK接收完成中断接收完成中断 if(halRfTransmit()!