娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

ts.c源碼:

#include "linux/module.h"

#include "linux/init.h"

#include "linux/fs.h"

#include "linux/interrupt.h"

#include "linux/irq.h"

#include "linux/sched.h"

#include "linux/pm.h"

#include "linux/sysctl.h"

#include "linux/proc_fs.h"

#include "linux/delay.h"

#include "linux/platform_device.h"

#include "linux/input.h"

#include "linux/io.h"

#include "linux/clk.h"

#include "linux/delay.h"

static struct timer_list ts_timer;

static struct input_dev *ts_dev;

struct adc_regs {

    unsigned long adccon;

    unsigned long adctsc;

    unsigned long adcdly;

    unsigned long adcdat0;

    unsigned long adcdat1;

    unsigned long adcupdn;

    unsigned long adcclrint;

    unsigned long reserved;

    unsigned long adcclrintpndnup;

};

static struct adc_regs *adc_regs;

static void enter_wait_for_pen_down(void)

{

    adc_regs->adctsc = 0xd3;

}

static void enter_wait_for_pen_up(void)

{

    adc_regs->adctsc = 0x1d3;

}

static void enter_measure_xy_mode(void)

{

    adc_regs->adctsc = ((1<<7) | (1<<6) | (1<<4) | (1<<3) | (1<<2));

}

static void start_adc(void)

{

    adc_regs->adccon |= (1<<0);

}

static irqreturn_t ts_pen_down_up_isr(int irq, void *dev_id)

{

    unsigned long data0, data1;

    int down;

    data0 = adc_regs->adcdat0;

    data1 = adc_regs->adcdat1;

    down = (!(data0 & (1<<15))) && (!(data1 & (1<<15)));

    

    if (!down)

    {

        //printk("pen up\n");

        enter_wait_for_pen_down();

        // 調用evdev_event: 保存,喚醒 

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 0);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 0);

        input_sync(ts_dev);

    }

    else

    {

        //printk("pen down\n");

        //enter_wait_for_pen_up();

        // 進入"自動測量x/y座標模式" 

        enter_measure_xy_mode();

        

        // 啟動ADC 

        start_adc();

    }

    adc_regs->adcupdn   = 0;

    adc_regs->adcclrint = 0;

    adc_regs->adcclrintpndnup = 0;

    return IRQ_HANDLED;

}

static irqreturn_t adc_isr(int irq, void *dev_id)

{

    // 為何不在這里立刻處理ADC到結果?

    // 因為6410的ADC有個缺點: 

    // 當ADC剛完成時, 必須等待若干ms, 

    // 才能讀取adcdat0,adcdata1來判斷

    // 當前的觸摸屏是被按下還是松開

    // 啟動定時器, 是為了不在中斷處理函數里等待 

    mod_timer(&ts_timer, jiffies + HZ/100);

    enter_wait_for_pen_up();

    adc_regs->adcupdn   = 0;

    adc_regs->adcclrint = 0;

    adc_regs->adcclrintpndnup = 0;

    return IRQ_HANDLED;

}

static irqreturn_t adc_isr_ok_old(int irq, void *dev_id)

{

    int x,y;

    int adcdat0,adcdat1;

    int down;

#if 1 // in auto xy mode, after adc interrupt, have to wait several ms to test up/down  

    udelay(1000);

    udelay(1000);

    udelay(1000);

    udelay(1000);

#endif

    adcdat0 = adc_regs->adcdat0;

    adcdat1 = adc_regs->adcdat1;

    x = adcdat0 & 0xfff;

    y = adcdat1 & 0xfff;

    

    down = (!(adcdat0 & (1<<15))) && (!(adcdat1 & (1<<15)));

    //printk("adcdat0 = 0x%x, adc_dat1 = 0x%x\n", adcdat0, adcdat1);

    if (down)

    {

        //printk("enter_wait_for_pen_up\n");

        enter_wait_for_pen_up();

        //printk("x = %d, y = %d\n", x, y);

        input_event(ts_dev, EV_ABS, ABS_X, x);

        input_event(ts_dev, EV_ABS, ABS_Y, y);

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 1);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 1);

        input_sync(ts_dev);

        // 啟動定時器 

        mod_timer(&ts_timer, jiffies + HZ/100);

    }

    else

    {

        //printk("enter_wait_for_pen_down\n");

        enter_wait_for_pen_down();

        

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 0);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 0);

        input_sync(ts_dev);

    }

    adc_regs->adcupdn   = 0;

    adc_regs->adcclrint = 0;

    adc_regs->adcclrintpndnup = 0;

    return IRQ_HANDLED;

}

