ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:22.65KB ,
资源ID:9242876      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9242876.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CC2530的时钟模块.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CC2530的时钟模块.docx

1、CC2530的时钟模块有两部分:1、CC2530学习之时钟与振荡器分类:CC2530学习杂记2011-10-21 20:091310人阅读评论(3)收藏举报timersystem工作2011年10月21日一、, 时钟、振荡器(1) To use RF transceiver ,the 32MHZ 晶体振荡器 must be selected and stable .(2) CLKCONCMD.OSC bit selects the source of the system clock. 系统时钟可以是 32MHZ 石英振荡器,也可以是16MHZ RC振荡器。(3) 改变CLKCONCMD.OS

2、C bit 并不能导致系统时钟的迅速改变。有两个前提条件:1,CLKCONSTA.OSC = CLKCONCMD.OSC (保持时钟的稳定) 2,CLKCONCMD.CLKSPD bit = 系统时钟。(this is a mirror of the clkconcmd.osc bit ).(4 )CLKCONCMD.TICKSPD 时间片的设置,体现了系统时钟从当前值改变到需要改变为的时钟的快慢。The fastest switching is obtained when CLKCONCMD.TICKSPD 等于000.(5)32KHZ 振荡器 有两个: 32kHZ XOSC 和32KHZ

3、RCOSC. 32K RC0SC 在复位后使能,别选作为32KHZ时钟源,具有较低耗能的特点,但是没有32KHZ X0SC 精确。 32khz 振荡器用来驱动Sleep Timer,产生看门狗时钟的滴答记号,在timer 2 中被用来作为选通脉冲。 只在系统时钟32MHZ XOSC,才启动工作。 刚转换到32KHZ X0SC时,振荡器需要500ms来稳定到准确地频率上。(6))CLKCONCMD.TICKSPD 寄存器控制了一个全局的分频器,作用于-Timer1,Timer3,和Timer4. CLKCONCMD.TICKSPD 的值应该小于系统时钟频率,当CLKCONCMD.TICKSPD大

4、于系统时钟时,CLKCONCMD.TICKSPD 与系统时钟的值相同。(7)振荡器和时钟的控制寄存器:CLKCONCMD 和CLKCONSTA.2、ZigBee研究之旅(四)-CC2530的时钟模块CC2530的时钟模块(cc2530_datasheet节选翻译如下)* 作 者:fulinux* 转载声明:点击链接*1. 振荡器和时钟CC2530设备有一个内部系统时钟,或者主时钟。系统时钟源可以是从16MHz RC振荡器或一个32M晶体振荡器中的一个提供。系统时钟源是由CLKCONCMD SRF控制寄存器。还有一个32KHz的时钟源,来源可以是从RC 振荡器或者32KHz的晶体振荡器中过来,同

5、样是由CLKCONCMD寄存器控制。CLKCONSTA寄存器是一个制度寄存器,用来获得当前系统时钟的状态。时钟源可以在一个精度高的晶体振荡器和一个功耗低的RC振荡器中交替选择使用。注意一点:RF的收发操作是要以32MHz的晶体振荡器为时钟源才行。2. 振荡器图中给出了时钟系统中可用的时钟源的一个全貌图。设备中存在的两个高频振荡器:* 32MHz晶体振荡器* 16MHz的RC振荡器32MHz的晶体振荡器启动时间对于某些应用来说可能太长了;因此设备可以先运行在16MHz的RC振荡器中运行直到晶体振荡器稳定后在使用32MHz晶体振荡器。16MHz的RC振荡器功耗低但是不是很准,所以不能为RF模块提供

6、服务,只能用32MHz的晶体振荡器。设备中存在的两个低频振荡器:* 32 KHz晶体振荡器* 32 KHz RC振荡器32KHz的XOSC被设计的工作频率频率是32.768KHz并且可以为一些要求时钟准确子系统提供一个稳定的时钟信号。32KHz的RCOSC当校准后可以运行在32.753KHz频率下。校准只能发生在当32MHz XOSC使能的情况下,可以通过使能SLEEPCMD.OSC32K_CALDIS位来关闭校准。32KHz RC振荡器相对于32KHz XOSC晶体振荡器功耗低,应该用在可以降低成本情况下。两个振荡器不能同时工作。3. 系统时钟系统时钟是由32MHz XOSC或者16MHz

