#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define LED_MAJOR 244/*预设LED的主设备号*/

#define rGPECON (*(volatile unsigned long*)(vaddr+0x40))

#define rGPEDAT (*(volatile unsigned short *)(vaddr+0x44))

char* vaddr=NULL;

struct cdev* led_cdev=NULL;

#define SET1(X, Y) (X)|=(1<

#define SET0(X, Y) (X)&=~(1<

void gpecon_init(void)

{

/*GPE13------>LED1*/

SET1(rGPECON, 13*2);

SET0(rGPECON, 13*2+1);

/*GPE12------>LED2*/

SET1(rGPECON, 12*2);

SET0(rGPECON, 12*2+1);

/*GPE11------>LED3*/

SET1(rGPECON, 11*2);

SET0(rGPECON, 11*2+1);

/*GPE0------>LED4*/

SET1(rGPECON, 0);

SET0(rGPECON, 1);

/*GPE4------>LED5*/

SET1(rGPECON, 4*2);

SET0(rGPECON, 4*2+1);

/*GPE3------>LED6*/

SET1(rGPECON, 3*2);

SET0(rGPECON, 3*2+1);

/*GPE1------>LED7*/

SET1(rGPECON, 1*2);;

SET0(rGPECON, 1*2+1);

/*GPE2------>LED8*/

SET1(rGPECON, 2*2);

SET0(rGPECON, 2*2+1);

}

void gpedata_init(void)

{

/*LED1*/

SET1(rGPEDAT, 13);

/*LED2*/

SET1(rGPEDAT, 12);

/*LED3*/

SET1(rGPEDAT, 11);

/*LED4*/

SET1(rGPEDAT, 0);

/*LED5*/

SET1(rGPEDAT, 4);

/*LED6*/

SET1(rGPEDAT, 3);

/*LED7*/

SET1(rGPEDAT, 1);

/*LED8*/

SET1(rGPEDAT, 2);

}

void led_on(int num)

{

switch(num){

case 1:

SET0(rGPEDAT, 13);

break;

case 2:

SET0(rGPEDAT, 12);

break;

case 3:

SET0(rGPEDAT, 11);

break;

case 4:

SET0(rGPEDAT, 0);

break;

case 5:

SET0(rGPEDAT, 4);

break;

case 6:

SET0(rGPEDAT, 3);

break;

case 7:

SET0(rGPEDAT, 1);

break;

case 8:

SET0(rGPEDAT, 2);

break;

default:

printk("argumets error!/n");

break;

}

}

void led_off(int num)

{

switch(num){

case 1:

SET1(rGPEDAT, 13);

break;

case 2:

SET1(rGPEDAT, 12);

break;

case 3:

SET1(rGPEDAT, 11);

break;

case 4:

SET1(rGPEDAT, 0);

break;

case 5:

SET1(rGPEDAT, 4);

break;

case 6:

SET1(rGPEDAT, 3);

break;

case 7:

SET1(rGPEDAT, 1);

break;

case 8:

SET1(rGPEDAT, 2);

break;

default:

printk("argumets error!/n");

break;

}

}

int led_open(struct inode* inode, struct file* filp)

{

printk("open led device.../n");

return 0;

}

static int led_ioctl(struct inode* inode, struct file* filp,

unsigned int cmd, unsigned long arg)

{

if( 0==cmd )

{

led_on(arg);

}

else if( 1==cmd )

{

led_off(arg);

}

return 0;

}

static int led_release(struct inode *inode,struct file *file)

{

gpedata_init();

printk("device close!!!/n");

return 0;

}

struct file_operations led_fops={

owner:THIS_MODULE,

release:led_release,

open:led_open,

ioctl:led_ioctl

};

static int __init led_init(void)

{

int result;

dev_t devno=MKDEV(LED_MAJOR, 0);

result=register_chrdev_region(devno, 1, "led");

if( result<0 )

{

printk("init error!/n");

return result;

}

vaddr=ioremap(0x56000000, 0x100);

gpecon_init();

gpedata_init();

led_cdev=cdev_alloc();

cdev_init(led_cdev, &led_fops);

led_cdev->owner=THIS_MODULE;

led_cdev->ops=&led_fops;

result=cdev_add(led_cdev, devno, 1);

if( result<0 )

{

printk("cdev_add Error/n");

}

printk("init success!/n");

return 0;

}

static void __exit led_exit(void)

{

iounmap(vaddr);

cdev_del(led_cdev);

unregister_chrdev_region(MKDEV(LED_MAJOR, 0), 1);

printk("exit/n");

}

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Peng Li");