static void ts_timer_function_ok_old(unsigned long data)

{

    // 如果觸摸筆已經松開, 就沒必要再次啟動ADC 

    // 否則, 啟動ADC 

    unsigned long data0, data1;

    int down;

    data0 = adc_regs->adcdat0;

    data1 = adc_regs->adcdat1;

    down = (!(data0 & (1<<15))) && (!(data1 & (1<<15)));

    

    if (down)

    {

        enter_measure_xy_mode();

        start_adc();

    }

    else

    {

        enter_wait_for_pen_down();

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 0);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 0);

        input_sync(ts_dev);

    }

}

static void ts_timer_function(unsigned long data)

{

    // 如果觸摸筆已經松開, 就沒必要再次啟動ADC 

    // 否則, 啟動ADC 

    unsigned long data0, data1;

    int down;

    int x, y;

    data0 = adc_regs->adcdat0;

    data1 = adc_regs->adcdat1;

    down = (!(data0 & (1<<15))) && (!(data1 & (1<<15)));

    if (down)

    {

        x = data0 & 0xfff;

        y = data1 & 0xfff;

        input_event(ts_dev, EV_ABS, ABS_X, x);

        input_event(ts_dev, EV_ABS, ABS_Y, y);

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 1);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 1);

        input_sync(ts_dev);

        

        enter_measure_xy_mode();

        start_adc();

    }

    else

    {

        enter_wait_for_pen_down();

        input_event(ts_dev, EV_ABS, ABS_PRESSURE, 0);

        input_event(ts_dev, EV_KEY, BTN_TOUCH, 0);

        input_sync(ts_dev);

    }

}

static int ts_init(void)

{

    struct clk *clk;

    // 1. 分配input_dev 

    ts_dev = input_allocate_device();

    

    // 2. 設置 

    // 2.1 能產生哪類事件 

    set_bit(EV_KEY, ts_dev->evbit);

    set_bit(EV_ABS, ts_dev->evbit);

    

    // 2.2 能產生這類事件里的哪些事件 

    set_bit(BTN_TOUCH, ts_dev->keybit);

    input_set_abs_params(ts_dev, ABS_X, 0, 0xfff, 0, 0);

    input_set_abs_params(ts_dev, ABS_Y, 0, 0xfff, 0, 0);

    input_set_abs_params(ts_dev, ABS_PRESSURE, 0, 1, 0, 0);

    

    // 3. 注冊 

    input_register_device(ts_dev);

    

    // 4. 硬件相關 

    adc_regs = ioremap(0x7E00B000, sizeof(struct adc_regs));

    clk = clk_get(NULL, "adc");

    clk_enable(clk);  // PCLK_GATE[12]設為1 

    // bit[16]   : 1 = 12-bit A/D conversion

    // bit[14]   : 1 - enable A/D converter prescaler enable

    // bit[13:6] : A/D converter prescaler value,

    //             PCLK=66500000, adcclk=pclk/(n+1)

    //             取值13, adclk=66.5MHz/14=4.75

     

    adc_regs->adccon = (1<<16) | (1<<14) | (65<<6);

    adc_regs->adcdly = 0xffff;

    adc_regs->adcclrintpndnup = 0;

    request_irq(IRQ_TC, ts_pen_down_up_isr, IRQF_SHARED, "pen_down_up", 1);

    request_irq(IRQ_ADC, adc_isr, IRQF_SHARED, "adc", 1);

    init_timer(&ts_timer);

    ts_timer.expires  = 0;

    ts_timer.function = ts_timer_function;

    add_timer(&ts_timer);

    // 進入"wait for interrupt mode", 等待觸摸筆按下或松開的模式 

    enter_wait_for_pen_down();

    return 0;

}

static void ts_exit(void)

{

    del_timer(&ts_timer);

    free_irq(IRQ_TC, 1);

    free_irq(IRQ_ADC, 1);

    iounmap(adc_regs);

    input_unregister_device(ts_dev);

    input_free_device(ts_dev);

}

module_init(ts_init);

module_exit(ts_exit);

MODULE_LICENSE("GPL");

====================================================================

Mekefile文件:

