12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #include "include.h"
- extern uint8_t pwr_usage_id;
- AT(.com_text.bsp.key)
- void pwrkey10s_counter_clr(void)
- {
- if (POWKEY_10S_RESET) {
- RTCCON10 = BIT(10); //clear pwrkey10s pending and counter
- }
- }
- void pwrkey_off(void)
- {
- GPIOBDE &= ~BIT(5);
- GPIOBDIR |= BIT(5);
- GPIOBPU &= ~BIT(5);
- GPIOBPD &= ~BIT(5);
- RTCCON13 &= ~(BIT(0) | BIT(4) | BIT(8) | BIT(12)); //wk pin0 disable
- }
- void pwrkey_init(void)
- {
- #if USER_PWRKEY
- if (sys_cb.wko_pwrkey_en) {
- adcch_io_pu10k_enable(ADCCH_WKO);
- pwr_usage_id = pwrkey_table[0].usage_id;
- if (xcfg_cb.pwrkey_config_en) {
- pwr_usage_id = key_config_table[xcfg_cb.pwrkey_num0];
- }
- RTCCON13 |= BIT(0) | BIT(4) | BIT(12); //wk pin0 wakeup, input, pullup10k enable
- saradc_set_channel(BIT(ADCCH_WKO));
- } else
- #endif // USER_PWRKEY
- {
- pwrkey_off();
- }
- }
- #if USER_PWRKEY
- AT(.com_text.port.key)
- uint8_t pwrkey_get_val(void)
- {
- uint8_t num = 0;
- uint8_t *ptr;
- // //配置工具是否使能了PWRKEY?
- if ((!xcfg_cb.user_pwrkey_en) && (!PWRKEY_2_HW_PWRON)) {
- return NO_KEY;
- }
- while (saradc_get_value8(ADCCH_WKO) > pwrkey_table[num].adc_val) {
- num++;
- }
- //工具配置了PWRKEY的按键定义?
- ptr = get_pwrkey_configure(num);
- if (ptr != NULL) {
- if (num > 4) {
- return NO_KEY;
- }
- return key_config_table[*(ptr+num)];
- }
- return pwrkey_table[num].usage_id;
- }
- AT(.text.bsp.power)
- bool pwrkey_get_status(void)
- {
- u32 delay = 20;
- u32 pre_sta = 0;
- u32 sta_cnt = 0;
- while(delay--) {
- u32 tmp_sta = (RTCCON & BIT(19));
- if(pre_sta == tmp_sta) {
- sta_cnt++;
- } else {
- pre_sta = tmp_sta;
- sta_cnt = 0;
- }
- delay_ms(1);
- if(sta_cnt > 4) {
- break;
- }
- }
- return (pre_sta == 0)? true : false;
- }
- #endif
|