Linux驅動修鍊之道-LCD背光與gpio控制

來源:互聯網
上載者:User

  是LCD的引腳,GPG4是複用引腳,可以發送電源使能訊號。GPIO的程式很簡單,這裡不再贅述。

 

 

驅動程式:

#include <linux/init.h><br />#include <linux/module.h><br />#include <linux/fs.h><br />#include <mach/regs-gpio.h><br />#include <asm/io.h><br />#include <mach/hardware.h><br />#include <linux/device.h><br />#include <linux/cdev.h><br />#include <linux/delay.h><br />int MYGPIO_MAJOR = 0;<br />int MYGPIO_MINOR = 0;<br />#define MYGPIO_NAME "lwp-gpio"<br />dev_t dev_num;<br />struct cdev *gpio_cdev;<br />struct class *gpio_class;<br />int i;<br />static unsigned long led_table[]={<br /> S3C2410_GPF3,<br /> S3C2410_GPF4,<br /> S3C2410_GPF5,<br /> S3C2410_GPF6,<br />};<br />static unsigned long led_cfg_table[]={<br /> S3C2410_GPF3_OUTP,<br /> S3C2410_GPF4_OUTP,<br /> S3C2410_GPF5_OUTP,<br /> S3C2410_GPF6_OUTP,<br />};<br />int gpio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){<br /> switch(cmd){<br /> case -1:<br /> s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP); //關閉LCD背光<br /> s3c2410_gpio_setpin(S3C2410_GPG4, 0);<br /> break;<br /> case 1: //開啟背光<br /> s3c2410_gpio_setpin(S3C2410_GPG4, 1);<br /> break;<br /> case 2: //開啟流水燈<br /> while(1){<br /> for(i = 0; i < 4; i++)<br /> s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);<br /> for(i = 0; i < 4; i++){<br /> s3c2410_gpio_setpin(led_table[i],0);<br /> msleep(1000);<br /> s3c2410_gpio_setpin(led_table[i],1);<br /> }<br /> }<br /> break;<br /> case -2: //關閉流水燈<br /> for(i = 0; i < 4; i++){<br /> s3c2410_gpio_setpin(led_table[i],1);<br /> }<br /> break;<br /> case 3: //開啟蜂鳴器<br /> s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP);<br /> s3c2410_gpio_setpin(S3C2410_GPB0, 1);<br /> break;<br /> case -3: //關閉蜂鳴器<br /> s3c2410_gpio_setpin(S3C2410_GPB0, 0);<br /> break;<br /> default:<br /> break;<br /> }<br /> return 0;<br />}<br />int gpio_open(struct inode *inode, struct file *file){<br /> printk("gpio is opened success/n");<br /> return 0;<br />}<br />int gpio_close(struct inode *inode, struct file *file){<br /> printk("gpio is closed success/n");<br /> return 0;<br />}<br />struct file_operations gpio_ops = {<br /> .owner = THIS_MODULE,<br /> .ioctl = gpio_ioctl,<br /> .open = gpio_open,<br /> .release = gpio_close,<br />};<br />static int __init my_gpio_init(void){<br /> int ret;<br /> ret = alloc_chrdev_region(&dev_num, MYGPIO_MINOR, 1, MYGPIO_NAME); //分配裝置號<br /> if(ret < 0)<br /> printk("can't get major number/n");<br /> gpio_cdev = kmalloc(sizeof(struct cdev),GFP_KERNEL); //分配字父裝置<br /> if(!gpio_cdev){<br /> return -ENOMEM;<br /> goto fail_malloc;<br /> }<br /> memset(gpio_cdev,0,sizeof(struct cdev));<br /> cdev_init(gpio_cdev, &gpio_ops); //初始化字父裝置<br /> cdev_add(gpio_cdev, dev_num, 1); //字元裝置註冊到系統<br /> gpio_class = class_create(THIS_MODULE,MYGPIO_NAME); //在/sys下建立一個類<br /> if(IS_ERR(gpio_class)){<br /> printk("ERROR: Fail to create gpio_class class/n");<br /> return -1;<br /> }<br /> device_create(gpio_class,NULL,dev_num,NULL,MYGPIO_NAME); //建立裝置節點<br /> printk("gpio_cdev is registered success/n");<br />fail_malloc:<br /> unregister_chrdev_region(dev_num, 1);<br /> return 0;<br />}<br />static void __exit my_gpio_exit(void){<br /> unregister_chrdev_region(dev_num, 1);<br /> cdev_del(gpio_cdev);<br /> kfree(gpio_cdev);<br /> device_destroy(gpio_class,dev_num);<br /> class_destroy(gpio_class);<br /> printk("gpio_cdev is dereigstered success/n");<br />}<br />module_init(my_gpio_init);<br />module_exit(my_gpio_exit);<br />MODULE_LICENSE("GPL");<br />MODULE_AUTHOR("liwanpeng");

測試程式:

#include <stdio.h><br />#include <stdlib.h><br />#include <fcntl.h><br />#include <sys/ioctl.h><br />int main(){<br />int fd, cmd;<br />cmd = 0;<br />fd = open("/dev/lwp-gpio",O_RDWR);<br />if(fd < 0){<br />printf("cannot open /dev/lwp-gpio/n");<br />exit(1);<br />}<br />while(1){<br />scanf("%d", &cmd);<br />printf("cmd is %d/n",cmd);<br />ioctl(fd, cmd);<br />}<br />close(fd);<br />return 0;<br />}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.