7、RCOSC两个时钟源驱动的。CLKCONCMD.OSC位用来选择系统时钟源。注意:使用RF模块时,32MHz晶体振荡器必须被选上并且运行稳定。注意:改变CLKCONCMD.OSC位并不能立即导致系统时钟源的改变。当CLKCONSTA.OSC = CLKCONCMD.OSC时时钟源的改变才会发挥作用。这是因为设备在实际改变时钟源之前需要稳定的时钟。还有就是注意CLKCONCMD.CLKSPD位反应着系统时钟频率,因此是CLKACONCMD.OSC位的镜子。一旦32MHz的XOSC被选中和稳定,例如,当CLKCONSTA.OSC位从1切换到0时。注意:从16MHz到32MHz时钟源的改变符合CLK

8、CONCMD.TICKSPD设置。CLKCONCMD.TICKSPD设置的缓慢一些的话,当CLKCONCMD.OSC改变的话会导致实际的时钟源起作用的时间会很长。当CLKCONCMD.TICKSPD等于000时会获得最快的切换速度。4. 32KHz的振荡器默认的或者复位后32KHz RCOSC使能并且被设置作为32KHz的时钟源。其功耗低,但是相对于32KHz晶体振荡器而言精度不高,32KHz时钟源用来驱动睡眠定时器,产生看门狗的滴答值和作为timer 2计算睡眠定时器的一个闸门。32KHz时钟源被寄存器CLKCONCMD.OSC32K位用来作为选择振荡器。CLKCONCMD.OSC32K寄存

9、器可以在任意时间写入,但是在16MHz RC振荡器是活跃的系统时钟源之前是不会起作用的。当系统时钟从16MHz改变为32MHz的晶体振荡器(CLKCONCMD.OSC从1到0)一旦32KHz RC振荡器被选中了它的的校验就启动了并且被执行。在校准期间,32MHz晶体振荡器的一个分频量会被使用。32KHzRCOSC振荡器校准后的结果是它会工作在32.753kHz上。32kHz RC振荡器校准时间可能要2ms时间来完成。可以设置SLEEPCMD.OSC32K_CALDIS位设置为1的话,会关闭校准。在校准结束时,会在32KHz时钟源上产生一个额外的脉冲,会导致睡眠定时器增加1。注意:当切换到32K

10、Hz晶体振荡器后和从32KHz晶体振荡器被设置的PM3模式唤醒时,振荡器稳定到准确频率的时间在500 ms以上。睡眠定时器、看门狗定时器和时钟损失探测器在32KHz晶体振荡器稳定之前不能使用。5. 振荡器和时钟寄存器下面是振荡器和时钟寄存器的描述,所有寄存器的位会在进入PM2和PM3时保持不变,除非有异常情况发生。6. 定时器滴答值产生器CLKCONCMD.TICKSPD寄存器控制timer1、timer3和timer4的全局预分频。预分频的值设置范围在0.25MHz和32MHz之间。需要注意的是如果CLKCONCMD.TICKSPD显示的频率高于系统时钟,则在CLKCONSTA.TICKSP

