




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、字符驅(qū)動(dòng)實(shí)例本實(shí)驗(yàn)電路圖4 個(gè)LED 指示燈的接口電路驅(qū)動(dòng)程序#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 定義request_mem_region所需的頭文件定義I/O讀寫,I/O內(nèi)存讀寫所需的頭文件定義ioctl函數(shù)所需的頭文件定義ioctl函數(shù)所需的頭文件定義延遲與定時(shí)器函數(shù)所需的頭文件定義中斷函數(shù)所需的頭文件#define CDRIVER_NAME
2、 LED_chrdev#define GPFCON (0X56000050)#define GPFDAT (0X56000054)#define GPFUP (0X56000058)static void *gpfcon;static void *gpfdat;static void *gpfup;int CDRIVER_MAJOR=0;int CDRIVER_MINOR=0;int count=1;定義物理地址定義映射后的虛擬地址指針loff_t LED_llseek (struct file *filp,loff_t off,int whence);int LED_ioctl(struct
3、 inode *inode,struct file *filp,unsigned int cmd,unsigned long arg);int LED_open(struct inode *inode,struct file *filp);int LED_release(struct inode *inode,struct file *filp);extern struct file_operations LED_fops;struct cdev *LED_cdev;dev_t LED_dev;struct file_operations LED_fops= .owner =THIS_MODU
4、LE, .llseek =LED_llseek, .open =LED_open, .release=LED_release,;static int _init LED_init(void)if(!request_mem_region(GPFCON,12,CDRIVER_NAME)printk(KERN_ERR LED:io%X is not free.n,GPFCON);return -EBUSY;gpfcon=ioremap_nocache(GPFCON,4);gpfdat=ioremap_nocache(GPFDAT,4);gpfup=ioremap_nocache(GPFUP,4);i
5、f(!gpfcon)printk(KERN_ERR LED:ioremap failedn);iounmap(gpfcon);return -EINVAL;懇求I/O內(nèi)存I/O內(nèi)存映射假設(shè)映射不勝利,釋放if(!gpfdat)printk(KERN_ERR LED:ioremap failedn);iounmap(gpfdat);return -EINVAL;if(!gpfup)printk(KERN_ERR LED:ioremap failedn);iounmap(gpfup);return -EINVAL;return 0;假設(shè)映射不勝利,釋放假設(shè)映射不勝利,釋放int LED_open(
6、struct inode *inode,struct file*filp)printk(LED Device is openedn);writel(readl(gpfcon)&(114), gpfcon);writel(readl(gpfup)&(17), gpfup);writel(readl(gpfdat)&(07), gpfdat); ssleep(1); writel(readl(gpfdat)&(17), gpfdat); ssleep(1); writel(readl(gpfdat)&(07), gpfdat);try_module_get(THIS_MODULE); return
7、 0;設(shè)為輸出端口上拉制止輸出低電平,燈亮輸出高電平,燈滅/*Release*/int LED_release(struct inode *inode,struct file *filp)printk(LED Decice is released!n);writel(readl(gpfcon)&(014),4);writel(readl(gpfup)&(17),4);writel(readl(gpfdat)&(07),4);module_put(THIS_MODULE);return 0;static void _exit LED_exit(void) printk(Unloading LED
8、_cdev now.n);iounmap(gpfcon);iounmap(gpfdat);iounmap(gpfup);cdev_del(LED_cdev);unregister_chrdev_region(LED_dev,count);釋放內(nèi)存makefileifneq ($(KERNELRELEASE),) obj-m := LED_chrdev.oelseKERNELDIR ?=/usr/src/fs2410_2.6.8/ PWD := $(shell pwd)default:$(MAKE) -C $(KERNELDIR) M=$(PWD) endif最終生成LED_chrdev.ko的
9、可執(zhí)行文件運(yùn)用程序#include #include #include #include #include #include #include #define DEVICE_GPIOTEST /dev/LED_chrdevint main(int argc, char *argv)int fd;fd=open(DEVICE_GPIOTEST,O_RDONLY);提供對(duì)文件控制的函數(shù)open等 提供對(duì)I/O控制的函數(shù)提供錯(cuò)誤號(hào)errno的定義,用于錯(cuò)誤處置 linux/unix的系統(tǒng)調(diào)用,包含了許多系統(tǒng)效力的函數(shù)原型,例如 read,write等函數(shù)。 if(fd0)perror(can not
10、 open device);exit(1);close(fd);return 0;makefileCC=/usr/local/3.3.2/bin/arm-linux-gccLD=/usr/local/3.3.2/bin/arm-linux-ldINCLUDE=/usr/local/3.3.2/include/LIB=/usr/local/3.3.2/lib/ TEST_LED :TEST_LED.o$(LD) -r TEST_LED.o -o TEST_LEDTEST_LED.o:TEST_LED.c$(CC) -O2 -Wall -I$(INCLUDE) -L$(LIB) -c TEST_L
11、ED.c -o TEST_LED.o最終生成TEST_LED的可執(zhí)行文件將驅(qū)動(dòng)程序編譯進(jìn)內(nèi)核在超級(jí)終端下將驅(qū)動(dòng)程序LED_chrdev.ko和運(yùn)用程序TEST_LED下載到/tmp途徑下執(zhí)行Chmod 755 LED_chrdev.koChmod 755 TEST_LEDInsmod LED_chrdev.ko./TEST_LED察看燈的情況!將驅(qū)動(dòng)程序編譯進(jìn)內(nèi)核一.將驅(qū)動(dòng)程序LED_chrdev.c放在相應(yīng)的目錄下,比如對(duì)于字符設(shè)備,就放置在fs2410/drivers/char/;二.修正drivers/Makefile文件三.修正drivers/Kconfig配置文件四.重新編譯內(nèi)核,下
12、載將驅(qū)動(dòng)程序放在相應(yīng)的目錄下修正drivers/char/Makefile修正drivers/char/Makefile修正drivers/char/Kconfig這些將出如今內(nèi)核的編譯配置中簡(jiǎn)化我們的設(shè)計(jì)對(duì)I/O端口定義的簡(jiǎn)化,參與頭文件#include 對(duì)I/O端口操作的簡(jiǎn)化,參與頭文件#include #include #include I/O端口不同功能的定義對(duì)特殊功能存放器的定義#include 在中包含了對(duì)I/O端口操作的函數(shù)extern void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);extern
13、 void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);extern void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);extern unsigned int s3c2410_gpio_getpin(unsigned int pin);函數(shù)在arch/arm/mach-s3c2410/gpio.c中定義/* s3c2410_gpio_cfgpin: 設(shè)定特定端口的功能* eg: * s3c2410_gpio_cfgpin(S3C2410_GPA0, S3C24
14、10_GPA0_ADDR0); * s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_OUTP);*/將GPF7設(shè)置成輸出端口s3c2410_gpio_cfgpinvoid s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function) static void *base ;unsigned long mask;unsigned long con;unsigned long flags;base = ioremap_nocache(S3C2410_GPIO_PA_BASE(pin),0 x00
15、00004);if (pin S3C2410_GPIO_BANKB) mask = 1 S3C2410_GPIO_OFFSET(pin); else mask = 3 disable the pull-up * 0 = enable the pull-up * * 例子: * * s3c2410_gpio_pullup(S3C2410_GPB0, 0); * s3c2410_gpio_pullup(S3C2410_GPF7, 1);*/s3c2410_gpio_getpinunsigned int s3c2410_gpio_getpin(unsigned int pin); * * 設(shè)置特定輸
16、入端口的值 * * 前往非0= 高電平 * 0 = 低電平 * * 例子: * * s3c2410_gpio_getpin (S3C2410_GPB0); * s3c2410_gpio_getpin (S3C2410_GPE8);*/s3c2410_gpio_getpinunsigned int s3c2410_gpio_getpin(unsigned int pin)static void *data;unsigned long offs = S3C2410_GPIO_OFFSET(pin);data = ioremap_nocache(S3C2410_GPIO_PA_BASE(pin) +
17、 0 x04 , 0 x0000004);return _raw_readl(data) & (1 高電平 * 0 = 低電平 * * 例子: * * s3c2410_gpio_setpin(S3C2410_GPB0, 0); * s3c2410_gpio_setpin (S3C2410_GPF7, 0);*/對(duì)驅(qū)動(dòng)程序的修正#include #include 對(duì)I/O端口定義的頭文件對(duì)I/O端口操作的頭文件static int _init LED_init(void)s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_OUTP); s3c2410_g
18、pio_pullup(S3C2410_GPF7, 1); s3c2410_gpio_setpin (S3C2410_GPF7, 0);return -EINVAL;int LED_open(struct inode *inode,struct file*filp)printk(LED Device is openedn);s3c2410_gpio_setpin (S3C2410_GPF7, 0); ssleep(1); s3c2410_gpio_setpin (S3C2410_GPF7, 1); ssleep(1); s3c2410_gpio_setpin (S3C2410_GPF7, 0);
19、try_module_get(THIS_MODULE); return 0;/*Release*/int LED_release(struct inode *inode,struct file *filp)printk(LED Decice is released!n); s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_INP); s3c2410_gpio_pullup(S3C2410_GPF7, 0); s3c2410_gpio_setpin (S3C2410_GPF7, 1);module_put(THIS_MODULE);return 0;中
20、斷驅(qū)動(dòng)程序的簡(jiǎn)化#include #include 對(duì)各個(gè)中斷號(hào)的定義對(duì)中斷存放器定義的頭文件asm-arm/arch-s3c2410/irq.hIrq:表示所要懇求的中斷號(hào);中斷號(hào)在include/asm-arm/arch-s3c2410/irq.h中定義asm-arm/arch-s3c2410/irq.h#include 在中定義有中斷操作的相關(guān)函數(shù),可以經(jīng)過extern 語句參與這些函數(shù)在中定義有中斷操作的相關(guān)函數(shù)s3c_irq_mask(unsigned int irqno)/中斷屏蔽s3c_irq_unmask(unsigned int irqno)/中斷使能s3c_irq_ack
21、(unsigned int irqno)/清中斷掛起void _init s3c2410_init_irq(void)/ 中斷初始化s3c_irqext_mask(unsigned int irqno)/外部中斷屏蔽s3c_irqext_ack(unsigned int irqno)/清外部中斷掛起s3c_irqext_unmask(unsigned int irqno)/外部中斷使能函數(shù):s3c_irq_mask(unsigned int irqno)參數(shù): irqno表示中斷號(hào)作用: 屏蔽特定中斷例子:s3c_irq_maskIRQ_EINT0s3c_irq_mask(unsigned int irqno)unsigned long mask;irqno -= IRQ_EINT0;mask = _raw_readl(S3C2410_INTMSK);mask |= 1UL irqno;_raw_writel(mask, S3C2410_INTMSK);函數(shù):s3c_i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 版人力資源公司勞務(wù)協(xié)作合同樣本
- 股權(quán)投資退出合同范本
- 個(gè)人車輛抵押合同
- 普法宣講【法律學(xué)堂】第二十一章 刑事附帶民事起訴狀-ldfjxs004
- 肇慶市實(shí)驗(yàn)中學(xué)高三上學(xué)期語文高效課堂教學(xué)設(shè)計(jì):語言運(yùn)用擴(kuò)展語段
- 張家口學(xué)院《高級(jí)視唱》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇省南京市建鄴區(qū)金陵河西區(qū)市級(jí)名校2025屆初三下學(xué)期第四次模擬考試物理試題試卷含解析
- 新疆阿克蘇地區(qū)烏什縣二中2025年高三第二次診斷性測(cè)試生物試題試卷含解析
- 江蘇省鹽城市部分地區(qū)2025年初三5月月考數(shù)學(xué)試題文試題含解析
- 長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院《虛擬現(xiàn)實(shí)交互設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- (中職中專)汽車修理基本技能完整版課件匯總?cè)珪娮咏贪?最新)
- 人員進(jìn)出潔凈區(qū)更衣流程圖
- 林業(yè)政策法規(guī)考試題庫(含答案)
- 機(jī)械、設(shè)備掛靠協(xié)議范本、合同、合約
- 管理前沿理論試題總結(jié)
- 馬坑鐵礦450-200鉬礦床的地下開采方案設(shè)計(jì)采礦工程專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論
- 高三英語教研組建設(shè)(課堂PPT)
- 排水管道非開挖預(yù)防性修復(fù)可行性研究報(bào)告
- 讀書知識(shí)競(jìng)賽試題含答案
- 企業(yè)全面戰(zhàn)略管理、年度經(jīng)營(yíng)計(jì)劃、預(yù)算管理、績(jī)效管理
- SOP0420201潔凈空調(diào)系統(tǒng)清潔消毒預(yù)防性維護(hù)保養(yǎng)操作規(guī)程報(bào)告
評(píng)論
0/150
提交評(píng)論