CC2530
2017-01-14 10:14:23 7 举报
AI智能生成
zigbee cc2530 datasheet
作者其他创作
大纲/内容
CPU和内存
CPU
单周期增强型51内核
总线
SFR、DATA、CODE/XDATA总线
内存
内存仲裁器
四个存储空间
三个物理储存器
中断控制器
18个中断源、分为6个组管理,每个中断源都可以使能和失能
具体
中断源
中断优先级
6个组,每个组3个中断源,通过配置IP1和IP0确定每一组的中断等级,中断等级只有有4个
例如:我希望定时器1中断(不管是溢出还是其他中断)的优先级为极高
T1在组1,最高级别中断,因此 IP1 |= 1<<1;IP0 |=1<<1;
IP0 和IP1图片
分组图片
使能中断的步骤
(0)清空中断标志位【而且记得在中断服务函数中也要清空标志位】
(1)设置外设的SFR希望的中断使能位
(2)设置总中断寄存器(IEN0、IEN1、IEN2)对应的位
(3)设置总中断位EA
注意:外设的中断总标志位和外设子中断标志位都要在中断服务函数中清除,否则会不断进入中断函数无法退出
时钟和电源
电源管理功能
5种运行模式
主动模式
完全正常工作模式,稳压器的数字内核开启,高频振荡器(16M/32M)开启,低频振荡器RCOSC/XOSC(32K)开启
空闲模式
CPU内核停止,其他与主动模式一样,外设正常工作,任何中断均能唤醒CPU内核,从空闲转为主动
PM1
稳压器数字内核开启,32 MHz XOSC和 16 MHz RCOSC都不运行,低频振荡器开启,复位,外部中断或睡眠定时器过期将唤醒(转达主动模式),睡眠时间小于3ms,建议使用PM1
PM2
稳压器数字内核关闭,其余和PM1一样,睡眠时间超过3ms,使用PM2或PM3
PM3
获得最低功耗,稳压器数字内核关闭,高频和低频振荡器关闭,复位和外部IO中断均能唤醒(回到主动模式),睡眠时间超过3ms使用PM2/PM3,外部中断唤醒从进入PM3的地方开始执行程序,而复位回到程序执行的开始,RAM内容只能保存部分
PM2和PM3注意
当在这两种模式下,电压降至1.4V,温度达到70度以上,会重新进入主动模式调压,设计电路时应当避免这种情况的发生
在进入PM3前,系统时钟应当转入16MHZ RCOSC,并且禁止时钟丢失探测器,当唤醒后,应当开启时钟丢失探测器,并换到32MHZ时钟
时钟
系统主时钟
主时钟图(含注释)
改变时钟前必须有稳定的时钟,即判断时钟状态寄存器的相关位,判断是否稳定(注意,当时钟变为32MHZ,当状态寄存器从1变为0,表示32MHZ时钟已稳定,也表示16MHZ已经校准好,可以执行32M到16的转换)
睡眠定时器和看门狗时钟
副时钟图(含注释)
子主题
上电/复位,默认失能32K RC振荡电路作为低频时钟源
时钟状态
时钟状态寄存器
通过读取该寄存器了解时钟状态
数据保留
PM1模式下,所有的寄存器的值都得到保留(内部和外围)
PM2 PM3模式下,SRAM内容保留,所有内部的寄存器值得到保留,除了AES IIC USB TR0等外围器件的寄存器之外,其他外围寄存器值均得到保留,另外,值得注意的是,PM3模式下,睡眠定时器的寄存器值不能保留(丢失)。
复位
5个复位源
RESET引脚强制拉低(按键复位)
上电复位(power Onreset POR)
布朗输出复位
BrownOut Detector BOD,它能检测电压的大小,当电压低于1.8V,存储器就不能正常工作,BOD就会复位设备,直至电压高于1.8V
看门狗时钟复位
待补充
时钟丢失复位
有时钟丢失探测器(Clock Loss Detector CLD),使能CLD(CLD.EN位)后,它会不断检测,当外部两个晶振其中之一停止(一般是晶振损坏或其支持电路损坏),就会产生一个时钟丢失中断,通过最大超时量可判断哪个晶振出问题,复位后,默认使用内部RC振荡器作为时钟。
开启了CLD,可以只使用外部32MHZ晶振所有系统时钟,而低频时钟可以选择内部RC振荡器
复位状态寄存器位SLEEPSTA.RST读出最后一次复位的原因
值得注意的是:当BOD引起复位,该位读出的的数据是POR(上电)复位
复位后的初始状态
IO引脚被配置为带上拉输入(P1.0 P1.1是输入,但没有上下拉)
程序计数器定位在0x0000,程序在这个位置开始执行
所有外设寄存器被初始化为各自复位值
看门狗定时器禁用
时钟丢失探测器被禁用
外设
闪存控制器
闪存特性
大小高达256KB;4字节写入;页面擦除;页面擦除时间为20ms,芯片擦除时间为200ms;4字节写入时间为20us
可锁位,用于写入保护和代码安全
闪存组织
大小:256KB 页数:128页 每页大小: 2KB
寻址宽度:16位 最小写入单位:4字节(2^16 * 4 =256KB) 最小擦除单位:1页(2KB)
注意:CPU能字节寻址,闪存控制器(即用户控制)只能4字节寻址
闪存写
要点
1:必须擦除才能写;只能写0,写1无效;写操作期间,不能进入PM1 2 3,不能改变系统时钟
2.通常使用两种方式写闪存,首选DMA传输,其二是让CPU运行SRAM的代码,因为不能同时从闪存去代码和写数据
3.写的过程中,FCTL.WRITE位保持高电平
步骤:
1.擦除页面
2.设置起始地址
3.禁止总中断,开启写操作,通过状态位判断写完毕
4.写完成,开总中断
闪存页面擦除
要点
单位为1页,使每一位都为1,可用过FCTL.BUSY判断擦除是否完成;
写操作执行前必须执行擦除(因为如果空间数据不是0xff,是无法写入的);
擦除的时候,不能进入PM1,2,3,不能改变系统时钟源,不能进入其他中断(否则有可能超时20ms);
看门狗定时器时长应当设置大于20ms,防止擦除页的时候被狗咬(即看门狗复位);
步骤
1.关闭总中断(EA=0)
2.判断闪存控制器是否忙(FCTL.BUSY位)
3.写入要擦除的页面(FADDRH寄存器),并启动擦除操作(FCTL.ERASE)
4.通过检测闪存控制器是否忙判断擦除是否已完成(FCTL.BUSY)
5.开启总中断
闪存DMA触发
要点
1.FWDATA为目标地址
2.先配置好DMA(传输数据大小,数据宽度,触发源为FLASH等)
3.置位FCTl.WRITE可触发DMA传输
4.配置好DMA的中断等级,要求高中断等级,防止被中断,写操作超时导致写FLASH失败
5.可以禁止总中断?写完再开启总中断?
闪存控制器寄存器
IO端口
特性描述
共21个通用引脚;输入口具有上拉、下拉和三态功能;每个引脚都可配置为外部中断引脚;可配置为通用引脚和外设引脚
通用IO
中断
注意:当配置了引脚外部中断时,无论引脚配置为外设还是通用引脚,仍会触发中断。【意思是:当引脚配置为外设,请关闭引脚外部中断】
配置中断引脚一般操作
开启引脚中断
设置触发中断的跳变方向(上升还是下降)
开启端口中断
开启总中断
寄存器表(图)
子中断开关(外设子开关)
端口开关(外设总开关)
端口开关(外设总开关)
总中断开关
注意:一旦进入中断服务函数,外设总中断标志位自动被清空,而外设子中断标志位要软件清空
特殊引脚项
【ADC】当引脚设置为模拟输入(即使用ADC,只有P0端口的8个引脚能作为通道),P2.0可作为AD转换的触发源,此时P2.0必须被设置为通用引脚(即不能设置为外设引脚)
【掉电信号MUX】可以配置向任意一个P0引脚输出用户所选择的32KHZ低频时钟(即32K外部晶振或者32K内部RC振荡),此时,该引脚的其他设置会被覆盖(即无效)。除了PM3模式(该模式下所有时钟都停止)下,配置输出后,任何模式下都会输出时钟信号;
【掉电信号MUX】另外,可设置任意P1引脚输出数字稳压器的状态(稳压器上电则输出1,掉电则输出0),配置后,该引脚其他配置会被覆盖
【调试引脚】调试需要两个引脚,一个是P2.2 一个是P2.1,调试时,这两个引脚不能被设置上下拉
【外部低频时钟引脚】P2.3和P2.4接有32KHZ外部时钟,当系统选用该时钟(而不选用内部32K RC振荡)不管这连个引脚配置如何,都不会影响到该时钟的使用(不知道外部电路的存在会不会影响到这两个引脚作为通用引脚的功能)
杂项
共三个端口P0、P1、P2,都可以位寻址;
P1.1和P1.0具有20ma的电流输出能力,其他引脚有4ma电流输出能力
输入模式下,引脚可设置为上拉,下拉或者三态
PM1、PM2和PM3模式下,IO寄存器值得到保存,所以唤醒后也不需要重新配置寄存器
复位后,模式所有引脚为数字输入输出(不是模拟或者外设),均带上拉(除了P1.0和P1.1)
对于外设,即使是一个输入的引脚,也没有上下拉的功能
未使用引脚:复位后P1.0和P1.1外,其他引脚默认上拉,注意引脚不能悬空,也不能接VCC和GND,防止涓细电流导致的功耗
IO使用步骤
通用IO
配置引脚功能(通用/外设PxSEL )、配置引脚方向(输入/输出)、配置引脚输入模式(上拉,下拉,三态)
作为模拟输入引脚
配置APCFG即可(设置哪个引脚是模拟输入引脚)
作为外设
配置引脚的功能(通用/外设)、配置外设备用位置(因为有几个外设可映射到不同的引脚)、配置外设的优先级(当有两个或以上外设占用同一个引脚,应当配置优先级)
作为中断引脚
配置中断边沿(是上升沿触发还是下降沿触发)、配置中断使能位、清空中断标志位
其他
输出系统低频时钟
配置PMUX寄存器即可
在更换引脚输出前:清空PMUX高5位;设置输出(PMUX);打开输出开关(PMUX)
输出数字稳压器状态
配置PMUX寄存器即可
定时器/计数器
定时器1
特性
定时器1拥有5个通道,可同时输出5路PWM 备用位置1:P0.2 - P0.6 备用位置2:P1.2 P1.1 P1.0 P1.6 P1.7
具有三种主模式,多种子模式,主模式包括自由运行、模、正倒计数
有两个分频器
说明
主分频器选择了定时器的时钟,最高不能超过32M/16M(取决于系统高频时钟的选择),当32M时钟设为系统时钟时,最低可128*128分频,即最低时钟频率为32M/(128*128)=1953.125HZ,16MHZ时钟因为使用RC振荡,不准确
主分频器
CLKCON.TICKSPD 定义,可1 2 4 8 16 32 64 128分频
子分频器
T1CTL.DIV定义,可1 8 32 128分频
每一通道都有中断
可DMA触发
主模式
自由运行模式
示图
说明:循环从0计数到0xffff,在0xffff可触发中断
模模式
示图
说明:从0计数T1CC0,在T1CC0可触发中断
正/倒计数模式
示图
说明:从0计数到T1CC0,从T1CC0下达到0,在0处触发中断
子模式
说明:子模式应该可依附任何一个主模式(即设置主模式后,再设置一个子模式),可以单纯主模式,不设置子模式
输入捕获模式
设置主模式为自由运行模式,然后子模式设置为输入捕获模式,这样可能比较方便计算
若一个通道设置为输入捕获模式,则该通道对应引脚应该设置为外设功能、输入
任何边沿都可以捕捉,捕获值从T1CCx读出,捕获应该配合中断使用
使用思路:配置引脚、配置定时器、配置中断(需要捕获中断和溢出中断)、设置上升沿捕获,在中断函数中获取捕获值并设置为下降沿捕获,第二次进入中断,判断是溢出中断还是捕获中断,做出相应操作,结合时钟,即可计算出脉冲的宽度。
使用步骤(捕获脉冲的宽度)
输出比较模式
说明:当计数器和通道寄存器T1CCn的值相等,则发生一个输出比较事件,输出引脚会依据T1CCTLn:CMP的设置而set/reset/toggle
T1CCTLn:CMP有3位,确定了7中引脚模式,不同的主模式下,这7中子子模式输出的波形不相同【务必参考英文datasheet108-110页】
T1CCTLn:CMP 有3位,确定7种模式和确定一种初始化,当吧这三位设为111,即可初始化对应通道的引脚 这个初始化应该是重要的,在应用中应当先初始化,在选择7种模式其1.
子主题
选择输出比较,应当配合对应的引脚为外设功能、方向位输出
定时器中断
计数器达到最终计数值中断你(溢出或回到0)
自由运行下,到达0xffff时;三种情况下
模模式下,到达T1CC0时;
正倒计数模式下,计数到0时;
(每个通道)输入捕获时事件
(每个通道)输出比较事件
具体到哪个中断需要读取T1STAT寄存器
IR调制
待补充
作为DMA触发源(与T1有关的有3个)
通道0输出比较事件
通道1输出比较事件
通道2输出比较事件
杂项
可作为数组访问定时器1的寄存器吗,因为5个捕获/比较控制寄存器映射到连续的地址(0x60a0-0x62a4),而16位捕获/比较值映射到0x62a6-0x62af,这使得可以通过数组结构方便地,连续地访问这些寄存器
输入捕获引脚可以用作外部中断引脚
例:使用自由运行模式,中断处理步骤
1、配置32MHZ时钟(在同一个寄存器配置定时器主分频器),并通过状态寄存器判断时钟是否已经稳定
2、配置定时器通道的引脚,外设功能,并配置外设优先级(防止多个外设共同占用同一个引脚)
3、定时器中断,一方面,清空有关定时器的中断标志位(在系统中断寄存器中,在定时器中断相关寄存器中),一方面在系统中断中使能定时器中断,并配置好中断优先级,一方面在定时器寄存器中使能中断
4、配置定时器1,主要是配置子分频系数
5.中断服务函数中,清空两个或更多中断标志位
相关寄存器:CLKCONCMD:设置系统主时钟和定时器时钟 CLKCONSTA:时钟状态,可判断时钟是否稳定 PERCFG:设置外设的备用位置 PnSEL:设置端口的功能(外设或通用) P2DIR:设置外设优先级 IENn:中断使能位 IRCONn:中断标志位 IPn:配置中断优先级 T1CTL:定时器子分频、定时器子分频和定时器开关 T1CCTLn:可设置定时器通道n中断屏蔽 T1STAT:定时器1的中断标志位
定时器3、定时器4
特性
两路捕获/比较通道 timer3:
备用位置1 P1.3 P1.4
备用位置2 P1.6 P1.7
timer4:
备用位置1 P1.0 P1.1
备用位置2 P2.0 P2.3
有主分频器和子分频器:分频系数为1 2 4 8 16 32 64 128
每个通道都可以发出中断请求
有DMA触发功能,两个定时器的通道的输入和捕获都能触发DMA
四种主模式:自由运行模式、倒计数模式、模模式、正倒计数模式,通道模式有捕获和比较
主模式和通道模式参考定时器1,原理一样
睡眠定时器
特性
24位定时器,正计数器,运行频率为32KHZ(内部或者外部时钟);
【重要】用于设置系统进入和退出低功耗睡眠模式的周期,24位比较器,具有功能
【重要】用于当进入低功耗睡眠模式时,维持定时器2的定时
具有DMA功能、具有24位捕获功能
定时器比较功能
睡眠定时器依靠此功能唤醒PM1和PM2模式下的设备(PM3下32K时钟关闭)
定时器比较步骤
等待STLOAD.LDRDY=1,即定时器没有在加载
先写ST2 ST1 最后写ST0,写ST0后自动初始化定时器
开启中断,在IEN0.STIE,中断标志位为:IRCON.STIF
定时器捕获功能
睡眠定时器捕获功能应该用得不多
ADC
特性
1.可选择分辨率(7-12位),不同分辨率对应不同的转换速度
2.8个独立通道,可选择单端输入或者【强大】差分输入
3、参考电压
内部生成的电压(默认值/复位值)
AIN7上外部参考电压
AVDD5上电压
【强大】AIN6-AIN7上的差分电压
4.序列转换结束有DMA 触发
5.转换的模式有:单个ADC转换、序列ADC转换(其中序列ADC转换必须使用DMA,否则数据会丢失)
6.具有温度传感器输入通道,可测量芯片内部温度
7.具有电池测量功能(datasheet并没有具体说明使用的方法)
8.中断,单个ADC转换会触发中断,ADC序列转化不会触发中断
转换模式
单个ADC转换(主要配置ADCCON3、ADCCON1)
在ADCCON3中配置参考电压、抽取率(分辨率)、转换通道
还应该配置对应的引脚为模拟输入功能
序列ADC转换(主要配置ADCCON2、ADCCON1)
在ADCCON2中配置参考电压、抽取率(分辨率)、转换通道
序列转换必须结合DMA使用
例如:写3(0<=3<8)进ADCCON.SCH,则先转换通道0(P1.0),然后通道1,通道2,再到通道3(P1.3)
再如:写9(8<=9<12)进ADCCON.SCH,则先转换差分通道(P1.0-P1.1),然后转换(P1.2-P1.3);
又如:写14(12<=13<=16)进ADCCON.SCH,则只转换温度传感器这一通道
ADC重要寄存器
ADCH:ADCL
存放转换结果的寄存器(放在MSB)
一般在单次转换模式下使用,序列转化使用DMA
先判断EOC(end of convert),再读出该寄存器的值
ADCCON1
该寄存器可配置触发事件,可以软件触发ADC
通过判断EOC位确定单次转换是否完成
ADCCON2
配置ADC序列转换的参考电压、分辨率、序列通道
ADCCON3
配置ADC单次的参考电压、分辨率、序列通道
注意事项:
1、ADC只能运行在32MHZX OSC上,所以要求先配置时钟,再打开ADC
2、单个ADC转换会触发中断,ADC序列转换不会触发ADC
3、单个ADC转换不会触发DMA,序列ADC转换会触发DMA
使用大致步骤(以单次ADC转换为例)
1.配置时钟
32M外部时钟
判断时钟稳定
2.配置引脚(模拟输入)
3.配置中断
TCON.ADCIF
配置中断优先级
4.配置ADC
ADCCON3,通道,分辨率,参考电压
ADCCON1,配置ADC启动事件,可配置软件触发
5.开总中断(EA)软件触发ADC/其他触发方式
6.在中断服务函数中读取ADC结果,并清空中断标志
看门狗定时器
用途
用于受到电气噪声、电源故障、静电放电等影响的应用或者需要高可靠性的环境
也可用作一个定时器,但这个定时器定时间隔只有4个值(定时间隔也可通过软件设置为这4个值的倍数)
特点
1.四个可选间隔1s/0.25s/15.625ms/1.9ms(精准度取决于时钟)
2.两种模式,看门狗模式和定时器模式
3.时钟可以选择32K Xosc和32Krcosc(不准确,但低耗,可满足看门狗要求)
看门狗模式
1.设置WDCTL,MODE[1:0]进入看门狗模式
2.一旦使能了看门狗,就不能禁止它,定时喂狗,否则会复位
3.喂狗操作:可以开其他定时器,然后在定时器中断中喂狗,先写0xa到WDCTL.CLR[3:0],后写0x5即可喂狗
注意:看门狗模式下,不会产生中断请求;复位后,看门狗默认是被禁止的
定时器模式
1.设置WDCTL,MODE[1:0]进入定时器模式
2.通过写WDCTL,MODE[1:0]可停止定时器,并清除它为0
3.可产生中断,不会产生复位
UART/SPI
说明
cc2530有两个USART,它们能够分别运行于异步UART模式和SPI模式,两个USART具有同样的功能,它们是独立的
UART模式
特点
8位/9位负载数据
奇、偶校验/无奇偶校验
可配置起始位和停止位
可配置LSB或者MSB首先传送
收中断、发中断、收DMA、发DMA,均独立
奇偶校验、帧出错状态
全双工传送
UART发送
当字节写入UxBUF,就开始传输,传输时,UxCSR.ACTIVE处于高电平
当传输结束UxCSR_TX_BYTE位置被置1,(可作传输一个字节结束标志位),然后UxDBUF就绪,准备接收下一个数据,这时产生一个中断(发送可以不使能中断,只需判断UxCSR_TX_BYTE位)
UART接收
当置UxCSR.RE=1时,UART接收就开始,此时UxCSR_ACTIVE处于高电平
接收到一个数据后,UxCSR_RX_BYTE置1(接收到数据标志位,可轮询该位检查而不在中断中处理);收到的字节放进UxDBUF,并产生一个中断,在中断中应该清空中断标志位(注意不要清空UxCSR.RX_BYTE)并读UxDBUF(读该寄存器硬件将UxCSR_RX_BYTE清空),
注意:不要软件清空UxCSR_RX_BYTE
波特率产生
说明:当UART模式下,内部波特率发生器设置了UART波特率;当运行在SPI模式下,内部波特率发生器设置了SPI主时钟频率
通过设置UxBAUD.BAUD_M和UxGCR.BAUD_E设置波特率【datasheet有波特率计算公式】
USART中断
2个独立的UART,接收、发送中断使能位,标志位均独立
USART DMA触发
其中事件RX和TX完成可触发DMA
UART特征格式
奇偶校验(要设置三个寄存器)
如果奇偶校验出错,UxCSR.ERR为设置为高电平
停止位
停止位可设置为1位和两位
当核对停止位出错时,会发错帧出错信号,UxUCR.SPB被设置为1
SPI模式
无线电
持续更新
0 条评论
下一页