arm 跑马灯 linux,ARM开发板(S3C2440)上LED灯驱动及跑马灯的实现
#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灯驱动及跑马灯的实现相关推荐
- linux在开发板LCD上显,W35型LCD驱动移植 - linux-2.6.32在mini2440开发板上移植_Linux编程_Linux公社-Linux系统门户网站...
编者注:本移植主要步骤还是按照手册来,里面讲解了一些有用的基础知识.但书册上提供了集中屏幕的方案,我们这里主要就用一种,也就是开发板自带的W35型号.液晶驱动的源程序在src/drivers/vide ...
- RK3288开发板PopMetal上的GPIO驱动实例
2019独角兽企业重金招聘Python工程师标准>>> 楼主在这边给大家介绍下如何使用PopMetal的GPIO.先讲过程,再讲原理吧, 该驱动需要涉及到的知识点:1,DTS设备树的 ...
- STM32F 103C8T6开发板 点亮LED灯
每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...
- 野火霸道STM32开发板点亮LED灯课后作业
#include "stm32f10x.h" int main(void) { //打开GPIOB端口的时钟 *(unsigned int *)0x40021018 ...
- Linux 自带的LED 灯驱动实验
目录 Linux 内核自带LED 驱动使能 Linux 内核自带LED 驱动简介 LED 灯驱动框架分析 module_platform_driver 函数简析 gpio_led_probe 函数简析 ...
- Linux 自带的 LED 灯驱动
1 Linux 内核自带 LED 驱动使能 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动,输入如 ...
- Linux 自带的 LED 灯驱动实验
目录 一.配置内核 二.设备树节点编写 1.确定compatible 属性值 2.编写节点 三.验证 测试 其实 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯 ...
- 嵌入式系统开发设计——按键控制LED灯实现
一.实验目的 掌握STM32固件库的使用方法: 掌握基于库函数模板的开发方法: 掌握基于固件库进行GPIO端口编程的方法: 4.规范编程格式. 二.实验内容 1.查阅STM32-V5开发板按键.LED ...
- 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动
文章目录 1. IMX6ULL开发板初次操作 1.1 100ask_imx6ull开发板硬件资源简介 1.1.1 100ask imx6ull mini开发板 1.2 100ask_imx6ull开发 ...
最新文章
- 为什么手机上传图片这么慢 前端_怎样在手机上就能把图片压缩到100K以下?
- 拼多多谋定500个供应链品牌 农民丰收节交易会“拼农货”
- 文献管理工具mendeley登录问题
- Logica实战与剖析(1)
- python删除列表中字符串_python - 删除字符串中的字符列表
- 识别浏览器的JavaScript引擎的方法
- windows server 2003 or 2008 远程登录时超过最大连接数的解决办法
- Redis学习笔记三:Redis的数据类型
- java setcharat,Java StringBuilder setCharAt()方法
- 一句话木马上传常见的几种方法
- python 空数组_Python笔记
- AutoCAD2014下载和安装教程(官方中文完整版)
- “全球化”是一个漫长过程,海尔智家用了20年
- uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式
- The 10 Most Important Linux Commands/10个最经常使用的命令行
- java for coun,为什么程序中的一段for循环没有被执行
- HCIP-IoT——华为云物联网端到端开发
- Vue CLI 官方文档(一)@vue/cli、@vue/cli-service、插件和 Preset
- mt6765和骁龙665哪个好_联发科mt6765怎么样?和联发科P30/P35/P40处理器区别对比哪个好...
- Arduino基础入门篇06—流动的LED灯
热门文章
- getElementByID() getElementsByName() getElementsByTagName()的区别 .
- 240多个jQuery插件 功能强大 齐全
- 转载:Prototype.js的中文使用手册
- 3DMAX安装失败怎样卸载重新安装3DMAX,解决3DMAX安装失败的方法总结
- activiti驳回、沟通、转办的解决方法
- 解决 vs2010问题 error MSB8008: 指定的平台工具集(v110)未安装或无效
- 推荐系统评价指标综述
- 【实践】推荐召回体系化建设与排序优化实践(附PPT下载链接)
- 第十五章 面向对象程序设计
- python简单计算器下载安装到手机_python计算器app下载