原创 【原创】ZigBee学习之22—— HAL_BOARD_INIT();

2010-2-8 16:33 3865 7 7 分类: MCU/ 嵌入式

  HAL_BOARD_INIT();//初始化板子硬件部分<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


        //板子初始化函数其实是一个宏,定义在【hal_board_cfg.h】“\”符号其实是编译环境下面的行中断符,表示这一样没有结束,其实是一个“\”。


#define HAL_BOARD_INIT() {                                       \


  uint16 i;                                                      \


                                                                 \


  SLEEP &= ~OSC_PD;         /* turn on 16MHz RC and 32MHz XOSC */\


//操作SLEEP寄存器,给16MHz高速振荡器和<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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; i<504; 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_0P1_1设为输出(因为这两个IO口具有20ma的电流输出能力)!这里是跟硬件紧密相关的,需要根据自己硬件的具体情况来设。我的开发板上加上液晶指示的LED才两个,真是捉襟见肘啊,液晶背光灯接P2_0,调试LEDP1_0。设计的都不是很合理呢。看来在我的开发板上要完全的屏蔽掉LED2呢呵呵。进行相应更改:(这些更改都在文件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的中心按键的IO设为三态状态,我的板子上没有这个东东哦,所以把Joystick也给屏蔽了,注释掉【hal_board_cfg.h】中约line120的东东


                                                                 \


  /* configure software controlled peripheral VDD */             \


//配置软件控制的外设VDD


  VDD_SW_DDR |= VDD_SW_BV;                                       \


  VDD_SW_SBIT = 0;                                               \


//hal_board_cfg.h】,这里实际上是将P1_2配置为输出,然后输出一个低电平


//貌似我的板子上也用不到这个东西,屏蔽掉


//#define VDD_SW_BV         BV(2)


//#define VDD_SW_SBIT       P1_2


//#define VDD_SW_DDR        P1DIR


}


//好了,以上就是硬件底层的一些初始化工作,主要是配置时钟和一些端口的状态。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条