KERN_DIR = /home/linux/linux-3.0.1

all:

    make -C $(KERN_DIR) M=`pwd` modules 

clean:

    make -C $(KERN_DIR) M=`pwd` modules clean

    rm -rf modules.order

obj-m += ts.o

=====================================================================

測試:

一、配置內核make menuconfig ARCH=arm 去掉第三張圖片中touchscreens選項前的*

OK6410如何去掉觸摸屏驅動OK6410如何去掉觸摸屏驅動OK6410如何去掉觸摸屏驅動

若只做這一步,編譯內核會提示如下錯誤:

arch/arm/mach-s3c64xx/built-in.o: In function `smdk6410_machine_init':

/xh/work/linux-3.0.1/arch/arm/mach-s3c64xx/mach-smdk6410.c:1096: undefined reference to `s3c_ts_set_platdata'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x26c): undefined reference to `s3c_device_ts'

make: *** [.tmp_vmlinux1] Error 1

[root@IVAN linux-3.0.1]#

二、打開/arch/arm/mach-s3c64xx/mach-smdk6410.c

    搜索 “s3c_ts_set_platdata”和“s3c_device_ts”,并注釋掉這兩行。

成功……


三、使用新內核啟動:

1、編譯內核:

make zImage                 //生成內核鏡像文件

cp arch/arm/boot/zImage ../../zImage_no_ts

2、把開發板設置為SD卡啟動,使用SD卡啟動后按空格進入SD卡的u-boot;

3、用SD卡里面的u-boot燒寫內核到0x000000200000-0x000000700000 : "Kernel"分區:

tftp 50008000 zImage_no_ts

nand erase 200000 500000

nand write 50008000 200000 500000

4、燒寫完成后設置開發版為nand flash啟動,使用新內核啟動。

四、編譯測試(詳細可以參考JZ2440觸摸屏驅動程序(輸入子系統)):

insmod ts.ko

insmod lcd.ko

編譯:

tar xzf tslib-1.4.tar.gz

cd tslib

./autogen.sh 

mkdir tmp

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp

make

make install

set bootargs root=/dev/nfs nfsroot=10.1.0.124:/rootfs ip=10.1.0.126 console=ttySAC0

安裝:

cd tmp

cp * -rf 開發板的/

使用:

1.

