#include <linux/miscdevice.h>
#include #include #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "led1" unsigned long GPIOK_VA_BASE ; #define GPIOK_CON0 GPIOK_VA_BASE #define GPIOK_CON1 GPIOK_VA_BASE+0X4 #define GPIOK_DAT GPIOK_VA_BASE+ 0X8 #define GPIOK_PUD GPIOK_VA_BASE +0XC #define GPIOK_PA_BASE 0X7F008800 struct resource led_resource = { .name = "led io-mem ", .start = GPIOK_PA_BASE, .end = GPIOK_PA_BASE +0X10, .flags = IORESOURCE_MEM, }; static void led_pin_setup(void) { unsigned long start = led_resource.start; unsigned long size = led_resource.end - led_resource.start; unsigned long tmp; request_mem_region(start,size,led_resource.name); GPIOK_VA_BASE = (unsigned long)ioremap(start,size); printk ("<1> [GPIOK_VA_BASE = 0x%lx]n", GPIOK_VA_BASE); tmp = readl(GPIOK_CON0); tmp = (tmp & ~(0xffffu<<16))|(0x1111u<<16); writel(tmp,GPIOK_CON0); tmp = readl(GPIOK_DAT); tmp |= (0xf <<4); writel(tmp,GPIOK_DAT); } static void led_pin_release(void) { iounmap((void*)GPIOK_VA_BASE); release_mem_region(led_resource.start,led_resource.end - led_resource.start); } static unsigned long led_getdata(void) { return ((readl(GPIOK_DAT)>>4)& 0XF); } static void led_setdata(int data) { unsigned long temp; temp = readl(GPIOK_DAT); temp = ~(0xF<<4) | ((data&0xF)<<4); writel(temp,GPIOK_DAT); } static ssize_t led_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos) { int ret = 0; char buffer[1]; memset(buffer,0,sizeof(buffer)); buffer[0] = (char)led_getdata() ; if(copy_to_user(buf,buffer,size)) { ret = -EFAULT; } return size; } static ssize_t led_write(struct file *flip,const char __user *buf,size_t size,loff_t *ppos) { int ret = 0; unsigned long buffer[1]; memset(buffer,0,sizeof(buffer)); if(copy_from_user(buffer,buf,size)) { printk("errorn"); ret = -EFAULT; } else{ led_setdata(0x00); led_setdata((int )buffer[0]); } return ret; } static struct file_operations dev_fops ={ .owner = THIS_MODULE, .read = led_read, .write = led_write, }; static struct miscdevice misc ={ .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops, }; static int __init dev_init(void) { int ret; led_pin_setup(); ret = misc_register(&misc); printk(DEVICE_NAME"initialize minor =%dn",misc.minor); return ret; } static void __exit dev_exit(void) { led_pin_release(); misc_deregister(&misc); } module_init(dev_init); module_exit(dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("GOAT.ZHOU"); 以上的是led的驅(qū)動文件,以write 向led里寫數(shù)據(jù),read讀取led的狀態(tài)。 以下的是測試程序 led_app.c #include #include #include #include #include #include #include char binstr_to_int(char *binstr) { char ret = 0, i = 0; char bnum[5]; memset(bnum, '0', 4); int len = strlen(binstr); if (len > 4) strcpy(bnum, binstr+len-4); else strcpy(bnum+4-len, binstr); for (i=0; i<4; i++) { ret <<= 1; ret += (bnum[i]=='0'? 1: 0); } return ret; } int main(int argc, char *argv[]) { int fd; unsigned char buff[1]; fd = open("/dev/led1",O_RDWR); if(fd == -1){ printf("open dev error"); _exit(EXIT_FAILURE); } buff[0] = binstr_to_int(argv[1]); write(fd,buff,sizeof(buff)); memset(buff,0,sizeof(buff)); printf("%dn", read(fd,buff,sizeof(buff))); printf("%d",(int)buff[0]); close(fd); return 0; }
上一篇:s3c6410 uart 裸機 輪詢 非fifo
下一篇:Linux內(nèi)核模塊驅(qū)動之---led驅(qū)動
推薦閱讀
史海拾趣
在電子行業(yè)快速發(fā)展的背景下,E. Dold & S?hne KG公司始終緊跟科技潮流,致力于技術創(chuàng)新。公司投入大量資源研發(fā)新型電子元件和系統(tǒng),以滿足市場對于高性能、高可靠性產(chǎn)品的需求。通過不斷的技術創(chuàng)新,E. Dold & S?hne KG公司在行業(yè)內(nèi)樹立了良好的口碑,成為眾多知名企業(yè)的合作伙伴。
隨著電子行業(yè)的快速發(fā)展,Comchip Technology不斷追求技術創(chuàng)新和產(chǎn)品升級。公司通過大量研發(fā)投入,成功開發(fā)出了橋式整流器、高效快速整流器等一系列具有市場競爭力的產(chǎn)品。這些產(chǎn)品不僅提高了電子設備的性能,還降低了能耗,贏得了客戶的廣泛認可。
為了進一步擴大市場份額,Comchip Technology積極開拓國內(nèi)外市場,與多家知名企業(yè)建立了長期穩(wěn)定的合作關系。同時,公司還加強了與國際同行的交流與合作,引進了先進的技術和管理經(jīng)驗,不斷提升自身的競爭力。
品質(zhì)是Comchip Technology公司的生命線。公司始終堅持嚴格的質(zhì)量管理體系,通過ISO9001、ISO14001等多項國際質(zhì)量認證,確保產(chǎn)品質(zhì)量的穩(wěn)定性和可靠性。同時,公司還建立了完善的售后服務體系,為客戶提供及時、專業(yè)的技術支持和服務。
在追求經(jīng)濟效益的同時,CCC也注重環(huán)境保護和可持續(xù)發(fā)展。公司積極采用環(huán)保材料和生產(chǎn)工藝,減少對環(huán)境的影響。同時,CCC還積極參與環(huán)保公益活動,推動環(huán)保理念在員工和社會中的普及。這種環(huán)保理念不僅提升了CCC的企業(yè)形象也為其在競爭激烈的市場中贏得了更多優(yōu)勢。
請注意,以上故事僅為概述,具體內(nèi)容和細節(jié)可能需要根據(jù)實際情況進行補充和完善。同時,由于篇幅限制,每個故事的字數(shù)可能無法完全達到500字的要求。
Cantec Electronic Co Ltd最初只是電子產(chǎn)業(yè)鏈中的一家小公司,專注于生產(chǎn)電子元器件。然而,在一次偶然的技術研發(fā)中,公司成功開發(fā)出了一種新型的節(jié)能芯片,這一技術突破使得公司的產(chǎn)品在市場上大受歡迎。隨著訂單量的不斷增加,公司逐漸擴大了生產(chǎn)規(guī)模,提升了研發(fā)實力,開始在電子行業(yè)中嶄露頭角。
現(xiàn)在公司準備用c#開發(fā)一個項目 運行在wince平臺上。 我現(xiàn)在還沒搞清楚 這個環(huán)境應該怎么搭建。 有沒有樂于助人的? 幫幫我這個可憐的人吧。 感謝 萬分感謝。 Q:252847391 非誠勿 ...… 查看全部問答∨ |
|
那位高手用過dp-1581+單片機開發(fā)過東西,現(xiàn)在學習中... 那位高手用過dp-1581+單片機開發(fā)過東西,現(xiàn)在學習中...能給點代碼參考學習一下,那怕最簡單的都可以,只是學習用的現(xiàn)在手里有一個仿真板 stc89c52+dp-1581 玩了幾天也沒玩轉(zhuǎn),望高手指教一下,學習中...... … 查看全部問答∨ |
我用PB編譯好了winCE內(nèi)核后,已經(jīng)把鏡像下載到了目標平臺上,跑起來了。現(xiàn)在下一步是開發(fā)應用程序,就是把evc下的應用程序也下載到目標平臺上。我不想使用把應用程序編譯到內(nèi)核然后一起下載到目標板上的的方法,覺得那樣不夠靈活。請問內(nèi)核下載到目 ...… 查看全部問答∨ |
如果沒有過硬的駕駛技巧,是很難讓汽車實現(xiàn)360度的原地旋轉(zhuǎn)的。然而有了我們今天為大家介紹的這款概念車,這種“特技”就變成了家常便飯。 這款概念車的四個輪子與車體的連接處都被設計成了弧形的,因此四個輪子 ...… 查看全部問答∨ |
|
當波特率為19200,38400或者57600時,電腦接收到的數(shù)據(jù)正常,當用9600時,電腦接收到的數(shù)據(jù)有時候被分成兩部分。 這會是什么原因,請指點。 圖片.pdf (36.88 KB) 下載次數(shù):63 2009-12-7 17: ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 宇稱電子發(fā)布8通道多閾值ASIC芯片:重構(gòu)激光雷達產(chǎn)業(yè)格局,開啟“ASIC平權(quán)”時代
- 三星SDI與LGES將在美國設置磷酸鐵鋰電池生產(chǎn)線
- 福特汽車公司申請新專利 或?qū)⒋钶d車輛噪音控制系統(tǒng)
- 福特汽車申請新專利 福特Pro Power Onboard或新增安全模式
- 華為乾崑如何驅(qū)動中國智能汽車產(chǎn)業(yè)共創(chuàng)?
- 激光雷達VS純視覺,小米小鵬隔空交鋒
- 機器人實現(xiàn)空中變形 飛行與地面行駛模式無縫切換
- -35℃直充技術顛覆革新,邢東鋰電引領低溫電池進入“直充時代”!
- 硬核解讀:人形機器人跑“半馬”映射出哪些產(chǎn)業(yè)問題
- V2X 連接器產(chǎn)品綜述