 |
思澈科技軟件開發(fā)工具包
2.20
|
|
HAL AON提供抽象的軟件接口操作硬件AON(Always On)模塊,用于控制芯片各個(gè)子系統(tǒng)的低功耗模式,芯片分為HPSYS和LPSYS兩個(gè)子系統(tǒng)(電源域), 分別對(duì)應(yīng)HPAON(hwp_hpsys_aon)和LPAON(hwp_lpsys_aon),兩個(gè)電源域的控制方法類似,支持的特性有:
- PIN、RTC、LPTIM、MAILBOX和手動(dòng)喚醒,LPSYS還支持LPCOMP和BLE喚醒, PIN喚醒可以是電平觸發(fā)也可以是邊沿觸發(fā),手動(dòng)喚醒指由另外一個(gè)核操作特定寄存器喚醒指定的核, MAILBOX喚醒指可以通過觸發(fā)mailbox中斷來喚醒對(duì)應(yīng)的核,比如LPSYS可以配置 L2H_MAILBOX 觸發(fā)給HPSYS的MAILBOX中斷,若HPSYS使能了MAILBOX喚醒,就能被該中斷自動(dòng)喚醒
- HPSYS支持4個(gè)喚醒PIN,LPSYS支持6個(gè)喚醒PIN,他們都與固定的GPIO管腳綁定
- 支持LIGHT/DEEP/STANDBY三種低功耗模式,其中LIGHT和DEEP模式數(shù)字模塊不會(huì)掉電,所有寄存器和SRAM都會(huì)保留,STANDBY模式數(shù)字模塊會(huì)掉電,所有寄存器都會(huì)丟失,SRAM可以有選擇的保留
- Note
- 由于PIN的邊沿檢測(cè)存在延遲,如果被其它喚醒源喚醒時(shí)剛好有喚醒PIN的電平變化,就有可能在AON中斷時(shí)看到WSR寄存器中的PIN喚醒標(biāo)志還是0,過了一會(huì)兒才變?yōu)?,又因?yàn)閷?duì)應(yīng)的GPIO邊沿檢測(cè)這時(shí)還沒準(zhǔn)備好, 就會(huì)導(dǎo)致WSR寄存器的PIN喚醒狀態(tài)沒有被清掉而一直不睡眠并且會(huì)丟失一次邊沿檢測(cè)的GPIO中斷,如果沒有使用SDK里drv_common.c實(shí)現(xiàn)的SysTick_Handler作為SysTick的中斷服務(wù)程序, 建議在自定義的SysTick中斷服務(wù)程序中添加如下代碼,當(dāng)發(fā)現(xiàn)邊沿觸發(fā)的喚醒PIN標(biāo)志為1時(shí),手動(dòng)觸發(fā)一次GPIO中斷回調(diào)函數(shù)。
#ifdef SOC_BF0_HCPU
pin_wsr = status >> HPSYS_AON_WSR_PIN0_Pos;
wake_pin_num = HPSYS_AON_WSR_PIN_NUM;
#else
pin_wsr = status >> LPSYS_AON_WSR_PIN0_Pos;
wake_pin_num = LPSYS_AON_WSR_PIN_NUM;
#endif
for (i = 0; (i < wake_pin_num) && pin_wsr; i++)
{
if (pin_wsr & 1)
{
hal_status = HAL_AON_GetWakePinMode(i, &pin_mode);
{
gpio = HAL_AON_QueryWakeupGpioPin(i, &pin);
RT_ASSERT(gpio);
}
}
pin_wsr >>= 1;
}
喚醒PIN與GPIO管腳映射關(guān)系
Z0
HPSYS
| Wakeup PIN | GPIO |
| PIN0 | GPIO_B30 |
| PIN1 | GPIO_B31 |
| PIN2 | GPIO_B32 |
| PIN3 | GPIO_B33 |
| PIN4 | GPIO_B34 |
| PIN5 | GPIO_B35 |
LPSYS
| Wakeup PIN | GPIO |
| PIN0 | GPIO_B30 |
| PIN1 | GPIO_B31 |
| PIN2 | GPIO_B32 |
| PIN3 | GPIO_B33 |
| PIN4 | GPIO_B34 |
| PIN5 | GPIO_B35 |
A0
HPSYS
| Wakeup PIN | GPIO |
| PIN0 | GPIO_A77 |
| PIN1 | GPIO_A78 |
| PIN2 | GPIO_A79 |
| PIN3 | GPIO_A80 |
LPSYS
| Wakeup PIN | GPIO |
| PIN0 | GPIO_B43 |
| PIN1 | GPIO_B44 |
| PIN2 | GPIO_B45 |
| PIN3 | GPIO_B46 |
| PIN4 | GPIO_B47 |
| PIN5 | GPIO_B48 |
詳細(xì)的API說明參考 AON.
使用HAL HPAON
配置睡眠
void example(void)
{
...
}
查詢喚醒PIN和對(duì)應(yīng)的GPIO管腳
void example(void)
{
int8_t wakeup_pin;
uint16_t *gpio_pin;
}
使用HAL LPAON
配置睡眠
void example(void)
{
...
}
查詢喚醒PIN和對(duì)應(yīng)的GPIO管腳
void example(void)
{
int8_t wakeup_pin;
uint16_t *gpio_pin;
}
@ HPAON_WAKEUP_SRC_LPTIM1
Definition: bf0_hal_aon.h:87
HAL_StatusTypeDef HAL_HPAON_EnableWakeupSrc(HPAON_WakeupSrcTypeDef src, AON_PinModeTypeDef mode)
Enable HPSYS wakeup source.
GPIO_TypeDef * HAL_HPAON_QueryWakeupGpioPin(uint8_t wakeup_pin, uint16_t *gpio_pin)
Query gpio pin bound with corresponding wakeup pin.
@ LPAON_WAKEUP_SRC_PIN0
Definition: bf0_hal_aon.h:175
int8_t HAL_LPAON_QueryWakeupPin(GPIO_TypeDef *gpio, uint16_t gpio_pin)
Query wakeup pin bound with corresponding gpio pin.
@ HAL_OK
Definition: bf0_hal_def.h:75
HAL_StatusTypeDef HAL_HPAON_EnterLightSleep(uint32_t lscr)
Indicate HPSYS to enter light sleep mode.
HAL_StatusTypeDef HAL_LPAON_EnableWakeupSrc(LPAON_WakeupSrcTypeDef src, AON_PinModeTypeDef mode)
Enable LPSYS wakeup source.
@ HPAON_WAKEUP_SRC_LP2HP_REQ
Definition: bf0_hal_aon.h:89
#define HAL_HPAON_CLEAR_WSR(wsr)
Clear hpsys wakeup source register.
Definition: bf0_hal_aon.h:259
@ LPAON_WAKEUP_SRC_HP2LP_IRQ
Definition: bf0_hal_aon.h:153
Definition: bf0_hal_gpio.h:73
int8_t HAL_HPAON_QueryWakeupPin(GPIO_TypeDef *gpio, uint16_t gpio_pin)
Query wakeup pin bound with corresponding gpio pin.
#define hwp_gpio2
Definition: register.h:585
@ AON_PIN_MODE_HIGH
Definition: bf0_hal_aon.h:73
@ HPAON_WAKEUP_SRC_PIN0
Definition: bf0_hal_aon.h:103
void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin)
EXTI line detection callback.
HAL_StatusTypeDef HAL_LPAON_EnterLightSleep(uint32_t lscr)
Indicate LPSYS to enter light sleep mode.
#define HAL_LPAON_CLEAR_WSR(wsr)
Clear lpsys wakeup source register.
Definition: bf0_hal_aon.h:397
@ HPAON_WAKEUP_SRC_LP2HP_IRQ
Definition: bf0_hal_aon.h:90
#define hwp_gpio1
Definition: register.h:583
#define HAL_LPAON_GET_WSR()
Get lpsys wakeup source register.
Definition: bf0_hal_aon.h:389
@ LPAON_WAKEUP_SRC_HP2LP_REQ
Definition: bf0_hal_aon.h:152
#define HAL_HPAON_GET_WSR()
Get hpsys wakeup source register.
Definition: bf0_hal_aon.h:252
@ AON_PIN_MODE_LOW
Definition: bf0_hal_aon.h:74