在本文中,我們對S3C6410開發板LED驅動代碼的實現過程進行分析,然后通過一個實例對LED進行控制。在本文的資源中包含了設備驅動的源碼和測試的源碼。
一、設備驅動源碼分析
設備驅動主要實現了模塊的初始化、模塊的卸載、io模塊操作的功能。
1、模塊初始化
模塊的初始化的源碼如下所示。
static int __init dev_init(void)
{
int ret;
{
unsigned tmp;
tmp = readl(S3C64XX_GPKCON);
tmp = (tmp & ~(0xffffU<<16))|(0x1111U<<16);
writel(tmp, S3C64XX_GPKCON);
tmp = readl(S3C64XX_GPKDAT);
tmp |= (0xF << 4);
writel(tmp, S3C64XX_GPKDAT);
}
ret = misc_register(&misc);
printk (DEVICE_NAME"tinitializedn");
return ret;
}
在初始化的源碼中,主要是對控制LED的GPIO引腳的寄存器進行設置,將GPIO設置為輸出,并將GPIO的初始狀態設置為高電平,燈是熄滅狀態。另外一個功能就是將LED的混雜設備注冊到內核中。
2、模塊卸載
模塊卸載的代碼比較簡單,如下所示。
static void __exit dev_exit(void)
{
misc_deregister(&misc);
}
模塊卸載代碼實現的功能是將LED的混雜設備從內核中取消注冊。
3、io 操作
io操作的代碼如下所示。
static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd) {
unsigned tmp;
case 0:
case 1:
if (arg > 4) {
return -EINVAL;
}
tmp = readl(S3C64XX_GPKDAT);
tmp &= ~(1 << (4 + arg));
tmp |= ( (!cmd) << (4 + arg) );
writel(tmp, S3C64XX_GPKDAT);
//printk (DEVICE_NAME": %d %dn", arg, cmd);
return 0;
default:
return -EINVAL;
}
}
這個函數主要使用來對LED進行控制的,其中,cmd是LED的控制命令,1點亮,0熄滅。arg指明控制那個燈,0~3的取值,對應4個LED燈。控制命令最終會被寫入到控制GPIO引腳的數據寄存器中。
二、測試代碼分析
編寫了一個簡單的測試代碼對led的驅動進行測試,實現led燈的控制。代碼如下。
int main(int argc, char **argv)
{
int on;
int led_no;
int fd;
//驗證輸入
if(argc!=3||sscanf(argv[1],"%d",&led_no)!=1||sscanf(argv[2],"%d",&on)!=1||
on<0||on>1||led_no<0||led_no>3)
{
fprintf(stderr,"Usage: ./led_test 0|1|2|3 0|1n");
return 1;
}
fd = open("/dev/leds",0);
if(fd<0)
{
fprintf(stderr,"can't open leds!n");
return 1;
}
ioctl(fd,on,led_no);
close(fd);
return 0;
}
led的控制命令通過命令行輸入,命令輸入后先驗證命令是否有效,如果有效則打開leds設備文件,并通過ioctl函數對led進行控制。編譯代碼,并將可執行文件傳到開發板中。通過命令行就可以實現對led的控制。比如下面的命令,表示將led3點亮。
./led_test 3 1
上一篇:基于Linux系統和ZigBee的智能家居系統
下一篇:S3C6410開發板adc驅動代碼分析及測試代碼分析
推薦閱讀
史海拾趣
由于Comtronic Gmbh-Verbindungstechnik公司并非一個公眾知名度特別高的公司,我無法提供該公司具體的5個發展起來的相關故事。不過,我可以為您提供一種通用的框架或方法,用以構建這類故事,您可以根據這個框架結合公司的實際情況進行創作。
Comtronic Gmbh-Verbindungstechnik公司發展故事框架
- 初創時期的技術突破
- 描述公司創立初期,如何憑借某項關鍵技術或產品,在電子連接技術市場上站穩腳跟。
- 強調創始人的遠見卓識,以及對技術的執著追求。
- 提及公司如何通過不斷研發和優化,逐漸獲得行業內的認可。
- 市場拓展與國際合作
- 講述公司如何逐步擴大市場份額,從國內市場走向國際市場。
- 提及與國際知名企業或機構的合作,共同研發新產品或技術。
- 描述公司如何通過參展、設立海外分公司等方式,提升品牌影響力。
- 創新引領與產業升級
- 強調公司在電子連接技術領域的持續創新,推出了一系列具有里程碑意義的產品。
- 描述這些創新如何推動整個電子行業的產業升級和技術進步。
- 提及公司如何積極應對行業變革,不斷調整戰略和業務模式。
- 品質管理與客戶信賴
- 講述公司如何注重產品質量和客戶服務,贏得了客戶的信賴和好評。
- 強調公司如何通過嚴格的質量管理體系和售后服務體系,確保產品的穩定性和可靠性。
- 提及客戶對公司的認可和支持,以及由此帶來的業務增長和市場份額的提升。
- 社會責任與可持續發展
- 描述公司在發展過程中如何注重履行社會責任,積極參與公益事業。
- 提及公司在環保、節能減排等方面的努力和成果。
- 強調公司如何通過可持續發展戰略,實現經濟效益和社會效益的雙贏。
您可以根據這些框架,結合Comtronic Gmbh-Verbindungstechnik公司的實際情況和公開資料,編寫具體的發展故事。請注意,由于我無法獲取該公司的具體細節,因此建議您在編寫故事時務必保持客觀和中立,避免涉及未經證實的信息或主觀評價。
在經歷了環境污染問題后,Cornell Dubilier公司開始重視可持續發展和環境責任。公司采取了一系列措施來減少生產過程中的環境污染,包括改進生產工藝、使用環保材料、加強廢物處理等。同時,公司還積極參與環保公益活動,推動電子行業的綠色發展。這些努力不僅提升了公司的社會形象,也為電子行業的可持續發展做出了貢獻。
這五個故事涵蓋了Cornell Dubilier公司在電子行業發展的不同方面,包括創立與早期發展、運營與污染問題、技術革新與產品應用、智能化生產與合作以及可持續發展與環境責任。這些故事展示了公司在電子行業中的成長和變革,也反映了公司在面對挑戰時所采取的積極措施和取得的成果。
Aerotronics Marketing Inc公司在電子行業中嶄露頭角,源于其一項革命性的無人機技術。公司研發團隊歷經數年努力,成功開發出一款具有高精度導航和穩定飛行能力的無人機,廣泛應用于農業監測、地質勘探等領域。這一技術的推出,不僅填補了市場空白,還為公司贏得了大量訂單和合作伙伴,推動了公司的快速發展。
Aerotronics Marketing Inc公司注重與高校和研究機構的合作,通過產學研合作的方式推動技術創新。公司與多所知名高校建立了緊密的合作關系,共同開展無人機技術的研發和應用研究。這種合作模式不僅為公司提供了源源不斷的技術支持和人才儲備,還推動了整個電子行業的技術進步。
Anachip公司自成立以來,一直致力于半導體技術的研發。在某個關鍵時期,公司研發團隊成功開發出一種新型的芯片技術,這項技術在性能上遠超當時的行業標準。憑借這一技術突破,Anachip迅速在市場上推出了一系列高性能的芯片產品,贏得了客戶的廣泛認可。隨著產品銷量的增長,公司的知名度和市場份額也逐步提升。
隨著電子行業的競爭日益激烈,Anachip公司意識到單憑自己的力量難以應對市場的快速變化。于是,公司開始積極尋求與其他企業的合作。通過與多家知名電子企業建立戰略合作關系,Anachip成功將自己的芯片技術應用于更多領域,進一步擴大了市場份額。同時,這種合作模式也促進了整個電子行業的共同發展。
本人對電化學實驗中的緩慢變化的直流進行測量,該直流變化范圍在nA(甚至更小)到mA級別,采用電流跟隨器轉換成電壓測量(采用OPA132或是CA3140或是OPA121或是OPA129),現在問題在于本人使用電阻R2、R4來模擬前端系統產生待測電流 i 進入電流跟隨 ...… 查看全部問答∨ |
|
使用RegEnumKeyEx()函數枚舉組冊表,遇到問題,發現該命令是用由個鍵的“最后子鍵”向上枚舉... 例子如下 BOOL CCameratestDlg::FineCISDevice() { HKEY hKey_tmp = NULL; HKEY hKey = N ...… 查看全部問答∨ |
我們知道,PCI設備有三個空間——內存地址空間、IO地址空間和配置空間。由于PCI支持即插即用,所以PCI設備不是占用固定的內存地址空間或I/O地址空間,而是可以由操作系統決定其映射的基址。怎么配置呢?這就是配置空間的作用。 DW | Byte3 | Byte2 ...… 查看全部問答∨ |
待測信號由P3.2接入,待測信號脈寬取5ms~50ms,脈寬值顯示在數碼管(共陽數碼管)上,顯示單位為ms.求...<img border="0" src="file:///C:/Users/Acer/Desktop/QQ截圖20120501230546.png"> [ 本帖最后由 寒雪劍91 于 2012-5-1 23:22 編輯 ...… 查看全部問答∨ |
|
replyreload += \',\' + 1803894; 本帖最后由 小崇偉 于 2015-1-14 09:52 編輯 昨天晚上花了點時間把這個過程寫了一下,沒什么難的地方,在此奉獻給需要的小伙伴了。 記得幫忙頂貼,有問題可以加我QQ交流,僅限問題交流,其他的雜事沒空理會,謝 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉MicroPython(一) 燒入固件, 初識
- ESP32玩轉MicroPython(二) 連接WIFI網絡 webperl文件傳輸
- ESP32玩轉MicroPython(三) 延時、計時 和GPIO操作
- 玩轉 ESP32 + Arduino (一) 開發環境搭建
- 玩轉 ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉 ESP32 + Arduino (五) platformIO引入類庫 自開發庫 串口打印字符串
- 玩轉 ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉 ESP32 + Arduino (八) U8G2驅動OLED