123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #include "include.h"
- #if USER_ADKEY_MUX_SDCLK
- typedef struct {
- uint8_t sdclk_val;
- uint8_t sdclk_convert : 1, //ADC转换标志
- sdclk_valid : 1; //ADC转换数据有效
- } adkey_t;
- static adkey_t adkey;
- #endif
- void adkey_init(void)
- {
- uint16_t adc_ch = 0;
- #if USER_ADKEY
- if (xcfg_cb.user_adkey_en) {
- adc_ch |= BIT(ADKEY_CH);
- #if ADKEY_PU10K_EN
- adcch_io_pu10k_enable(ADKEY_CH); //开内部10K上拉
- #endif // ADKEY_PU10K_EN
- }
- #endif // USER_ADKEY
- #if USER_ADKEY2
- if (xcfg_cb.user_adkey2_en) {
- adc_ch |= BIT(ADKEY2_CH);
- }
- #endif // USER_ADKEY2
- #if USER_ADKEY_MUX_SDCLK
- if (xcfg_cb.user_adkey_mux_sdclk_en) {
- adc_ch |= BIT(SDCLK_AD_CH);
- }
- memset(&adkey, 0x00, sizeof(adkey));
- #endif // USER_ADKEY_MUX_SDCLK
- #if USER_NTC
- if (xcfg_cb.ntc_user_inner_pu) {
- adcch_io_pu10k_enable(ADCCH_NTC); //开内部10K上拉
- }
- if (xcfg_cb.ntc_en) {
- adc_ch |= BIT(ADCCH_NTC);
- }
- #endif
- saradc_set_channel(adc_ch);
- }
- #if (USER_ADKEY || USER_ADKEY_MUX_SDCLK)
- AT(.com_text.port.key)
- static uint8_t adkey_get_key_do(uint8_t key_val)
- {
- uint8_t num = 0;
- uint8_t *ptr;
- // printf("%s adkey_val:0x%x\n",__func__,key_val);
- while (key_val > adkey_table[num].adc_val) {
- num++;
- }
- //工具配置了第一组ADKEY的按键定义?
- ptr = get_adkey_configure(num);
- if (ptr != NULL) {
- if ((num > 11) || (adkey_table[num].adc_val == 0xff)) {
- return NO_KEY;
- }
- return key_config_table[*(ptr+num)];
- }
- return adkey_table[num].usage_id;
- }
- #endif
- #if USER_ADKEY
- AT(.com_text.port.adkey)
- static uint8_t adkey_get_key(void)
- {
- return adkey_get_key_do(saradc_get_value8(ADKEY_CH));
- }
- #endif
- #if USER_ADKEY2
- AT(.com_text.port.key)
- static uint8_t adkey2_get_key(void)
- {
- uint8_t num = 0;
- uint8_t *ptr;
- //配置工具是否使能了第二组ADKEY2?
- if (!xcfg_cb.user_adkey2_en) {
- return NO_KEY;
- }
- while (saradc_get_value8(ADKEY2_CH) > adkey2_table[num].adc_val) {
- num++;
- }
- return adkey2_table[num].usage_id;
- }
- #endif // USER_ADKEY2
- #if USER_ADKEY_MUX_SDCLK
- AT(.com_text.key.adkey)
- void adkey_mux_convert_done(void)
- {
- if (xcfg_cb.user_adkey_mux_sdclk_en) {
- if (adkey.sdclk_convert) {
- adkey.sdclk_valid = 1;
- } else {
- adkey.sdclk_valid = 0;
- }
- if (sdcard_detect_is_busy()) {
- saradc_clr_channel(BIT(SDCLK_AD_CH));
- adkey.sdclk_convert = 0;
- } else {
- saradc_set_channel(BIT(SDCLK_AD_CH));
- adkey.sdclk_convert = 1;
- }
- }
- }
- AT(.com_text.port.key)
- void adkey_mux_sdclk_w4_convert(void)
- {
- if ((xcfg_cb.user_adkey_mux_sdclk_en) && (adkey.sdclk_convert)) {
- while (!saradc_is_finish()) {
- WDT_CLR();
- }
- }
- }
- AT(.com_text.port.adkey)
- static uint8_t adkey_mux_get_key(void)
- {
- if (!adkey.sdclk_valid) {
- return NO_KEY;
- }
- return adkey_get_key_do(saradc_get_value8(SDCLK_AD_CH));
- }
- #endif // USER_ADKEY_MUX_SDCLK
- AT(.com_text.adkey.get)
- uint8_t adkey_get_val(void)
- {
- uint8_t key_val = NO_KEY;
- #if USER_ADKEY
- if (key_val == NO_KEY && xcfg_cb.user_adkey_en) {
- key_val = adkey_get_key();
- }
- #endif // USER_ADKEY
- #if USER_ADKEY2
- if (key_val == NO_KEY) {
- key_val = adkey2_get_key();
- }
- #endif // USER_ADKEY2
- #if USER_ADKEY_MUX_SDCLK
- //需要放到最后处理,当没进行adc convert需要返回
- if (key_val == NO_KEY && xcfg_cb.user_adkey_mux_sdclk_en) {
- key_val = adkey_mux_get_key();
- }
- #endif // USER_ADKEY_MUX_SDCLK
- return key_val;
- }
|