LEDC - RGB LED
LEDC(Light Emitting Diode Controller),发光二极管控制器。支持驱动目前市场上已有成熟的智能外控 LED,例如 WS2812 系列,每个 LED 的三基色均可实现 256 级亮度显示,因此整个 LED 可完成 256ˆ3(即 16777216)种颜色的全真色彩显示。模块支持最大1024颗外控 LED级联。
模块介绍
LEDC 硬件方框图如上图所示,CPU 通过 APB 总线操作 LEDC 寄存器来控制 LEDC;当 CPU配置好 LEDC 的相关寄存器之后,通过 CPU 或 DMA 将 R、G、B 数据从 DRAM 搬到 LEDCFIFO 中,启动 LEDC 之后就可以通过 PIN 脚向外部的 LED 发送数据了。
LED 典型电路如图所示,其中 DI 表示控制数据输入脚,DO 表示控制数据输出脚。DI 端接收从控制器传过来的数据,每个 LED 内部的数据锁存器会存储 24bit 数据,剩余的数据经过内部整形处理电路整形放大后通过 DO 端口开始转发输出给下一个级联的 LED。因此,每经过一个LED,数据减少 24bit。
注意,如果在单次直接设置第 n 个 LED 的亮度和色彩的时候,前面 n-1 个 LED 的亮度数据会在第 n 个 LED 的数据前发送,不过这些数据将会是原来 n-1 个 LED 的亮度数据。
模块配置
配置路径如下:
Kernel Setup --->
Drivers Setup --->
SoC HAL Drivers --->
LEDC devices --->
[*] enable ledc driver
源码结构
LEDC 模块源码结构如下所示:
rtos-hal/
|--hal/source/ledc/hal_ledc.c // hal层接口代码
|--include/hal/sunxi_hal_ledc.h // 头文件
模块接口说明
头文件:
#include <sunxi_hal_ledc.h>
LEDC 初始化接口
LEDC 模块初始化,主要初始化时钟,GPIO 以及 DMAC 通道等
函数原型:
int hal_gpadc_init(void)
参数:
- 无
返回值:
- 1:成功
- 其他:失败
LEDC 数据传输接口
发送 RGB 数据
函数原型:
int hal_ledc_trans_data(struct ledc_config *ledc)
参数:
- ledc: 配置参数信息,包括待发送数据、数据长度、发送方式(CPU/DMA)及各时间参数设置
返回值:
- 1:成功
- 其他:失败
LEDC 清除中断接口
清除 LEDC 中断
函数原型:
void hal_ledc_clear_all_irq(void)
参数:
- 无
返回值:
- 无
LEDC 获取中断状态接口
获取 LEDC 中断状态
函数原型:
unsigned int hal_ledc_get_irq_status(void)
参数:
- 无
返回值:
- LEDC 中断状态寄存器值
LEDC DMA 回调接口
获取 DMA 状态信息
函数原型:
void hal_ledc_dma_callback(void *para)
参数:
- DMAC 状态信息指针
返回值:
- 无
LEDC 复位接口
复位 LEDC
函数原型:
void hal_ledc_reset(void)
参数:
- 无
返回值:
- 无
LEDC 去初始化接口
LEDC 模块去初始化
函数原型:
void hal_ledc_deinit(void)
参数:
- 无
返回值:
- 无
LEDC 初始化接口
LEDC 模块初始化
函数原型 :
int sunxi_led_init(void);
参数:
- 无
返回值:
- 1:成功
- 其他:失败
LEDC 设置单个 LED 颜色亮度
LEDC 设置 LED 的亮度
函数原型:
int sunxi_set_led_brightness(int led_num, unsigned int brightness);
参数:
- led_num:led 数量
- brightness:待配置的亮度
返回值:
- 1:成功
- 其他:失败
LEDC 设置全部 LED 颜色亮度
LEDC 设置 LED 的亮度
函数原型:
int sunxi_set_all_led(int led_num, unsigned int brightness);
参数:
- led_num:led 数量
- brightness:待配置的亮度
返回值:
- 1:成功