1. 程式人生 > >嵌入式Linux中TP除錯筆記

嵌入式Linux中TP除錯筆記

觸控式螢幕一般是通過IIC來傳輸觸控點的座標給Linux核心,一般而言,其步驟是:

當人觸控觸控式螢幕時,觸控式螢幕會產生一箇中斷訊號給Linux核心,核心接收到中斷訊號後便會通過IIC去觸控IC裡讀取資料,因此除錯TP驅動時,應該進行下列步驟(這裡我以ft6x6為例):

步驟一:先通過dmesg來檢視觸控驅動是否已經成功初始化,一般而言,在init函式裡應該有printk或類似的函式來進行列印來判斷i2c_add_driver函式是否成功地把tp驅動新增到IIC總線上;

步驟二:使用命令

cat /proc/interrupts

檢視裝置的中斷IO口和其他資訊,一般而言,如果裝置中斷出發後,當TP被觸控後與之對應的IO的數值會改變,如下圖:


執行兩次cat /proc/interrupts,可以看到數值由0變為130了,說明其識別到了中斷訊號,而且其終端埠為GPIOB。

步驟三:

參看具體的中斷資料,

使用命令:cat  /dev/input/event0裡資料,如果每點選一次TP便有資料顯示錶示TP已與MCU成功通訊起來了。

步驟四:

使用網上的一份TP程式碼來檢視具體的座標:

#include <stdio.h>  
#include <linux/input.h>  
  
static int event0_fd = -1;  
struct input_event ev0[64];  
  
static int handle_event0()  
{  
    int button = 0, realx=0, realy=0, i, rd;  
    rd = read(event0_fd, ev0, sizeof(struct input_event)* 64);  
    if(rd < sizeof(struct input_event)) return 0;  
    for(i=0;i<rd/sizeof(struct input_event); i++)  
    {  
        if(EV_ABS == ev0[i].type)  
        {  
            if(ev0[i].code == 0) {  
                realx = ev0[i].value;  
            } else if(ev0[i].code == 1) {  
                realy = ev0[i].value;  
            }  
        }  
        printf("event(%d):type:%d; code:%3d; value:%3d; realx:%3d; realy:%3d\n",i,ev0[i].type,ev0[i].code,ev0[i].value,realx,realy);  
          
    }  
    return 1;  
}  
  
  
int main(void)  
{  
    int done = 1;  
    event0_fd = open("/dev/event1",02);  
    if(event0_fd <0) {  
        printf("open input device error\n");  
        return -1;  
    }  
    while (done)  
    {  
        printf("begin handle_event0...\n");  
        done = handle_event0();  
        printf("end handle_event0...\n");  
    }  
    if(event0_fd > 0)  
    {  
        close(event0_fd);  
        event0_fd = -1;  
    }  
    return 0;  
}