bsp_saradc_key.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "include.h"
  2. #include "driver_saradc.h"
  3. #include "bsp_saradc_key.h"
  4. #include "bsp_key.h"
  5. #if BSP_ADKEY_EN
  6. // If the key table does not match the actual value, adjust it according to the actual situation.
  7. // Note: When you calibrate key values, it is recommended to overlay a positive value on top of the actual key value,
  8. // e.p.: (or see Line 54)
  9. // KEY_PP_DOWN --> adc_val=0x00(actual) --> 0x05(write to table)
  10. #define KEY_VALUE_DEBUG 0
  11. AT(.com_rodata.key)
  12. const key_val_mapping_typedef key_val_mapping_table[6] = {
  13. {KEY_VALUE_PP, KEY_ID_PP},
  14. {KEY_VALUE_KEY1, KEY_ID_K1},
  15. {KEY_VALUE_KEY2, KEY_ID_K2},
  16. {KEY_VALUE_KEY3, KEY_ID_K3},
  17. {KEY_VALUE_KEY4, KEY_ID_K4},
  18. {KEY_VALUE_NULL, KEY_ID_NO},
  19. };
  20. // 初始化ADC按键
  21. void bsp_adkey_init(void)
  22. {
  23. saradc_channel_init_typedef saradc_channel_init_struct;
  24. saradc_channel_init_struct.channel = ADC_CHANNEL_SEL;
  25. saradc_channel_init_struct.pullup_en = SARADC_PULLUP_DIS;
  26. saradc_channel_init_struct.setup_time = SARADC_ST_8_CLK;
  27. saradc_channel_init_struct.interrupt_en = DISABLE;
  28. saradc_channel_init(&saradc_channel_init_struct);
  29. saradc_kick_start(ADC_CHANNEL_SEL);
  30. }
  31. // 读取按键的ADC采样值并根据数值返回键值
  32. AT(.com_text.adkey.get)
  33. u8 bsp_get_adkey_id(void)
  34. {
  35. u8 num = 0;
  36. u16 key_adc_val;
  37. if (!saradc_get_channel_flag(ADC_CHANNEL_SEL)) {
  38. return 0;
  39. }
  40. key_adc_val = saradc_get_data(ADC_CHANNEL_SEL);
  41. #if KEY_VALUE_DEBUG
  42. printf("---> adc value: 0x%04x\n", key_adc_val + 0x05);
  43. saradc_kick_start(ADC_CHANNEL_SEL);
  44. return KEY_ID_NO;
  45. #endif // KEY_VALUE_DEBUG
  46. while (key_adc_val > key_val_mapping_table[num].adc_val) {
  47. num++;
  48. }
  49. saradc_kick_start(ADC_CHANNEL_SEL);
  50. return key_val_mapping_table[num].usage_id;
  51. }
  52. #endif // BSP_ADKEY_EN