module_init(led_init);

module_exit(led_exit);

arm 跑马灯 linux,ARM开发板(S3C2440)上LED灯驱动及跑马灯的实现相关推荐

  1. linux在开发板LCD上显,W35型LCD驱动移植 - linux-2.6.32在mini2440开发板上移植_Linux编程_Linux公社-Linux系统门户网站...

    编者注:本移植主要步骤还是按照手册来,里面讲解了一些有用的基础知识.但书册上提供了集中屏幕的方案,我们这里主要就用一种,也就是开发板自带的W35型号.液晶驱动的源程序在src/drivers/vide ...

  2. RK3288开发板PopMetal上的GPIO驱动实例

    2019独角兽企业重金招聘Python工程师标准>>> 楼主在这边给大家介绍下如何使用PopMetal的GPIO.先讲过程,再讲原理吧, 该驱动需要涉及到的知识点:1,DTS设备树的 ...

  3. STM32F 103C8T6开发板 点亮LED灯

    每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...

  4. 野火霸道STM32开发板点亮LED灯课后作业

    #include "stm32f10x.h" int main(void) {     //打开GPIOB端口的时钟     *(unsigned int *)0x40021018 ...

  5. Linux 自带的LED 灯驱动实验

    目录 Linux 内核自带LED 驱动使能 Linux 内核自带LED 驱动简介 LED 灯驱动框架分析 module_platform_driver 函数简析 gpio_led_probe 函数简析 ...

  6. Linux 自带的 LED 灯驱动

    1 Linux 内核自带 LED 驱动使能 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动,输入如 ...

  7. Linux 自带的 LED 灯驱动实验

    目录 一.配置内核 二.设备树节点编写 1.确定compatible 属性值 2.编写节点 三.验证 测试 其实 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯 ...

  8. 嵌入式系统开发设计——按键控制LED灯实现

    一.实验目的 掌握STM32固件库的使用方法: 掌握基于库函数模板的开发方法: 掌握基于固件库进行GPIO端口编程的方法: 4.规范编程格式. 二.实验内容 1.查阅STM32-V5开发板按键.LED ...

  9. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动

    文章目录 1. IMX6ULL开发板初次操作 1.1 100ask_imx6ull开发板硬件资源简介 1.1.1 100ask imx6ull mini开发板 1.2 100ask_imx6ull开发 ...

最新文章

  1. 为什么手机上传图片这么慢 前端_怎样在手机上就能把图片压缩到100K以下?
  2. 拼多多谋定500个供应链品牌 农民丰收节交易会“拼农货”
  3. 文献管理工具mendeley登录问题
  4. Logica实战与剖析(1)
  5. python删除列表中字符串_python - 删除字符串中的字符列表
  6. 识别浏览器的JavaScript引擎的方法
  7. windows server 2003 or 2008 远程登录时超过最大连接数的解决办法
  8. Redis学习笔记三:Redis的数据类型
  9. java setcharat,Java StringBuilder setCharAt()方法
  10. 一句话木马上传常见的几种方法
  11. python 空数组_Python笔记
  12. AutoCAD2014下载和安装教程(官方中文完整版)
  13. “全球化”是一个漫长过程,海尔智家用了20年
  14. uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式
  15. The 10 Most Important Linux Commands/10个最经常使用的命令行
  16. java for coun,为什么程序中的一段for循环没有被执行
  17. HCIP-IoT——华为云物联网端到端开发
  18. Vue CLI 官方文档(一)@vue/cli、@vue/cli-service、插件和 Preset
  19. mt6765和骁龙665哪个好_联发科mt6765怎么样?和联发科P30/P35/P40处理器区别对比哪个好...
  20. Arduino基础入门篇06—流动的LED灯

热门文章

  1. getElementByID() getElementsByName() getElementsByTagName()的区别 .
  2. 240多个jQuery插件 功能强大 齐全
  3. 转载:Prototype.js的中文使用手册
  4. 3DMAX安装失败怎样卸载重新安装3DMAX,解决3DMAX安装失败的方法总结
  5. activiti驳回、沟通、转办的解决方法
  6. 解决 vs2010问题 error MSB8008: 指定的平台工具集(v110)未安装或无效
  7. 推荐系统评价指标综述
  8. 【实践】推荐召回体系化建设与排序优化实践(附PPT下载链接)
  9. 第十五章 面向对象程序设计
  10. python简单计算器下载安装到手机_python计算器app下载