与硬件无关的LED驱动 回顾hello驱动程序,我们的根据实际需求对其进行写字符串与读字符串操作。这里我们当然也要根据实际来思考我们的LED驱动程序。 模仿上一篇的hello程序,我们修改得到的与硬件无关的LED程序(核心部分)如下: LED应用程序: ? LED驱动程序: ? ? 加载led驱动模块及运行应用程序: ? 与硬件有关的LED驱动 上面那一节分享的是与硬件无关的LED驱动实验,主要是为了理清LED驱动的大体思路。这里我们再加入与硬件有关的相关操作以构造与硬件有关的LED驱动程序。 驱动(升级版) 上一节我们分享的LED驱动是一个常规的LED驱动,只能适用于我们当前的开发版,所以是一个专用的LED驱动程序。 若是换了另一块板,led所连接的gpio引脚可能不一样了,我们就修改我们的驱动程序led_drv.c里与寄存器相关的操作。有没有更好的办法不用再修改我们的led_drv.c驱动程序了?
这篇文章主要的内容如下: 1.对平台总线的简介; 2.led驱动的移植。 一.平台总线 首先介绍一下,我们为什么要简单介绍一下平台总线呢? 因为我们是做led驱动的移植,而不是自己编写led的驱动代码。我们要移植的代码是linux-3.3.5源代码目录下的driver/leds的leds-gpio.c。 不用猜,大家肯定知道,每个电路板的电路都有不同,那怎么才能把一个led灯的驱动程序做成与具体的平台无关呢?这就用到了platform总线模型。 二.led驱动移植 上面对platform总线模型的简介中,咱们提到了,要移植的源文件的地方,你可以打开看看,这就是一个与具体平台无关的led灯的驱动程序。 看到这个结构体里的.name=”leds-gpio”了吧,这就是上面提到的驱动和设备匹配的名字。现在咱们的led这个设备算是定义好了,但还没注册到platform总线上。
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
这个LED驱动为20年设计,开关电源类处女作,驱动为塑胶外壳,可使用两芯电缆线接入,驱动销售欧洲市场,整体认证仅做了CE,相关EMC主要为CE。 我没接触过CE认证,驱动一次性过该认证,感觉不太难,所以仅说明设计中的考虑。 开关电源控制电路主要做了差模滤波电路,整流桥后DC370V左右电压正负极各连接一个不同感量的电感,本电路中正极感量为1mH,负极感量为680mH,上图为该部分Layout主要控制芯片地回路、变压器副边(驱动芯片电源
驱动框架的概念 内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架 即标准化的驱动实现,统一管理系统资源,维护系统稳定。 2. LED设备驱动框架概述 (1)LED设备的共性: 1)LED的亮与灭; 2)具有相应的设备节点(设备文件)。 因此,Linux中LED的驱动框架把所有LED设备的共性给实现了,把不同的地方留给驱动工程师去做。 设备的register接口 LED设备驱动框架为驱动开发者提供在/sys/class/leds这个类下创建LED设备的接口。 LED设备驱动的卸载接口。
产品描述 AP5219 是一款 PWM工作模式, 高效率、外 围简单、内置功率管,适用于5V~100V输入的高 精度降压 LED 恒流驱动芯片。输出最大功率可达 25W,最大电流 2.5A。
) { printk("led_init!!! \n"); return 0; } module_init(led_init); (2)退出模块 void __exit led_exit(void) { printk("led_exit! ("led_ioctl!!! .release = led_close, .unlocked_ioctl = led_ioctl, }; (5)初始化cdev结构体 cdev_init(&led_cdev, &fops \n"); return -1; } (2)创建设备节点 #define NODE_LED "led" device_create(cls, NULL, devno, NULL, NODE_LED
使用说明 此驱动实现二种操作模式: 普通操作模式:./LedTest <led1/led2/led3> <on/off> 点亮或熄灭某个LED灯 掩码操作模式:. 驱动代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h file_operations结构 如果主设备号写0,就是让系统自动分配设备号 */ register_chrdev(FIRST_DRV_MAJOR, "first_drv", &first_drv_fops); /* 注册驱动程序 void __exit first_drv_exit(void) { unregister_chrdev(FIRST_DRV_MAJOR, "first_drv"); /* 卸载驱动 _000, LED_MASK_001, LED_MASK_010, LED_MASK_011, LED_MASK_100, LED_MASK_101, LED_MASK_110, LED_MASK
文章目录 Linux嵌入式开发 | 汇编驱动LED(1) 初始化IO STM32 使能GPIO时钟 设置IO复用 配置GPIO 使用GPIO I.MX6ULL 使能GPIO时钟 设置IO复用 配置GPIO 配置GPIO功能 Linux嵌入式开发 | 汇编驱动LED(1) 之前我们一直都是在介绍Linux的使用,接下来就开始进入真正的Linux嵌入式开发了,我们的第一个实验就是来使用汇编代码来驱动我们的 LED灯,相信很多人不太理解,为什么需要使用汇编代码来操控LED灯,之前不管是51还是STM32都没有使用过汇编呀? 配置GPIO 接下来我们可以去找到寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的介绍,这个寄存器主要是用来设置GPIO1_IO03的电气属性的,包括压摆率、速度、驱动能力、开漏 DSE(bit5:3):当 IO 用作输出的时候用来设置 IO 的驱动能力, 总共有 8 个可选选项,如下所示: 位设置 速度 000 输出驱动关闭 001 R0(3.3V 下 R0 是 260Ω,1.8V
AP 5 199LED DriverDescriptionThe AP5199 is an average current mode control LED driver IC operating in produce a peak-to-average error, and therefore greatly improves accuracy, line and load regulation of the LED The output LED current accuracy is ±3%. driver applications● LED backlight driver for LCD displays● General purpose constant current source● LED signage and displays● Architectural and decorative LED lighting● LED street lighting
比如LED的驱动代码可以给用户提供一个初始化的 API 和打开/关闭的 API ,按键的驱动代码可以提供初始化的 API 和读取按键状态的 API,LCD的驱动代码可以提供初始化的 API 和屏幕上显示相关内容的 这里以使用 STM32CuebMX 生成的 LED 闪烁的裸机工程为例,其中 Src 目录下的gpio.c文件就相当于 LED 的驱动层文件,其中提供了 LED 的初始化代码: ? LED初始化代码 有了该文件,也就是驱动层代码,我们可以直接调用MX_GPIO_Init来初始化LED。 那么,驱动层代码从哪里来呢? LED驱动c文件路径 LED驱动的gpio.h文件夹添加到USER_INC下(工程中默认已添加,无需重复添加): ? 举个例子: 像LED这种的驱动,一般都是任意的任务需要点亮或者关闭LED,没有专门的LED点亮任务或者关闭任务,在系统启动调度之前初始化比较好; 像光照强度传感器这种驱动,一般都是有专门的数据采集任务
LED照明输出电流设定LED照明输出的电流由电阻R3限定,根据不同的LED压降和不同BAT电压条件,综合考虑选择R3,ESOP8封装 最大输出电流为1.8A,SOP8封装最大输出电流为1.5A,若需要大于 短路保护手电筒放电时,芯片会一直监控手电筒电流,若输出 LED1 端口电流大于 3A,芯片会关闭输出。 LED2 指示灯LED2指示灯在有以下几种情况 1、充电过程中LED2会以1HZ频率闪烁,充满后LED2常亮; 2、放电时,当电池电压低于3.2V以后,LED2每4秒钟闪一次,直到手电筒关闭; 3、放电时 ,当电池电压低于2.6V关机后,LED2以1HZ频率闪烁8S后灭,在电池电压回升到2.8V以前按键不 能启动手电筒; 4、短路保护后,LED2亮4S后灭。 AP360X 系列产品是一款多种模式可选 的单芯片 LED 手电筒控制芯片,集成了锂电 池充电管理模块、手电筒功能控制模块和保 护模块,关机待机电流仅 5uA。
产品描述AP2403 是一款 PWM 工作模式,高效率、外围简单、内置功率管,适用于 5-100V输入的高精度降压 LED 恒流驱动芯片。输出功率可达 22W,电流 2.2A。
AP5192是一款PWM工作模式,高效率、外围简单、 内置功率MOS管,适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。最大电流1.5A。 可设定电流范围:10mA~1500mA◆ 内置抖频电路,降低对其他设备的EMI 干扰◆ 输出短路保护◆ 过温保护◆ 调光功能:线性调光◆ ESOP8 封装应用领域◆ 电动车,摩托车灯照明◆ 汽车灯照明◆ LED 驱动电源
很顺利,但是好像调试的指令不是很全,接下来先把我们的灯和蜂鸣器的驱动调试出来。 其实在裸机的开发中我们很简单的直接GPIO初始化,进行控制是很容易实现的,在FreeRtos中好像也挺好捋顺,但是RT-thread 是类unix系统,习惯linux编程的可能更容易理解,那么我们怎么添加我们的灯和蜂鸣器驱动 我们可以了解到components.c的int Sub 为了后期方便维护,我们新建一个文件夹,取名my_drivers,在新添加一个文件叫做my_gpio 用于存放led和蜂鸣器的初始化和相应的控制函数 然后就可以在gpio.c里面初始化驱动,在main.c里面新建一个点灯任务。 为了以后直接用,直接取名为一个看门狗任务,同理,新建一个文件夹和文件。 现在思路很清晰了: 在主函数中初始化led硬件外设,然后新建一个看门狗任务,进行1s的灯闪烁。 看门狗任务文件中新建一个任务,用来灯闪烁。
AP2400 是一款 PWM 工作模式,高效 率、外围简单、外驱功率管,适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。外 驱 MOS,输出电流可达 6A。
产品描述 特点AP5216 是一款 PWM工作模式, 高效率、外 围简单、内置功率管,适用于5V~100V输入的高 精度降压 LED 恒流驱动芯片。输出大功率可达 9W,大电流 1.0A。
本品特点:宽输入电压范围:9V~100V ◆ 固定工作频率:140KHZ◆ 可设定电流范围:10mA~6000mA ◆ 内置抖频电路,降低对其他设备的 EMI...
上篇文章(【i.MX6ULL】驱动开发4--点亮LED(寄存器版))介绍了在驱动程序中,直接操作寄存器了点亮LED。 驱动程序与实验 回忆之前的LED字符设备驱动的编写方法:直接在驱动文件regled.c中定义有关寄存器物理地址,然后使用io_remap函数进行内存映射得到对应的虚拟地址,最后操作寄存器对应的虚拟地址完成对 所以,使用设备树进行LED驱动,需要的修改主要为: 修改imx6ull-myboard.dts设备树文件,在其中添加RGB-LED的设备节点 编写RGB-LED驱动程序,获取设备树中的相关属性值,并使用相关的属性值进行 4.3 修改LED驱动程序 驱动程序整体框架和上一篇的寄存器版配置程序基本相同,主要的不同是修改硬件配置的方式, /* * @description : LED硬件初始化(IO映射、时钟、GPIO 后面的配置与上一篇的相同 } 上面的程序修改部分,从整个LED驱动的框架来看,修改的只是如下图中的黄色框部分: 4.4 实验测试 编译设备树版的LED驱动程序,并将编译好的ko文件发送到nfs文件系统对应的文件夹下
腾讯GPU 云服务器是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。
扫码关注腾讯云开发者
领取腾讯云代金券