ADC 按鍵配置方法
FreeRTOS平臺上使用的按鍵為ADC-KEY,采用的ADC模塊為GPADC。
按鍵功能驅動的實現是通過ADC分壓,使每個按鍵檢測的電壓值不同,從而實現區分不同的按鍵。按下或者彈起中斷之后,通過中斷觸發,主動檢測當前電壓識別出對應的按鍵。
最后再通過input子系統將獲取按鍵的鍵值并上報給應用層。
GPADC-KEY配置方法
按鍵結構體定義key_config的成員:
struct sunxikbd_config{
unsigned int measure; // 電壓閾值
char *name; // 功能名
unsigned int key_num; // 按鍵數量
unsigned int scankeycodes[KEY_MAX_CNT]; // 按鍵的鍵值
unsigned int key_vol[KEY_MAX_CNT]; // 按鍵的電壓值
};
不同平臺的配置可能不同,以r128為例,下面是r128的成員config:
static struct sunxikbd_config key_config = {
.measure = 2500,
.name = "gpadc-key",
.key_num = 5,
.key_vol = {164,415,646,900,1157},
.scankeycodes = {115,114,139,164,116}
};
當前按鍵驅動的配置都是以hardcode的方式寫入驅動代碼中,也就是說按鍵的數量,不同按鍵對應的電壓值,不同按鍵對應的KeyCode等等配置如果要修改的話,需要對源碼進行修改。
如上述按鍵結構體的定義,以下兩配置按照默認配置即可。
- measure:GPADC最大能夠識別的電壓值,需要根據UserMaual來設置。默認為2.5V。
- name:注冊的按鍵驅動名稱,會注冊到input子系統中。
可以自定義的配置為:key_num,key_vol,scankeycodes。
- key_num: 按照實際硬件設計來設置。
- key_vol: 按照硬件,實際每個按鍵分壓的情況來設置。
- scankeycodes:每個按鍵對應的KeyCode,方便應用通過input獲得按下的按鍵時,能夠識別是哪個按鍵按下了。
key_vol的配置方法,可以參考下圖的GPADC-KEY的硬件設置。
在圖中,VCC輸入的電壓為3.3V,通過分壓關系,第一個按鍵的電壓為0.21V,因此key_vol可以設置為210,以此類推。
驅動初始化方法
默認系統啟動時,不會加載GPADC驅動以及按鍵驅動。
如果需要加載GPADC-Key驅動,需要調用以下函數:
int sunxi_gpadc_key_init(void);
調用sunxi_gpadc_key_init()該函數即可完成GPADC驅動以及按鍵驅動的加載了,即可開始使用按鍵驅動。
應用調用方法
接下來繼續介紹一下,應用中該如何獲取按鍵按下的事件。
在FreeRTOS系統中,也移植了 Linux 的 input 子系統。GPADC-Key 中也是調用了 input 的接口,進行注冊 input 設置,上報事件等動作。
在調用 sunxi_gpadc_key_init()
時,通過 input_set_capability()
去設置了事件的屬性;通過sunxi_input_register_device()
注冊了 input
設備;在按鍵按下觸發中斷時,也是通過 input_report_key()
和 input_sync()
上報 input
事件。
因此,在應用層想要獲取input事件,可以直接通過input接口去獲取,使用示例可如下例程:
int input_func(void)
{
int fd = -1;
struct sunxi_input_event event;
sunxi_gpadc_key_init(); // 驅動初始化
fd = sunxi_input_open(DEVICE_NAME);
if (fd < 0)
return -1;
while (1) {
sunxi_input_readb(fd, &event, sizeof(struct sunxi_input_event));
if (event.type != EV_KEY)
continue;
if (event.value == 0) {
printf("key upn");
continue;
}
printf("key press: KeyCode:%dn", event.code);
}
return 0;
}
-
驅動器
+關注
關注
53文章
8255瀏覽量
146472 -
adc
+關注
關注
98文章
6503瀏覽量
544856 -
輸入電壓
+關注
關注
1文章
504瀏覽量
16573 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62211 -
ADC采樣
+關注
關注
0文章
134瀏覽量
12850 -
按鍵中斷
+關注
關注
0文章
15瀏覽量
6454 -
R128
+關注
關注
0文章
41瀏覽量
107
發布評論請先 登錄
相關推薦
評論