嵌入式led驱动程序

上传人:油条 文档编号:1272132 上传时间:2017-06-04 格式:PPT 页数:43 大小:1.49MB
返回 下载 相关 举报
嵌入式led驱动程序_第1页
第1页 / 共43页
嵌入式led驱动程序_第2页
第2页 / 共43页
嵌入式led驱动程序_第3页
第3页 / 共43页
嵌入式led驱动程序_第4页
第4页 / 共43页
嵌入式led驱动程序_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《嵌入式led驱动程序》由会员分享,可在线阅读,更多相关《嵌入式led驱动程序(43页珍藏版)》请在金锄头文库上搜索。

1、LED Charactor Device Driver,LED设备电路原理图,S3C44B0X处理器手册,#define GPIO_CONC_ADDR 0x01d20010 /PortC#define GPIO_DATA_ADDR 0x01d20014 /PortCvolatile u32 *Regconc,*Regdata;Regconc = (volatile u32 *)(GPIO_CONC_ADDR);Regdata = (volatile u32 *)(GPIO_DATA_ADDR);,端口C控制寄存器,第0位置0*Regconc = *Regconc & (1u)第0位置1*Reg

2、conc = *Regconc | 1u第arg位置0*Regconc = *Regconc & (1u arg)第arg位置1*Regconc = *Regconc | 1u arg,端口C控制寄存器,配置端口C的PC1、PC2、PC3为输出,配置C端口的第arg口为输出GPIO_CFG_PIN_OUT,*Regconc = *Regconc & (1u (2*arg + 1); *Regconc = *Regconc | 1u (2*arg);,配置C端口的第arg口为输入GPIO_CFG_PIN_IN,*Regconc = *Regconc & (1u (2*arg);*Regconc

3、= *Regconc & (1u (2*arg + 1);,端口C数据寄存器,case GPIO_SET_PIN: if (arg 16) *Regdata |= 1u arg; case GPIO_CLR_PIN: if (arg 16) *Regdata &= (1u arg); ,LED驱动程序,gpio.h,#include #define GPIO_SET_PIN 0#define GPIO_CLR_PIN 1#define GPIO_CFG_PIN_OUT 2#define GPIO_CFG_PIN_IN 3,gpio.c,#include#include#include#incl

4、ude#include#include#include#includegpio.h,static int gpio_open ( struct inode *inode, struct file *filp );static int gpio_release ( struct inode *inode, struct file *filp );static int gpio_ioctl ( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long param );#define GPIO_MAJOR_NR 1

5、26 #define DEVICE_NAME gpio #define GPIO_CONC_ADDR 0x01d20010 /PortC#define GPIO_DATA_ADDR 0x01d20014 /PortC,file_operations,struct file_operations gpio_fops = open:gpio_open, release:gpio_release,ioctl:gpio_ioctl,;,int _init gpio_init(void) register_chrdev(GPIO_MAJOR_NR, DEVICE_NAME, &gpio_fops); r

6、eturn 0; void _exit gpio_cleanup(void) unregister_chrdev(GPIO_MAJOR_NR, DEVICE_NAME);,static int gpio_open (struct inode *inode, struct file *filp) MOD_INC_USE_COUNT;return 0;static int gpio_release (struct inode *inode, struct file *filp) MOD_DEC_USE_COUNT;return 0;,static int gpio_ioctl ( struct i

7、node *inode,struct file *filp,unsigned int cmd,unsigned long param );, int num; volatile u32 *Regconc,*Regdata; Regconc = (volatile u32 *)(GPIO_CONC_ADDR);Regdata = (volatile u32 *)(GPIO_DATA_ADDR);switch(cmd)case GPIO_SET_PIN:*Regdata |= 1u arg; break;case GPIO_CLR_PIN:*Regdata &= (1u arg);break;,c

8、ase GPIO_CFG_PIN_OUT:*Regconc &= (1u (2*arg + 1);*Regconc |= 1u (2*arg); break;case GPIO_CFG_PIN_IN: *Regconc &= (1u (2*arg);*Regconc &= (1u (2*arg + 1); break; return 0;,static int gpio_ioctl ( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);,驱动测试与应用程序(main.c ),#include

9、#include#includegpio.hint main(void) int fd; int loop; fd = open(“/dev/gpio”,O_RDONLY); ioctl(fd,GPIO_CFG_PIN_OUT,1); ioctl(fd,GPIO_CFG_PIN_OUT,2); ioctl(fd,GPIO_CFG_PIN_OUT,3);,loop = 0;while (loop+ 10) ioctl(fd,GPIO_CLR_PIN,3); ioctl(fd,GPIO_SET_PIN,1);sleep(1); ioctl(fd,GPIO_CLR_PIN,1); ioctl(fd,

10、GPIO_SET_PIN,2); sleep(1); ioctl(fd,GPIO_CLR_PIN,2); ioctl(fd,GPIO_SET_PIN,3);sleep(1); close(fd); return 0;,无操作系统的硬件控制程序,#include#include#includegpio.hint main(void)return 0;,gpio_ioctl(GPIO_CFG_PIN_OUT,1);.while (loop+ 10) gpio_ioctl (fd,GPIO_CLR_PIN,3); gpio_ioctl (fd,GPIO_SET_PIN,1);sleep(1); .

11、,static int gpio_ioctl (uint cmd, ulong arg) .switch(cmd) case GPIO_SET_PIN: *Regdata |= 1u arg; . .,LED,带操作系统的硬件控制程序,#includegpio.hint main(void) fd = open(“/dev/gpio”,O_RDONLY); ioctl(fd,GPIO_SET_PIN_OUT,1); ioctl(fd,GPIO_SET_PIN_OUT,2); ioctl(fd,GPIO_SET_PIN_OUT,3); while (loop+ 10) . ioctl(fd,GP

12、IO_CLR_PIN,1); . close(fd); ,static struct file_operations gpio_fops = ioctl:gpio_ioctl, open:gpio_open, release:gpio_release,;int _init gpio_init(void) register_chrdev(GPIO_MAJOR_NR, DEVICE_NAME, &gpio_fops);void _exit gpio_cleanup(void) unregister_chrdev(GPIO_MAJOR_NR, DEVICE_NAME);static int gpio

13、_open (.) MOD_INC_USE_COUNT;static int gpio_release (.) MOD_DEC_USE_COUNT;static int gpio_ioctl (., ., uint cmd, ulong arg)switch(cmd) case GPIO_SET_PIN: *Regdata |= 1u arg; break;case GPIO_CLR_PIN: . case GPIO_SET_PIN_OUT: . case GPIO_SET_PIN_IN: . ,mem.cgpio_init(void)gpio_fops ioctl:gpio_ioctl, open:gpio_open, release:gpio_release,;,LED,#includegpio.hint main(void)fd = open(“/dev/gpio”,O_RDONLY); ioctl(fd,GPIO_SET_PIN_OUT,1); ioctl(fd,GPIO_SET_PIN_OUT,2); ioctl(fd,GPIO_SET_PIN_OUT,3); while (loop+ 10) . ioctl(fd,GPIO_CLR_PIN,1); . close(fd); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号