- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZigBee学习之22——_HAL_BOARD_INIT()
ZigBee 22——HAL_BOARD_INIT()
ZigBee 22——HAL_BOARD_INIT()
ZZiiggBBeeee学习之2222————HHAALL__BBOOAARRDD__IINNIITT(())
HAL_BOARD_INIT();//初始化板子硬件部分
//板子初始化函数其实是一个宏,定义在【hal_board_cfg.h】“\”符
号其实是编译环境下面的行中断符,表示这一样没有结束,其实是一个“\”。
#define HAL_BOARD_INIT() { \
uint16 i; \
\
SLEEP = ~OSC_PD; /* turn on 16MHz RC and 32MHz XOSC
*/\
//操作SLEEP寄存器,给16MHz高速振荡器和32M外部晶体振荡上电
//【hal_mcu.h】
//#define OSC_PD 0x04
while (!(SLEEP XOSC_STB)); /* wait for 32MHz XOSC stable
*/\
asm(NOP); /* chip bug workaround */\
for (i=0; i504; i++) asm(NOP); /* Require 63us delay for all
revs */\
// SLEEP寄存器中XOSC_STB位设置后还需要等待额外的64us,手
册上是这么说的呵
CLKCON = (0x00 | OSC_32KHZ); /* 32MHz XOSC */\
//设置32M和外部32.768K 时钟为源
while (CLKCON != (0x00 | OSC_32KHZ)); \
//等待时钟稳定
SLEEP |= OSC_PD; /* turn off 16MHz RC */\
//关闭没有用到的时钟源
//上面这段用来设置系统时钟,步骤为:所有时钟源上电;等待时钟稳
定;延时64us等待确切的稳定;设置系统时钟和32K时钟的时钟源;等
待设置完成,关闭没有用到的时钟源。 \
/* set direction for GPIO outputs */ \
LED1_DDR |= LED1_BV; \
// hal_board_cfg.h
【 】
// #define LED1_DDR P1DIR
// #define LED1_BV BV(0)
//【hal_defs.h】
// #define BV(n) (1 (n));//这是将某位置位的宏
LED2_DDR |= LED2_BV; \
//【hal_board_cfg.h】
// #define LED2_DDR P1DIR
//#define LED2_BV BV(1)
//上面是对板上LED 的初始化,完成的操作时将P1_0,P1_1 设为输出(因为这两个
IO口具有20ma 的电流输出能力)!这里是跟硬件紧密相关的,需要根据自己硬件的具体
情况来设。我的开发板上加上液晶指示的LED 才两个,真是捉襟见肘啊,液晶背光灯接P
2_0,调试LED接P1_0。设计的都不是很合理呢。看来在我的开发板上要完全的屏蔽掉L
ED2 呢呵呵。进行相应更改:(这些更改都在文件hal_board_cfg.h 中越在line94~100)
#define LED1_POLARITY ACTIVE_HIGH
#define LED2_BV BV(0)
#define LED2_SBIT P2_0
#define LED2_DDR P2DIR
\
/* configure tristates */ \
P2INP |= PUSH2_BV; \
//这是对Joystick的配置,在【hal_board_cfg.h】
//#define PUSH2_BV BV(0); Joystick
文档评论(0)