完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL_BOARD_INIT()分析: 源码: #if defined (HAL_BOARD_CC2530EB_REV17) && !defined (HAL_PA_LNA) && !defined (HAL_PA_LNA_CC2590) #define HAL_BOARD_INIT() { uint16 i; SLEEPCMD &= ~OSC_PD; while (!(SLEEPSTA & XOSC_STB)); asm("NOP"); for (i=0; i<504; i++) asm("NOP"); CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); SLEEPCMD |= OSC_PD; PREFETCH_ENABLE(); LED1_DDR |= LED1_BV; LED2_DDR |= LED2_BV; LED3_DDR |= LED3_BV; P0INP |= PUSH2_BV; } 首选可以知道函数HAL_BOARD_INIT()的定义是有条件的,条件就是定义了HAL_BOARD_CC2530EB_REV17同时没有定义HAL_PA_LNA和HAL_PA_LNA_CC2590(HAL_BOARD_CC2530EB_REV17表示ti官方开发板的版本号),那么函数才会被定义,那么追踪下去我们发现语句如下: #if !defined (HAL_BOARD_CC2530EB_REV17) && !defined (HAL_BOARD_CC2530EB_REV13) #define HAL_BOARD_CC2530EB_REV17 #endif 所以条件成立,函数被定义。 SLEEPCMD &= ~OSC_PD; OSC_PD表示1<<2 SLEEPCMD是CC2530的睡眠模式控制寄存器,OSC_PD= 0x04;取反以后OSC_PD =0xFB也就是SLEEPCMD的第二位为0,SLEEPCMD的第二位在cc2530的技术手册介绍不详细,我们查看2430的技术手册可以知道第二位清零的作用是设置32MHz和16Mhz的晶振都会起振。 while (!(SLEEPSTA & XOSC_STB)); XOSC_STB表示1<<6 同样,CC2530手册里面介绍不是很详细,那么结合2430手册知道第6位XOSC_STB表明外部高速32M晶振是否上电并稳定起振,当稳定时该位为1;同样对于第5位HFRC_STB则表明内部16MHz高速RC振荡器是否起振,并是否稳定,当16MHz RC振荡器稳定时该位为1。等待32MHz的晶振起振平稳,否则会在此处循环等待。 asm("NOP"); for (i=0; i<504; i++) asm("NOP"); NOP延时,一个NOP为一个空操作,时间为一个机器周期。 CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); CLKCONCMD_32MHZ = 0 OSC_32KHZ = 0x80 根据技术手册我们可以知道CLKCONCMD = 0x80,我们可以分析时钟速度32MHz,定时器输出设置32MHz,系统时钟源选择32MHz,选择32KHz的时钟振荡器。 上面是对于时钟的操作。 while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); 循环等待硬件完成前面的操作,完成以后CLKCONSTA 相应的位会返回对应的数值。 SLEEPCMD |= OSC_PD; SLEEPCMD 的含义前面可以看见。 PREFETCH_ENABLE(); 函数宏定义#define PREFETCH_ENABLE() st( FCTL = 0x08; ) FCTL = 0X08表示对于闪存有活跃的写入和擦除操作,其余的0设置对应可以了解响应的功能。 LED1_DDR |= LED1_BV; LED2_DDR |= LED2_BV; LED3_DDR |= LED3_BV; P0INP |= PUSH2_BV; LED1_DDR 、LED2_DDR 和LED3_DDR 表示P1DIR也就是P1端口的方向寄存器: 而LED1_BV、LED2_BV和LED3_BV表示P1.0、P1.1、P1.4设置为输出模式,对应分别是绿、红、黄三灯,这三个led在官方开发板上面分别对应了不同的指示功能。 P0INP |= PUSH2_BV; PUSH2_BV = 1<<0 表示P0.0为上拉/下拉输入模式 对于IO口的设置响应的作用可以去官方查找响应的手册了解。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3257 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3904 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3411 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
3964 浏览 1 评论
20603 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
740浏览 2评论
924浏览 2评论
954浏览 1评论
1079浏览 1评论
359浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 01:12 , Processed in 0.839625 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号