嵌入式LED驱动程序
<span style="font-size:18px;">#include <linux/config.h>//配置头文件
#include <linux/kernel.h>//内核头文件
#include <linux/sched.h>
#include <linux/timer.h>//时钟头文件
#include <linux/init.h>//用户定义模块初始函数名需引用的头文件
#include <linux/module.h>//模块加载的头文件
#include <asm/hardware.h>// GPIO_LED DEVICE MAJOR
#define GPIO_LED_MAJOR 97 //定义设备号// define LED
#define LED1 (GPF4) //声明四个LED灯的I/O端口
#define LED2 (GPF5)
#define LED3 (GPF6)
#define LED4 (GPF7)//define LED STATUS
#define LED_ON 0 //定义LED灯的状态
#define LED_OFF 1// define cmd
#define ctl_GPIO_LED1 1struct file_operations GPIO_LED_ctl_ops ={open: GPIO_LED_open,read: GPIO_LED_read,write: GPIO_LED_write,ioctl: GPIO_LED_ioctl,release: GPIO_LED_release,
};// ------------------- READ ------------------------
ssize_t GPIO_LED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)
{return count;
} // ------------------- WRITE -----------------------
ssize_t GPIO_LED_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)
{return count;
} // ------------------- IOCTL -----------------------
ssize_t GPIO_LED_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)
{switch (cmd){case LED_ON : { GPFDAT &=0x0f; break;}case LED_OFF: { GPFDAT |=0xf0; break;}default :{printk ("lcd control : no cmd run [ --kernel-- ]\n"); return (-EINVAL);}}return 0;}// ------------------- OPEN ------------------------
ssize_t GPIO_LED_open (struct inode * inode ,struct file * file)
{MOD_INC_USE_COUNT;return 0;
} // ------------------- RELEASE/CLOSE ---------------
ssize_t GPIO_LED_release (struct inode * inode ,struct file * file)
{MOD_DEC_USE_COUNT;return 0;
}
// -------------------------------------------------// ------------------- INIT ------------------------
static int GPIO_LED_CTL_init(void)
{int ret = -ENODEV;printk("--------------------------------------------\n\n");// init GPIO//=== PORT F GROUP//Ports : GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0//Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0//Setting: Output Output Output Output EINT3 EINT2 EINT1 EINT0//Binary : 01 01 , 01 01 , 10 10 , 10 10GPFCON = 0x55aa; // 设置端口为I/O输出模式GPFUP = 0xff; // 关闭上拉功能GPFDAT =0xf0;//初始值为高电平熄灭LED灯ret = devfs_register_chrdev(GPIO_LED_MAJOR, "gpio_led_ctl", &GPIO_LED_ctl_ops);if( ret < 0 ){printk (" S3C2410: init_module failed with %d\n", ret); return ret;}else{printk("S3C2410 gpio_led_driver register success!!! \n");}return ret;
}static int __init S3C2410_GPIO_LED_CTL_init(void)
{int ret = -ENODEV;ret = GPIO_LED_CTL_init();if (ret)return ret;return 0;
}static void __exit cleanup_GPIO_LED_ctl(void)
{devfs_unregister_chrdev (GPIO_LED_MAJOR, "gpio_led_ctl" );}
module_init(S3C2410_GPIO_LED_CTL_init);
module_exit(cleanup_GPIO_LED_ctl);</span>
在GPIO_LED_CTL_init()函数里初始化对应IO口的寄存器:
在GPIO_LED_ioctl ()函数中根据传入的cmd设置相应的寄存器控制IO口输出。
测试程序如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>#include <fcntl.h> // open() close()
#include <unistd.h> // read() write()#define DEVICE_NAME "/dev/gpio_led_ctl"//define LED STATUS
#define LED_ON 0
#define LED_OFF 1//------------------------------------- main ---------------------------------------------
int main(void)
{int fd;int ret;char *i;printf("\nstart gpio_led_driver test\n\n");fd = open(DEVICE_NAME, O_RDWR);printf("fd = %d\n",fd);if (fd == -1){printf("open device %s error\n",DEVICE_NAME);}else{while(1){ ioctl(fd,LED_OFF);sleep(1);//等待1秒再做下一步操作ioctl(fd,LED_ON);sleep(1);}// close ret = close(fd);printf ("ret=%d\n",ret);printf ("close gpio_led_driver test\n");}return 0;
}// end main
嵌入式LED驱动程序相关推荐
- 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
文章目录 1.1 怎么写LED驱动程序? 1.2 百问网IMX6ULL的LED驱动程序 1.2.1 led原理图 1.2.2 所涉及的寄存器操作 1.2.3 写程序 1.2.4 上机实验 1.2.5 ...
- 嵌入式I.MX6ULL裸机开发学习(一)汇编LED驱动程序
一.学习之路的开始 购买了I.MX6ULL mini开发板进行学习,开发环境为Linux,上学期的Linux课程中,我已将电脑配置好Ubuntu,熟悉了Linux基本操作.之前并没有学过怎么在物理机与 ...
- 嵌入式驱动编写-点亮LED驱动程序
在开发板上,有三个LED灯.如何通过应用程序点亮这三个灯如何编写驱动程序 操作硬件的时候,我们需要准备开发板的原理图和开发手册,,根据这两个文档来进行配置 在source insight 编写代码 1 ...
- 【Linux笔记】LED驱动程序
前言 上一篇我们分享了字符设备驱动框架:[Linux笔记]驱动基础篇,当时分享的是hello驱动程序. 学STM32我们从点灯开始,学Linux驱动我们自然也要点个灯来玩玩,尽量在从这些基础例程中榨取 ...
- LED驱动程序第一课
1.LED驱动程序是怎么被调用的 首先我们来看看应用程序怎么去操作一个led灯: int main(int argc, char **argv) {int fd,status;//文件句柄和led灯状 ...
- 嵌入式Linux驱动程序开发
嵌入式Linux驱动程序开发 1.设备驱动程序的概念... 2 2.处理器与设备间数据交换方式... 2 21.查询方式... 2 2.2.中断方式... 3 2.3.直接访问内存(DMA)方式... ...
- 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序
这个led驱动程序只在linux-2.6.32.2内核中测试通过,至于其他的内核可能头文件有一些改动就不能 编译成功了.下面给出源程序: 这是友善之臂提供的源码: #include #include ...
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
LED 驱动程序移植 编者:对于led的驱动程序,很多文章都有详细的介绍,我的博客里面有一篇专门详解这个的.需要看的,可以找下.led灯的驱动其实就代表了I/O口的驱动.在linux系统下,操作一个I ...
- 第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进
第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进 //仅用flash上的根文件系统启动后,手工MOUNT NFS mount -t nfs -o nolock,vers=2 192.16 ...
最新文章
- 在对话框中应用CScrollView显示图像
- BZOJ2131 免费的馅饼【线段树优化DP】
- 蓝桥杯第七届决赛JAVA真题----路径之谜
- php 脚本内存耗尽,php - 内存耗尽(最小脚本) - SO中文参考 - www.soinside.com
- 【SQL】分析函数功能-排序
- windows 快捷调用
- Android ViewModel组件详解
- 通信算法之三十:Turbo仿真链路开发基于《低压电力线宽带载波通信互联互通技术规范第4—1部分物理层通信协议》
- python清除所有变量_python清理变量
- LeetCode每日一题: 1723. 完成所有工作的最短时间
- 报错GENERIC_INTERNAL_ERROR(65536)处理
- 在win10上安装oracle10g
- 多wan口路由虚拟服务器,简单的多WAN路由器带宽聚合功能测试方案
- 计算机物联网应用技术工资,物联网专业毕业生现状 刚毕业薪资多少
- 计算机屏幕闪烁黑屏,显示器屏幕一闪一闪的黑屏怎么办_电脑屏幕黑屏一闪一闪如何解决...
- 2022R2移动式压力容器充装考试题及答案
- 智慧魔珠金字塔(类似俄罗斯方块)的所有情况 python
- 【图论】C_算竞_升降梯上(二维抽象一维)
- 极米上半年营收20.4亿:同比增21% 百度减持套现8亿
- [arduino]蓝牙开关灯
热门文章
- python设计抽奖游戏 球_python3实现小球转动抽奖小游戏
- 《海贼王》出品方与小冰合作:首个AI虚拟人上线日本版“微信”
- 通过细胞自动机,AI在「我的世界」学会了盖房子
- AI正在如何重塑生活和消费?头部企业齐聚,邀你共谈智能产业新机会
- News Break!沈向洋投资并出任美国版“今日头条”董事长
- 专家首次释疑“接触传播”:手污染到病毒后,再揉眼睛可能会感染
- 什么是联机分析处理(OLAP)
- 0040-如何重置Cloudera Manager的admin密码
- jquery easyui的应用-2
- 个人在 laravel 开发中使用到的一些技巧(持续更新)