11、D中的实际的预分频值表明是和系统时钟的值是一样的。7. 数据滞留在PM2和PM3电源模式中,绝大多数的内部电路关闭了,然而,SRAM中任保留它的内容,内部寄存器的值也会保留。保留数据的寄存器是CPU的寄存器、外部寄存器和RF寄存器,除非另一些位域值设置的比较特殊。切换到PM2和PM3模式的现象对于软件而已是透明的。注意在PM3模式下睡眠定时器的值不会保存。* 作 者:fulinux* 转载声明:点击链接,如有不对之处,请指正*/* 文 件 名:main.c* 功 能:实验一 系统时钟源的选择* CC2530有1个内部的系统时钟。时钟源可以是1个16MHz的RC振荡器,也可以是1个32MHz的晶

12、体* 振荡器。时钟控制是通过使用CLKCON特殊功能寄存器来执行的。系统时钟也提供给所有的8051* 外设。* 32MHz晶体振荡器的启动时间对于某些应用而言太长了,因此CC2530可以运行在16MHz RC振荡器* 直到晶体振荡器稳定。16MHz RC振荡器的功耗要少于晶体振荡器,但是由于它没有晶体振荡器* 精确,因此它不适用于射频收发器。* CLKCONCMD.OSC位被用来选择系统时钟源。注意:要使用射频收发器,32MHz晶体振荡器必须被选择* 并且稳定。* 注意:改变CLKCON.OSC位并不即刻生效。这是因为在实际改变时钟源之前,被选择的时钟源要* 首先达到稳定。还要注意:CLKCO

13、NSTA.CLKSPD位将反映系统时钟频率,因此它是CLKCON.OSC位的* “镜子”。* 当SLEEPSTA.XOSC_STB为1时,表示系统报告32MHz晶体振荡器稳定。然而,这可能并不是实际情况, 在选择32MHz时钟作为系统时钟源之前,应该等待一个额外的64us的安全时间,可以通过增加一* 条空指令NOP来实现。如果不等待,可能会造成系统崩溃。* 未被选择作为系统时钟源的振荡器,通过设置SLEEP.OSC_PD为1(默认状态)将被设置为掉电模式。* 因此,当32MHz晶体振荡器被选择作为系统时钟源后,16MHz RC振荡器可能被关闭,反之亦然。* 当SLEEPCMD.OSC_PD为0

14、时,这2个振荡器都被上电并运行。* 当32MHz晶体振荡器被选择作为系统时钟源并且16MHz RC振荡器也被上电时,根据供电电压和运* 行温度,16MHZ RC振荡器将被不断校准以确保时钟稳定。当16MHz RC振荡器被选择作为系统时钟* 源时,该校准不被执行。* 本实验将向用户演示选择不同的振荡器作为系统时钟源。本文件中有led闪烁的子程序,用户* 可以观察在不同系统时钟源下led的闪烁情况。* 在hal.h文件中包含了和系统时钟相关的一些宏,用户使用这些宏可以简化对系统时钟的控制,* 提高代码的可读性,本实验中就使用了其中的一些宏。* 注 意:本实验可在以下目标板上进行:* * * * *

15、 版 本:V1.0* 作 者:wuxianhai* 日 期:2011.2.12* 奥尔斯电子主页:*/#include hal.h#define ON 0x01 /LED状态#define OFF 0x00extern void ctrPCA9554LED(UINT8 led,UINT8 operation); extern void PCA9554ledInit(); /* * 函数名称:halWait * * 功能描述:延时 * * 参 数:wait - 延时时间 * * 返 回 值:无 */void halWait(BYTE wait) UINT32 largeWait; if(wait

