在這之前我們已經把字元裝置驅動架構和模型,包括一些機制我們都講的非常清楚了,在這裡我在給大家總結一下。
首先大家了解幾個概念,像實體位址和虛拟位址,io映射和記憶體映射,操作io我總結了有以下三種方法:
第一種方法:用的時候加上 *
volatile unsigned long *adccon=null;
volatile unsigned long *adcdat=null;
adccon=(volatile unsigned long *)ioremap(0x58000000,8);
adcdat=adccon+4;
iounmap(adccon);
iounmap(adcdat);
第二種方法:
__raw_readl(s3c2410_gpbcon);//s3c2410_gpbcon你可以看作是實體位址,本質是一個對io管教的基位址加上一些偏移量。
__raw_writel(temp, s3c2410_gpbcon);//_raw_write
//自動将位址轉化成虛拟位址
第三種方法:
static unsigned long led_table [] = {
s3c2410_gpb5,
s3c2410_gpb6,
s3c2410_gpb8,
s3c2410_gpb10,
};
static unsigned int led_cfg_table [] = {
s3c2410_gpb5_outp, //0x01<<10 defined in refg-gpio.h
s3c2410_gpb6_outp,
s3c2410_gpb8_outp,
s3c2410_gpb10_outp,
s3c2410_gpio_setpin(unsigned int pin,unsigned int to)
s3c2410_gpio_getpin(unsigned int pin)
s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function)
這三種後兩種其實是一樣的,自己一定要深入去了解。
然後我們來總結按鍵驅動程式:
第一:查詢方法,read一直去讀,這樣是非常消耗cpu的。
第二:中斷方法,我們還是去讀,當沒有按鍵發生的時候,我在此休眠,挂進隊列,當按鍵發生了我們喚醒休眠,在去讀按鍵。
第三:poll機制法,我們去讀的時候,如果沒有按鍵發生,開始的時候我們是讓程序一直休眠下去,但是poll機制可以提供給定一個時間去讀一次資料。
第四:異步通知,當我們沒有按鍵按下的時候,應用程式不會來讀取,當按鍵發生中斷函數裡面就通知應用程式來讀。
緊接着我們講了同步機制:信号量,自旋鎖,互斥鎖,原子變量,順序鎖,阻塞,非阻塞,rcu,完成接口等,(這些自己不懂得在去網上看看資料)
前面有幾種常用的我在前面也講得非常詳細了。
最後一個是對定時器的了解,注意觀察udelay.mdelay,sleep timer_list,這些我隻是在這裡提出來,給你們一些思路,全部寫下來的話東西太多了。
在下一篇文章中我準備總結下我對input輸入子系統,分離的了解,還有lcd,觸摸屏。