Zigbee 之SerialApp HalDriverInit()

来源:互联网 发布:mac win10截屏快捷键 编辑:程序博客网 时间:2024/04/30 05:51
 // Initialze HAL drivers

  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://状态反转模式即  亮变灭,灭变亮。  #define HAL_LED_MODE_TOGGLE  0x08


      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++; 
}//真的是高手才能写出的


原创粉丝点击