Zigbee 之SerialApp HalDriverInit()
来源:互联网 发布:mac win10截屏快捷键 编辑:程序博客网 时间:2024/04/30 05:51
HalDriverInit();
1、
/************************************************************************************************** * @fn Hal_DriverInit * * @brief Initialize HW - These need to be initialized before anyone. * * @param task_id - Hal TaskId * * @return None **************************************************************************************************/void HalDriverInit (void){ /* TIMER */#if (defined HAL_TIMER) && (HAL_TIMER == TRUE) #error "The hal timer driver module is removed."#endif /* ADC */#if (defined HAL_ADC) && (HAL_ADC == TRUE) HalAdcInit();#endif /* DMA */#if (defined HAL_DMA) && (HAL_DMA == TRUE) // Must be called before the init call to any module that uses DMA. HalDmaInit();#endif /* AES */#if (defined HAL_AES) && (HAL_AES == TRUE) HalAesInit();#endif /* LCD */#if (defined HAL_LCD) && (HAL_LCD == TRUE) HalLcdInit();#endif /* LED */#if (defined HAL_LED) && (HAL_LED == TRUE) HalLedInit();#endif /* UART */#if (defined HAL_UART) && (HAL_UART == TRUE) HalUARTInit();#endif /* KEY */#if (defined HAL_KEY) && (HAL_KEY == TRUE) HalKeyInit();#endif /* SPI */#if (defined HAL_SPI) && (HAL_SPI == TRUE) HalSpiInit();#endif /* HID */#if (defined HAL_HID) && (HAL_HID == TRUE) usbHidInit();#endif}
2、HalAdcInit();
void HalAdcInit (void){#if (HAL_ADC == TRUE) adcRef = HAL_ADC_REF_VOLT;#endif}
#if (HAL_ADC == TRUE)
static uint8 adcRef;
#endif
#define HAL_ADC_REF_VOLT HAL_ADC_REF_AVDD
#define HAL_ADC_REF_AVDD 0x80 /* AVDD_SOC Pin Reference */
2、
/* LED control structure */
typedef struct {
uint8 mode; /* Operation mode */
uint8 todo; /* Blink cycles left */
uint8 onPct; /* On cycle percentage */
uint16 time; /* On/off cycle time (msec) */
uint32 next; /* Time for next change */
} HalLedControl_t;
typedef struct
{
HalLedControl_t HalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];
uint8 sleepActive;
} HalLedStatus_t;
/***************************************************************************************************
* @fn HalLedInit
*
* @brief Initialize LED Service
*
* @param init - pointer to void that contains the initialized value
*
* @return None
***************************************************************************************************/
void HalLedInit (void)
{
#if (HAL_LED == TRUE)
/* Initialize all LEDs to OFF */
HalLedSet (HAL_LED_ALL, HAL_LED_MODE_OFF);
#endif /* HAL_LED */
#ifdef BLINK_LEDS
/* Initialize sleepActive to FALSE */
HalLedStatusControl.sleepActive = FALSE;
#endif
}
#ifdef BLINK_LEDS
static HalLedStatus_t HalLedStatusControl;
#endif
/***************************************************************************************************
* @fn HalLedSet
*
* @brief Tun ON/OFF/TOGGLE given LEDs
*
* @param led - bit mask value of leds to be turned ON/OFF/TOGGLE
* mode - BLINK, FLASH, TOGGLE, ON, OFF
* @return None
***************************************************************************************************/
uint8 HalLedSet (uint8 leds, uint8 mode)
{
#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)
uint8 led;
HlaLedControl_t *sts;
switch (mode)
{
case HAL_LED_MODE_BLINK:
/* Default blink, 1 time, D% duty cycle */
HalLedBlink (leds, 1, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);
break;
case HAL_LED_MODE_FLASH:
/* Default flash, N times, D% duty cycle */
HalLedBlink (leds, HAL_LED_DEFAULT_FLASH_COUNT, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);
break;
case HAL_LED_MODE_ON:
case HAL_LED_MODE_OFF:
case HAL_LED_MODE_TOGGLE://状态反转模式即
led = HAL_LED_1;
leds &= HAL_LED_ALL;
sts = HalLedStatusControl.HalLedControlTable;
while (leds)//依次判断LED1...LED4是否要进行操作
{
if (leds & led)//
{
if (mode != HAL_LED_MODE_TOGGLE)
{
sts->mode = mode; /* ON or OFF */ //如果不是反转模式,讲mode传入到sts中保存
}
else//若是反转模式,与点亮模式异或后存入
{
sts->mode ^= HAL_LED_MODE_ON; /* Toggle */
}
HalLedOnOff (led, sts->mode);//根据此模式来设置led灯的状态,该函数的作用是设置亮灭
leds ^= led;//取消leds中与led对应的置一的位,以防止到最后循环跳不出来。
}
led <<= 1;
sts++;
}
break;
default:
break;
}
#elif (HAL_LED == TRUE)
LedOnOff(leds, mode);
#else
// HAL LED is disabled, suppress unused argument warnings
(void) leds;
(void) mode;
#endif /* BLINK_LEDS && HAL_LED */
return ( HalLedState );
}
// LED控制结构体
//已有人这么分析了!!
typedef struct {
uint8 mode; /*操作模式 */
uint8 todo; /*剩余的闪烁周期数 */
uint8 onPct; /* 周期中所占的比例 */
uint16 time; /* 开关周期时间(msec) */
uint32 next; /* 下次改变的时间 */
} HalLedControl_t;
switch (mode)
{
case HAL_LED_MODE_BLINK:
HalLedBlink (leds, 1, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);
//LED设置的一些默认参数【hal_led.h】
#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闪烁函数【hal_led.c】
void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period)
{
#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)
//同样先判断是否启用了LED并且使用LED闪烁功能
uint8 led;
HalLedControl_t *sts;
if (leds && percent && period)
//判断参数的有效性,percent参数指明一个周期中LED将开启的时间
{
if (percent < 100)
//如果一个周期中开启时间小于100%
{
led = HAL_LED_1;
leds &= HAL_LED_ALL;
//屏蔽掉不想要操作的LED
sts = HalLedStatusControl.HalLedControlTable;
//HalLedStatusControl是事先定义好的一个结构体
typedef struct
{
HalLedControl_t HalLedControlTable【HAL_LED_DEFAULT_MAX_LEDS】;
uint8 sleepActive;
} HalLedStatus_t;
#define HAL_LED_DEFAULT_MAX_LEDS 4
#ifdef BLINK_LEDS
static HalLedStatus_t HalLedStatusControl;
#endif
while (leds)
//这个循环主要是对传进来的每一个LED进行独立的设置,比如传进来的是需要设置LED1和LED2,那么此循环会先设置LED1然后再设置LED2
{
if (leds & led)
//检测当前LED是否是需要设置的
{
preBlinkState |= (led & HalLedState);
//储存目前的额LED状态
//static uint8 preBlinkState;
sts->mode = HAL_LED_MODE_OFF; /*关闭先前的模式 */
sts->time = period; /* Time for one on/off cycle */
sts->onPct = percent; /* % of cycle LED is on */
sts->todo = numBlinks; /* Number of blink cycles */
if (!numBlinks) sts->mode |= HAL_LED_MODE_FLASH;
//如果规定的次数未达到则继续闪烁
sts->next = osal_GetSystemClock(); /* Start now */
//读取当前系统时钟【OSAL_Timers.c】
uint32 osal_GetSystemClock( void )
{
return ( osal_systemClock );
}
//static uint32 osal_systemClock;
//这样看来第一次运行的时候osal_systemClock=0,系统中应该启动了定时器,用来记录系统运行时间。
sts->mode |= HAL_LED_MODE_BLINK; /* Enable blinking */
leds ^= led;
//屏蔽掉已设置好的这个LED
}
led <<= 1;
//检测下一个LED
sts++;
}//真的是高手才能写出的
- Zigbee 之SerialApp HalDriverInit()
- Zigbee 之SerialApp InitBoard( OB_COLD );
- Zigbee协议栈z-stack学习之串口透明传输(SerialApp)数据的收发过程
- SerialApp-zigbee串口应用实例
- cc2530 之SerialApp
- Zstack之SerialApp分析笔记1
- zigbee 协议栈 SamPle App工程(转自天运科技)第十五讲 SerialApp工程
- 协议栈相关实验之 SerialApp实验 详解
- 协议栈相关实验之 SerialApp实验 详解
- Zigbee深入浅出之Zigbee入门
- ZigBee之初体验
- zigbee之终端设备绑定
- ZigBee之旅启程
- Zigbee之Z-Stack
- ZigBee学习之旅
- zigbee学习之定时器
- zigbee学习之OLED
- zigbee学习之DHT11
- Android学习笔记之Bitmap位图触摸点移动
- 基础学习笔记之opencv(5):实现鼠标选定矩形框
- C++ redis client安装全过程
- Android AIDL使用详解
- iBatis开发环境搭建和第一个程序
- Zigbee 之SerialApp HalDriverInit()
- socket
- hbase搭建注意事项
- 用VMware 8安装Ubuntu 12.04详细过程图解
- 项目管理心得:一个项目经理的个人体会、经验总结
- [python] 初步学习
- Java RMI
- 【linux】.bash_profile和.bashrc的什么区别
- C#实现内存中字符串或byte[]的加解密