ZigBeeLED设备启动流程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ZigBeeLED设备启动流程
ZigBee LED设备启动流程及按键机制一.先对LED引脚进行相关配置,主要在两个文件中修改(hal_board_cfg.h ,Hal_led.h )hal_board_cfg.h
定义我们三个LED的引脚配置分别是 P1_0 P1_1 P0_4 , 低电平有效。

/* 1 - Green */
#define LED1_BV BV(0)
#define LED1_SBI T P1_0
#define LED1_DDR P1DIR
#define LED1_POLARITY ACTIVE_LOW
/* 2 - Red */
#define LED2_BV BV(1)
#define LED2_SBIT P1_1
#define LED2_DDR P1DIR
#define LED2_POLARITY ACTI VE_LOW
/* 3 - Yellow */
#define LED3_BV BV(4)
#define LED3_SBIT P0_4
#define LED3_DDR P0DIR
#define LED3_POLARITY ACTI VE_LOW
在HAL_BOARD_INI T将三个LED引脚配置为输出
#define HAL_BOARD_INIT()
{
……………..
设置LED1 LED2 LED3 引脚为输出
LED1_DDR |= LED1_BV;
LED2_DDR |= LED2_BV;
LED3_DDR |= LED3_BV;
}
/* ----------- LED's ---------- */
#define HAL_TURN_OFF_LED1() st( LED1_SBI T = LED1_POLARITY (0); ) //关灯
#define HAL_TURN_ON_LED1() st( LED1_SBI T = LED1_POLARITY (1); ) //开灯
#define HAL_TOGGLE_LED1() st( if (LED1_SBIT) { LED1_SBIT = 0; } else { LED1_SBI T = 1;} ) //取反
#define HAL_STATE_LED1() (LED1_POLARITY (LED1_SBI T)) //获取状态
Hal_led.h
定义了3个LED
/* LEDS - The LED number is the same as the bit position */ #define HAL_LED_1 0x01
#define HAL_LED_2 0x02
#define HAL_LED_3 0x04
#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3) /* Modes 定义了LED的一些模式*/
#define HAL_LED_MODE_OFF 0x00
#define HAL_LED_MODE_ON 0x01
#define HAL_LED_MODE_BLINK 0x02
#define HAL_LED_MODE_FLASH 0x04
#define HAL_LED_MODE_TOGGLE 0x08
/* Defaults 定义了一些LED的控制模式*/
#define HAL_LED_DEFAULT_MAX_LEDS 4
#define HAL_LED_DEFAULT_DUTY_CYCLE 5
#define HAL_LED_DEFAULT_FLASH_COUNT 50
#define HAL_LED_DEFAULT_FLASH_TIME 1000
二、初始化LED灯
可以看到main()函数进来,后HAL_BOARD_INIT()进行了系统时
钟的初始化,还将LED灯配置为输出状态。

Main() --> osal_int_disable( INTS_ALL ) --> HAL_BOARD_INIT() --> zmain_vdd_check() --> InitBoard( OB_COLD )
InitBoard()在main()主函数被调用两次,两次传入的参数不同。

第一次传入的是OB_COLD 进行LED灯的初始化。

第二次传入的参数是OB_READY 则对按键进行初始化。

这里传入的是OB_COLD。

void InitBoard( uint8 level )
{
if ( level == OB_COLD ) //LED初始化
{
// Interrupts off
osal_int_disable( INTS_ALL ); //关闭所以的中断
// Turn all LEDs off
HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF ); //关闭所以的LED
// Check for Brown-Out reset
ChkReset();
}
else // !OB_COLD //按键初始化
{
/* Initialize Key stuff */
OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
}
}
Main() --> osal_int_disable( INTS_ALL ) --> HAL_BOARD_INIT() --> zmain_vdd_check() --> InitBoard( OB_COLD ) --> HalDriverInit() 。

void HalDriverInit (void) //初始化芯片各硬件模块
{
…………………………..
/* LED */
#if (defined HAL_LED) && (HAL_LED == TRUE)
HalLedInit();
#endif
}
void HalLedInit (void)
{
#if (HAL_LED == TRUE)
/* Initialize all LEDs to OFF */
HalLedSet (HAL_LED_ALL, HAL_LED_MODE_OFF); //关闭所以的LED
#endif /* HAL_LED */
#ifdef BLINK_LEDS
/* Initialize sleepActive to FALSE */
HalLedStatusControl.sleepActive = FALSE;
#endif
}
四、按键的定义,主要在(hal_board_cfg.h Hal_key.h)
hal_board_cfg.h
/* S1 定义按键一,引脚在P0_1*/
#define PUSH1_BV BV(1)
#define PUSH1_SBIT P0_1
#define PUSH1_POLARITY ACTIVE_LOW //低电平有效
#define HAL_BOARD_INIT()
{
…………………………….
P0INP |= PUSH2_BV; //配置为三态
}
/* ----------- Push Buttons ---------- */
#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBI T)) //按键一被按下
Hal_key.c
/* Interrupt option - Enable or disable */
#define HAL_KEY_INTERRUPT_DISABLE 0x00 //定义禁止中断#define HAL_KEY_INTERRUPT_ENABLE 0x01 //定义使能中断#define HAL_KEY_SW_6 0x20 // Button S1 if available //定义按键
五.按键的初始化
可以看到main()函数进来,后HAL_BOARD_INIT()将按键配置了三态。

Main() --> osal_int_disable( INTS_ALL ) --> HAL_BOARD_INIT() --> zmain_vdd_check() --> InitBoard( OB_COLD ) --> HalDriverInit() 。

Void HalDriverInit(void)
{
……………………………………
/* KEY */
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
HalKeyInit();
#endif
}
void HalKeyInit( void )
{
/* Initialize previous key to 0 */
halKeySavedKeys = 0; // 用来保存按键值的
/* PXSEL:[1: 外设, 0:IO] PXDIR:[1:输出 , 0:输入] */
HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT); /* P0SEL &= ~(1<<1); 设置P0_1为通用I O口HAL_KEY_SW_6_DIR &=
~(HAL_KEY_SW_6_BI T); /* P0DIR &= ~(1<<1); 设置P0_1为输入模式*/
/* pHalKeyProcessFunction 为指向按键处理函数的指针,当有按键按下时调用按键处理函数对按键进行处理,初始化时将其初始化为NULL,在按键的配置函数中对其进行配置; */
pHalKeyProcessFunction = NULL;
/* Start with key is not configured */
/* 用来标示按键是否被配置 */
HalKeyConfigured = FALSE;
}
这里注意三个全局变量halKeySavedKeys = 0 pHalKeyProcessFunction = NULL; HalKeyConfigured = FALSE;
Main() --> osal_int_disable( INTS_ALL ) --> HAL_BOARD_INIT() --> zmain_vdd_check() --> InitBoard( OB_COLD ) --> HalDriverInit() --> osal_nv_init( NULL ) --> ZMacInit() -->
zmain_ext_addr() --> zgInit() --> osal_init_system() --> osal_int_enable( INTS_ALL ) --> InitBoard( OB_READY )。

相关文档
最新文档