led驱动

点亮led灯程序(驱动部分)

回眸只為那壹抹淺笑 提交于 2020-01-24 14:39:57
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/uaccess.h> #include <asm/irq.h> #include <asm/io.h> #include <asm/arch/regs-gpio.h> #include <asm/hardware.h> static struct class *firstdrv_class; static struct class_device *firstdrv_class_dev; volatile unsigned long *gpfcon =NULL; volatile unsigned long *gpfdat =NULL; static int first_drv_init(void); static int first_drv_open(struct inode *inode, struct file *file ) { //printk("first_drv_open\n"); /*配置GPF4,5,6 为输出*/ //初始状态为输入 *gpfcon &= ~((0x3<<(4*2) ) |

Linux驱动之LED驱动编写

别说谁变了你拦得住时间么 提交于 2020-01-22 13:22:22
https://www.cnblogs.com/andyfly/p/9467702.html 从上到下,一个软件系统可以分为:应用程序、操作系统(内核)、驱动程序。结构图如下:我们需要做的就是写出open、read、write等驱动层的函数。一个LED驱动的步骤如下: 1、查看原理图,确定需要控制的IO端口 2、查看芯片手册,确定IO端口的寄存器地址 3、编写驱动代码 4、确定应用程序功能,编写测试代码。 5、编写Makefile,编译驱动代码与测试代码,在开发板上运行 1、查看原理图,确定需要控制的IO端口 打开原理图,确定需要控制的IO端口为GPF4、GPF5、GPF6。 2、查看芯片手册,确定IO端口的寄存器地址,可以看到它的基地址为0x56000050 3、编写驱动代码,编写驱动代码的步骤如下: 1)、编写出口、入口函数。   a、首先利用register_chrdev函数如果第一个参数为0的话那么会自动分配一个主设备号为Firstmajor ;第二个参数firstled_drv会是这个字符设备的名称可以利用命令cat /proc/devices看到;第三个参数是它的first_drv_fops结构体,这个结构体是字符设备中最主要的,后面再说明。   b、接着利用class_create函数创建一个firt_drv_class类。它的第一个参数指向这个模块

3.RT-thread 项目实战--LED驱动及finsh组件调试

