您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > ZigBee学习之22—HAL_BOARD_INIT
#1楼主:【原创】ZigBee学习之22——HAL_BOARD_INIT();文章发表于:2010-02-0816:35HAL_BOARD_INIT();//初始化板子硬件部分//板子初始化函数其实是一个宏,定义在【hal_board_cfg.h】“\”符号其实是编译环境下面的行中断符,表示这一样没有结束,其实是一个“\”。#defineHAL_BOARD_INIT(){\uint16i;\\SLEEP&=~OSC_PD;/*turnon16MHzRCand32MHzXOSC*/\//操作SLEEP寄存器,给16MHz高速振荡器和32M外部晶体振荡上电//【hal_mcu.h】//#defineOSC_PD0x04while(!(SLEEP&XOSC_STB));/*waitfor32MHzXOSCstable*/\asm(NOP);/*chipbugworkaround*/\for(i=0;i504;i++)asm(NOP);/*Require63usdelayforallrevs*/\//SLEEP寄存器中XOSC_STB位设置后还需要等待额外的64us,手册上是这么说的呵CLKCON=(0x00|OSC_32KHZ);/*32MHzXOSC*/\//设置32M和外部32.768K时钟为源while(CLKCON!=(0x00|OSC_32KHZ));\//等待时钟稳定SLEEP|=OSC_PD;/*turnoff16MHzRC*/\//关闭没有用到的时钟源//上面这段用来设置系统时钟,步骤为:所有时钟源上电;等待时钟稳定;延时64us等待确切的稳定;设置系统时钟和32K时钟的时钟源;等待设置完成,关闭没有用到的时钟源。\/*setdirectionforGPIOoutputs*/\LED1_DDR|=LED1_BV;\//【hal_board_cfg.h】//#defineLED1_DDRP1DIR//#defineLED1_BVBV(0)//【hal_defs.h】//#defineBV(n)(1(n));//这是将某位置位的宏LED2_DDR|=LED2_BV;\//【hal_board_cfg.h】//#defineLED2_DDRP1DIR//#defineLED2_BVBV(1)//上面是对板上LED的初始化,完成的操作时将P1_0,P1_1设为输出(因为这两个IO口具有20ma的电流输出能力)!这里是跟硬件紧密相关的,需要根据自己硬件的具体情况来设。我的开发板上加上液晶指示的LED才两个,真是捉襟见肘啊,液晶背光灯接P2_0,调试LED接P1_0。设计的都不是很合理呢。看来在我的开发板上要完全的屏蔽掉LED2呢呵呵。进行相应更改:(这些更改都在文件hal_board_cfg.h中越在line94~100)#defineLED1_POLARITYACTIVE_HIGH#defineLED2_BVBV(0)#defineLED2_SBITP2_0#defineLED2_DDRP2DIR\/*configuretristates*/\P2INP|=PUSH2_BV;\//这是对Joystick的配置,在【hal_board_cfg.h】//#definePUSH2_BVBV(0);这里将Joystick的中心按键的IO设为三态状态,我的板子上没有这个东东哦,所以把Joystick也给屏蔽了,注释掉【hal_board_cfg.h】中约line120的东东\/*configuresoftwarecontrolledperipheralVDD*/\//配置软件控制的外设VDDVDD_SW_DDR|=VDD_SW_BV;\VDD_SW_SBIT=0;\//【hal_board_cfg.h】,这里实际上是将P1_2配置为输出,然后输出一个低电平//貌似我的板子上也用不到这个东西,屏蔽掉//#defineVDD_SW_BVBV(2)//#defineVDD_SW_SBITP1_2//#defineVDD_SW_DDRP1DIR}//好了,以上就是硬件底层的一些初始化工作,主要是配置时钟和一些端口的状态。
本文标题:ZigBee学习之22—HAL_BOARD_INIT
链接地址:https://www.777doc.com/doc-2829774 .html