16、 = 0) return; largeWait = (UINT16) (wait CLKSPD); while(largeWait-); return;/* * 函数名称:main * * 功能描述:反复选择不同的振荡器作为系统时钟源,并调用led控制程序,闪烁LED灯。 * * 参 数:无 * * 返 回 值:无 */void main(void) UINT8 i; PCA9554ledInit(); while(1) SET_MAIN_CLOCK_SOURCE(CRYSTAL); / 设置系统时钟源为32MHz晶体振荡器(大约用时150us),关闭16MHz RC振荡器 for (i=0;

17、i10;i+) ctrPCA9554LED(0,ON); halWait(200); ctrPCA9554LED(0,OFF); halWait(200); SET_MAIN_CLOCK_SOURCE(RC); / 选择16MHz RC振荡器,关闭32MHz晶体振荡器 PCA9554ledInit(); halWait(200); for (i=0;i10;i+) ctrPCA9554LED(1,ON); halWait(200); ctrPCA9554LED(1,OFF); halWait(200); /* 文 件 名:iic.C* 功 能:实验二 GPIO控制实验* 该实验采用CC2530

18、的I/O口(P1.0和P1.1)模拟IIC总线的SCL和SDA,然后通过IIC总线形式控制GPIO扩展芯片* PCA9554,最后通过扩展的IO来控制LED的亮灭。* 硬件连接:将OURS的CC2530RF模块插入到普通电池板或智能电池板上。* P1.0 - SCL* P1.1 - SDA* * 版 本:V1.0* 作 者:WUXIANHAI* 日 期:2011.1.18* 奥尔斯电子主页:*/#include ioCC2530.h #include hal_mcu.h#define SCL P1_0 /IIC时钟线#define SDA P1_1 /IIC数据线/定义IO方向控制函数#def

19、ine IO_DIR_PORT_PIN(port, pin, dir) do if (dir = IO_OUT) P#port#DIR |= (0x01(pin); else P#port#DIR &= (0x01(pin); while(0)#define OSC_32KHZ 0x00 /使用外部32K晶体振荡器/时钟设置函数#define HAL_BOARD_INIT() uint16 i; SLEEPCMD &= OSC_PD; /* 开启 16MHz RC 和32MHz XOSC */ while (!(SLEEPSTA & XOSC_STB); /* 等待 32MHz XOSC 稳定

20、 */ asm(NOP); for (i=0; i504; i+) asm(NOP); /* 延时63us*/ CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); /* 设置 32MHz XOSC 和 32K 时钟 */ while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ); /* 等待时钟生效*/ SLEEPCMD |= OSC_PD; /* 关闭 16MHz RC */ #define IO_IN 0 /输入#define IO_OUT 1 /输出uint8 ack; /应答标志位uint8 PCA9554le

21、dstate = 0; /所有LED当前状态/* * 函数名称:QWait * * 功能描述:1us的延时 * * 参 数:无 * * 返 回 值:无 */ void QWait() asm(NOP);asm(NOP); asm(NOP);asm(NOP); asm(NOP);asm(NOP); asm(NOP);asm(NOP); asm(NOP);asm(NOP); asm(NOP);/* * 函数名称:Wait * * 功能描述:ms的延时 * * 参 数:ms - 延时时间 * * 返 回 值:无 */ void Wait(unsigned int ms) unsigned char

22、g,k; while(ms) for(g=0;g=167;g+) for(k=0;k=48;k+); ms-; /* * 函数名称:Start_I2c * * 功能描述:启动I2C总线,即发送I2C起始条件. * * 参 数:无 * * 返 回 值:无 */ void Start_I2c() IO_DIR_PORT_PIN(1, 0, IO_OUT); /设置P1.0为输出 IO_DIR_PORT_PIN(1, 1, IO_OUT); /设置P1.1为输出 SDA=1; /*发送起始条件的数据信号*/ asm(NOP); SCL=1; QWait(); /*起始条件建立时间大于4.7us,延时

23、*/ QWait(); QWait(); QWait(); QWait(); SDA=0; /*发送起始信号*/ QWait(); /* 起始条件锁定时间大于4s*/ QWait(); QWait(); QWait(); QWait(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ asm(NOP); asm(NOP);/* * 函数名称:Stop_I2c * * 功能描述:结束I2C总线,即发送I2C结束条件. * * 参 数:无 * * 返 回 值:无 */ void Stop_I2c() IO_DIR_PORT_PIN(1, 0, IO_OUT); /设置P1.0为输出 IO_DIR_PORT_PIN(1, 1, IO_OUT); /设置P1.1为输出 SDA=0; /*发送结束条件的数据信号*/ asm(NOP); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ QWait(); QWait(); QWait(); QWait(); QWait(); SDA=1; /*发送I2C总线结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1