两盒软妹~` 提交于 2020-01-16 13:32:03
RT-thread 在19年12月份推出了一个很好用的工具RT-thread stdio,比Env更加的方便,接下来的代码开发我们就使用这个工具进行,不使用keil和IAR了。工具的一些配置和入门使用直接看官方的教学视频就可以了,这里我们不做过多的介绍,下面开始进入今天的正题。 打开我们的软件后,点击文件--》新建--》RT-thread 项目,然后取个项目名字,就叫temp_prj吧,然后我们的不是开发板选择 基于芯片,然后我用我们的串口1作为调试口。 经过几秒的加载我们的工程文件就出来了。。。 这里面包括了stm32的库文件,RT-thread的相关文件等,确实很方便额。 然后点击RT-thread Settings,选择ulog日志和finsh命令,然后保存,编译。 编译很快,没有任何报错。下一步该下载到板卡看效果了,然后进行下载调试(第一次可能要配置下下载工具,),软件使用问题可查看官网的视频。 小锤子编译,小箭头下载。打开串口助手配置好波特率,就可以看到打印信息了。 很顺利,但是好像调试的指令不是很全,接下来先把我们的灯和蜂鸣器的驱动调试出来。 其实在裸机的开发中我们很简单的直接GPIO初始化,进行控制是很容易实现的,在FreeRtos中好像也挺好捋顺,但是RT-thread 是类unix系统,习惯linux编程的可能更容易理解,那么我们怎么添加我们的灯和蜂鸣器驱动

杰理AC692X---LED点灯

限于喜欢 提交于 2020-01-03 20:05:42
根据原厂SDK进行讲解 首先打开LED宏定义(sdk_cfg.h): 选择点灯方式(led.h): 一般选择PA/B/C/D口,PR口是在低功耗(假关机)模式下选择。LED驱动方式一般选择普通。 # define LED_PORTX JL_PORTA # define LED_BLUE BIT(3) # define LED_RED BIT(2) 根据项目需求配置GPIO口。上面代码配置的是PA3&PA2口。 # define LED_INIT_EN() do{LED_PORTX->PU &= ~LED_BLUE;LED_PORTX->PD &= ~LED_BLUE;LED_PORTX->DIR &= ~LED_BLUE;\ LED_PORTX->PU &= ~LED_RED;LED_PORTX->PD &= ~LED_RED;LED_PORTX->DIR &= ~LED_RED;}while(0) # define LED_INIT_DIS() do{LED_PORTX->PU &= ~LED_BLUE;LED_PORTX->PD &= ~LED_BLUE;LED_PORTX->DIR |= LED_BLUE;\ LED_PORTX->PU &= ~LED_RED;LED_PORTX->PD &= ~LED_RED;LED_PORTX->DIR |= LED_RED;}while

3个IO口驱动6个LED

你。 提交于 2019-12-29 16:50:23
最普通的行列矩阵式驱动,可以用N+M个IO驱动N*M个LED。而这种被叫做Charlieplexing的方法可以用N个IO驱动N*(N-1)个LED。也就是说要驱动6个LED,用行列式需要5个口,而这种方法只要3个。LED也多,节省的IO越多。比方说驱动20个LED,行列式要用9个,而这种只要5个。 这么做有个前提, IO口要有三种状态:高电平输出、低电平输出、高阻输入 ,利用“ 行列分时复用 ”的思想,设计电路。 其实这也不是什么新的技术了,在网上,我找到了好多关于这方面的文章: Charlieplexing - Reduced Pin-Count LED Display Multiplexing http://www.maxim-ic.com/appnotes.cfm/appnote_number/1880 Tips ''''n Tricks 8-pin FLASH PIC Microcontrollers http://ww1.microchip.com/downloads/en/DeviceDoc/40040b.pdf how to drive a lot of LEDs from a few microcontroller pins http://www.instructables.com/id/E5COF05YF6EP287ITF/ connect 6 leds

LED驱动电路

99封情书 提交于 2019-12-17 01:49:01
一般,5mm LED正向电压为2V,工作电流20mA。MCU的I/O pin一般不适合直接点亮LED。以STM32F303xE为例,Datasheet给出如下电流特性: VDD输入电流总和最大160mA 单个VDD pin输入电流最大100mA 单个I/O pin最大电流25mA 所有I/O pin电流总和最大80mA 所以要通过驱动电路来控制LED。下图为使用NPN晶体管实现的LED驱动电路: 2N3904是一种易得的小信号三极管。c极电流Ic即LED工作电流 LED分压电阻RL的阻值用压降除以Ic即可得到:RL = (5V - 2V) / 20mA = 150 ohm b极电流由电流增益hFE和Ic计算得到,hFE可查晶体管Datasheet得知:Ib = Ic / hFE = 20mA / 100 = .2mA 为确保b极电流达到饱和,将它乘以一个因子3,因此:Ib = .2mA x 3 = .6mA 于是b极电阻RB便可计算出来:RB = 3.3V / Ib = 3.3V / .6mA = 5.5 k 利用我手上现有的元件,RL=200 ohm,RB=10k,实测并计算得到如下数据: RL压降3V RB压降2.5V Ic = (5V - 3V) / 200 ohm = 15mA Ib = 2.5V / 10k = .25mA hFE = Ic / Ib = 15mA /

platform设备驱动框架

我们两清 提交于 2019-12-04 18:40:50
驱动框架 通过使用platform设备驱动框架,实现led驱动与设备操作的分离。 我们关注led_drv里面的 struct platform_driver led_drv里面的 . probe函数,当有同名的device注册到内核,将运行这个driver的probe函数(同名的:led_dev里面的struct platform_device led_dev里面的.name与 struct platform_driver led_drv里面的.name一一对应)。 led_dev.c 1 /* 分配/设置/注册一个platform_device */ 2 #include <linux/module.h> 3 #include <linux/version.h> 4 5 #include <linux/init.h> 6 #include <linux/fs.h> 7 #include <linux/interrupt.h> 8 #include <linux/irq.h> 9 #include <linux/sched.h> 10 #include <linux/pm.h> 11 #include <linux/sysctl.h> 12 #include <linux/proc_fs.h> 13 #include <linux/delay.h> 14 #include

字符设备驱动之LED驱动

蹲街弑〆低调 提交于 2019-12-04 18:39:51
实现 ①编写驱动框架 ②编写硬件实现代码 (在 Linux 系统下操作硬件,需要操作虚拟地址,因此需要先把物理地址转换为虚拟地址 ioremap() ) 如何实现单个灯的操作: 实现方法之一——操作次设备号 主设备号:用于查找对应的文件操作结构体; 次设备号:用于区分同类型设备下的不同设备; 实例 driver.c 1 #include <linux/module.h> 2 #include <linux/kernel.h> 3 #include <linux/fs.h> 4 #include <linux/init.h> 5 #include <linux/delay.h> 6 #include <asm/uaccess.h> 7 #include <asm/irq.h> 8 #include <asm/io.h> 9 #include <asm/arch/regs-gpio.h> 10 #include <asm/hardware.h> 11 12 static int major; 13 14 static struct class * myLED_class; 15 static struct class_device * myLED_class_dev[ 4 ]; 16 17 volatile unsigned long * gpfcon; 18 volatile

Android 充电指示灯

南笙酒味 提交于 2019-12-03 14:37:26
充电指示灯的驱动文件是:leds-qti-tri-led.c 设备树中设备信息在:pmi632.dtsi里,可见led灯的硬件控制方式是pwm模式。 led_core.c中 led_set_brightness 去设置led亮度,这个函数会调用到具体的驱动leds-qti-tri-led.c中的qpnp_tri_led_set_brightness去设置亮度。 qpnp_tri_led_set_brightness在驱动注册的时候被绑定到brightness_set_blocking。 当 led_set_brightness 去设置led亮度的时候,将其委派到一个工作队列任务当中。队列任务去调用rightness_set_blocking,也就是qpnp_tri_led_set_brightness,去设置亮度。 lights.c 是HAL层访问底层的入口,ID为LIGHTS_HARDWARE_MODULE_ID。 文件将以lights.msm8953.so向上层提供接口。 https://blog.csdn.net/wangjun7121/article/details/88140862 android.hardware.light@2.0-service.rc com_android_server_lights_LightsService.cpp LightsService

armA9单片机liunxOS下led驱动开发

匿名 (未验证) 提交于 2019-12-03 00:30:01
led控制除了在裸机开发中使用寄存器编程以外,当板子运行linux操作系统时,需要在内核进行驱动,应用程序通过设备文件的IO接口,操作内核驱动中的相关函数,通过地址映射,进而控制寄存器的地址的值。 步骤: 1.实现模块加载和卸载入口函数 2.在模块加载函数中实现 a.申请设备号(register_chrdev()) b.常见设备文件(class_create()和device_create()) c.将寄存器物理地址映射为内核虚拟地址(ioremap())、申请中断以及配置寄存器(readl()和writel()) 3.实现file_operations结构体中的相关open、read、 write等函数。 驱动代码 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/slab.h> #include <asm/uaccess.h> #include <asm/io.h> //设计一个类型,描述一个设备的信息 struct led_desc{ unsigned int dev_major; //设备号 struct class *cls; struct device *dev; //创建设备文件 void