修改 /etc/ts.conf第1行(去掉#號):

# module_raw input

改為:

module_raw input

2.

export TSLIB_FBDEVICE=/dev/fb0             # LCD

export TSLIB_TSDEVICE=/dev/event2        # 觸摸屏

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_PLUGINDIR=/lib/ts

export TSLIB_CONSOLEDEVICE=none

測試:

ts_calibrate

ts_test

hexdump /dev/event2


關鍵字:OK6410  觸摸屏驅動 引用地址:OK6410觸摸屏驅動

上一篇:OK6410分層分離(總線-驅動-設備模型)
下一篇:OK6410之LCD驅動

推薦閱讀

? ?近日,華為2018全連接大會成為業界關注的焦點。在中興事件和中美貿易戰的背景下,華為公布的AI達芬奇計劃引發各方關注。達芬奇是什么據悉,華為高管每月都會與員工開會,討論如何將AI引入從云數據中心到智能手機和監控攝像頭等設備之中。據知情人士透露,這一系列工作代號為“達芬奇計劃(Project Da Vinci)”,旨在為從終端到云端的眾多場景研發...
5G開創新局面隨著新一代蜂窩通信5G的發展勢頭日漸增強,部署5G通信基礎設施的競爭也開始如火如荼地進行。移動運營商們正忙于部署基礎設施,并啟動營銷計劃,以吸引大家升級自己的智能手機服務合同與手機配置,從而充分利用5G顯著提高的數據速率。與上一代3G向4G的轉變不同,5G的通信架構不是一次迭代升級。5G首次使用了24至40GHz毫米波(mmWave)頻譜中的...
據外媒報道,realme將于本月7日在海外舉辦發布會,屆時將會帶來全新的realme 7系列新機。近日realme印度CEO表示,將會在歐洲推出支持更高快充的realme 7系列機型,同時還放上了realme的125W快充頭,這是在暗示什么嗎?據悉realme海外發布會將于7日舉辦,新機realme 7系列可能會搭載最先進的125W超級快充技術,官方表示僅需3分鐘即可將4000mAh電池充至33...
人耳最敏感、最熟悉的聲音頻段是中高頻的聲音。人的一生當中聽見最多的也是中頻的聲音,即人們常說的中音。首先,由于這幾十年來技術條件等方面的制約,使人們生活中常接觸的音響器材如電視機、收錄機等,其頻響幾乎都是以中高音為主,從這類音響器材中幾乎無法聽見超低和超高音,因為它們幾乎都播放不出這些頻段的聲音。其次,人們日常生活中所常聽見的流...

史海拾趣

問答坊 | AI 解惑

Agilent Fundamentals of RF and Microwave

Modern receiving systems must often process veryweak signals, but the noise added by the systemcomponents tends to obscure those very weak signals.Sensitivity, bit error ratio (BER) and noise figure aresystem parameters that chara ...…

查看全部問答∨

長期供應頻譜分析儀HP8563E/E4402B/E4403B/MS2665C/MS

一、 綜合測試儀 R&S CMU200(可測GSM900/1800);Agilent8960 E5515B(可測GSM900/1800/1900/GPRS);Agilnet8960 E5515C(OPT:002、003,可測GSM、CDMA);R&S CMD55(可測900/1800);R&S CMD60(DECT測試儀);MT8801B(PHS測試儀); ...…

查看全部問答∨

evc 對話框中顯示jpg圖片的問題

我現在在對話框中添加了按鈕 void xxxDlg::OnButton1() 想實現的功能有兩個,點擊按鈕后首先能獲取要顯示圖片的路徑,現在已經實現了并把路徑保存在CString pathname 中。第二個功能 想接著把對應路徑的這個圖片顯示到對話框中。(這個按鈕是程序 ...…

查看全部問答∨

求學驅動編程經典書籍

上大學1.5年了,會點C,會點C++,會點JAVA,才過了個scjp認證,對學習逐漸迷茫了.. 聽說市場比較缺乏編寫驅動的程序員.. 各位大蝦幫偶指教下…

查看全部問答∨

界面的一個問題,謝謝!

請問WINCE中怎樣通過程序自由隱藏和顯示windows mobile的任務欄(是指帶開始按鈕的那一欄) 謝謝大家了:)…

查看全部問答∨

尋有無線條碼數據終端Symbol PDT8146編程經驗的高手

想做一個固定資產清查軟件: 通過無線終端可以實現對粘有條碼的設備進行清查,并能夠與服務器數據進行互連 PC端的程序不需要實現,只要實現無線終端查詢和報表功能.請有興趣的朋友與我聯系,有償服務 QQ 30107562 暗號 無線終端…

查看全部問答∨

一個關于ADS的問題?

在使用ADS Debug uC/OS系統和一個簡單的讓蜂鳴器響的應用程序時,AXD loading image后,沒有進入StartUP函數而是進入Disassembly,Go后不停的running image ,蜂鳴器不響,也不知道是不是下到板子里了。 請問是怎么回事?…

查看全部問答∨

時序仿真問題

請問各位大俠:時序仿真與功能仿真用的測試文件是同一個么,需要進行什么修改么?…

查看全部問答∨

長尾式差動放大電路分析

長尾式差動放大電路差模輸入電路圖   長尾式差動放大電路差模輸入 輸出波形   長尾式差動放大電路共模輸入電路圖 …

查看全部問答∨

實在不能忍受某些網友為拿獎多次注冊參與活動的行為!

論壇活動難免會出現某些網友為了拿獎品注冊多個賬號來參與活動! 以往這種情況會比較少,但是本次TI 教室培訓搶樓活動有些網友明顯為了拿獎品而來。我今天實在有點不能忍受,跟大家抱怨一下。 也希望不要再出現這種情況。 網友姓名我就不說錯來 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 雷州市| 合阳县| 海原县| 鹿泉市| 桦甸市| 阿克苏市| 镇江市| 南郑县| 青冈县| 陇川县| 依兰县| 都昌县| 溧阳市| 绵阳市| 读书| 满洲里市| 邹城市| 仁寿县| 江川县| 晴隆县| 当雄县| 余庆县| 荥经县| 习水县| 安岳县| 平阴县| 宁津县| 黎川县| 鸡西市| 东乌珠穆沁旗| 新绛县| 巴里| 定兴县| 关岭| 吐鲁番市| 岢岚县| 黄龙县| 平湖市| 黔东| 内乡县| 浙江省|