<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驱动程序相关推荐

  1. 嵌入式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 ...

  2. 嵌入式I.MX6ULL裸机开发学习(一)汇编LED驱动程序

    一.学习之路的开始 购买了I.MX6ULL mini开发板进行学习,开发环境为Linux,上学期的Linux课程中,我已将电脑配置好Ubuntu,熟悉了Linux基本操作.之前并没有学过怎么在物理机与 ...

  3. 嵌入式驱动编写-点亮LED驱动程序

    在开发板上,有三个LED灯.如何通过应用程序点亮这三个灯如何编写驱动程序 操作硬件的时候,我们需要准备开发板的原理图和开发手册,,根据这两个文档来进行配置 在source insight 编写代码 1 ...

  4. 【Linux笔记】LED驱动程序

    前言 上一篇我们分享了字符设备驱动框架:[Linux笔记]驱动基础篇,当时分享的是hello驱动程序. 学STM32我们从点灯开始,学Linux驱动我们自然也要点个灯来玩玩,尽量在从这些基础例程中榨取 ...

  5. LED驱动程序第一课

    1.LED驱动程序是怎么被调用的 首先我们来看看应用程序怎么去操作一个led灯: int main(int argc, char **argv) {int fd,status;//文件句柄和led灯状 ...

  6. 嵌入式Linux驱动程序开发

    嵌入式Linux驱动程序开发 1.设备驱动程序的概念... 2 2.处理器与设备间数据交换方式... 2 21.查询方式... 2 2.2.中断方式... 3 2.3.直接访问内存(DMA)方式... ...

  7. 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序

    这个led驱动程序只在linux-2.6.32.2内核中测试通过,至于其他的内核可能头文件有一些改动就不能 编译成功了.下面给出源程序: 这是友善之臂提供的源码: #include #include ...

  8. linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植

    LED 驱动程序移植 编者:对于led的驱动程序,很多文章都有详细的介绍,我的博客里面有一篇专门详解这个的.需要看的,可以找下.led灯的驱动其实就代表了I/O口的驱动.在linux系统下,操作一个I ...

  9. 第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进

    第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进 //仅用flash上的根文件系统启动后,手工MOUNT NFS mount -t nfs -o nolock,vers=2 192.16 ...

最新文章

  1. 在对话框中应用CScrollView显示图像
  2. BZOJ2131 免费的馅饼【线段树优化DP】
  3. 蓝桥杯第七届决赛JAVA真题----路径之谜
  4. php 脚本内存耗尽,php - 内存耗尽(最小脚本) - SO中文参考 - www.soinside.com
  5. 【SQL】分析函数功能-排序
  6. windows 快捷调用
  7. Android ViewModel组件详解
  8. 通信算法之三十:Turbo仿真链路开发基于《低压电力线宽带载波通信互联互通技术规范第4—1部分物理层通信协议》
  9. python清除所有变量_python清理变量
  10. LeetCode每日一题: 1723. 完成所有工作的最短时间
  11. 报错GENERIC_INTERNAL_ERROR(65536)处理
  12. 在win10上安装oracle10g
  13. 多wan口路由虚拟服务器,简单的多WAN路由器带宽聚合功能测试方案
  14. 计算机物联网应用技术工资,物联网专业毕业生现状 刚毕业薪资多少
  15. 计算机屏幕闪烁黑屏,显示器屏幕一闪一闪的黑屏怎么办_电脑屏幕黑屏一闪一闪如何解决...
  16. 2022R2移动式压力容器充装考试题及答案
  17. 智慧魔珠金字塔(类似俄罗斯方块)的所有情况 python
  18. 【图论】C_算竞_升降梯上(二维抽象一维)
  19. 极米上半年营收20.4亿:同比增21% 百度减持套现8亿
  20. [arduino]蓝牙开关灯

热门文章

  1. python设计抽奖游戏 球_python3实现小球转动抽奖小游戏
  2. 《海贼王》出品方与小冰合作:首个AI虚拟人上线日本版“微信”
  3. 通过细胞自动机,AI在「我的世界」学会了盖房子
  4. AI正在如何重塑生活和消费?头部企业齐聚,邀你共谈智能产业新机会
  5. News Break!沈向洋投资并出任美国版“今日头条”董事长
  6. 专家首次释疑“接触传播”:手污染到病毒后,再揉眼睛可能会感染
  7. 什么是联机分析处理(OLAP)
  8. 0040-如何重置Cloudera Manager的admin密码
  9. jquery easyui的应用-2
  10. 个人在 laravel 开发中使用到的一些技巧(持续更新)