支持的芯片
Ameba SoC |
RTL8721Dx |
RTL8726E |
RTL8720E |
RTL8730E |
---|---|---|---|---|
支持状态 |
Y |
Y |
Y |
Y |
概述
LEDC(LED 控制器)用于控制外部智能 LED 灯具(如 WS2812B)。
LEDC 支持DMA模式和中断模式,配备 32×24 位的LEDC FIFO。
LEDC 还支持 RGB888 显示模式,且可配置刷新时间。
应用实例
编码配置
以 WS2812C-2020 LED 为例,使用前需根据 LED 数据手册中的数据输入编码要求来配置逻辑字符 0
和 1
,如下表所示。
Modulate code |
Description |
Time range |
Unit |
---|---|---|---|
T0H |
Digital 0 code, high-level time |
220 ~ 380 |
ns |
T0L |
Digital 0 code, low-level time |
580 ~ 1000 |
ns |
T1H |
Digital 1 code, high-level time |
580 ~ 1000 |
ns |
T1L |
Digital 1 code, low-level time |
220 ~ 420 |
ns |
RESET |
Frame unit, low-level time |
> 280 |
μs |
逻辑 0
的编码时间为 T0 码(800ns ~ 1980ns),逻辑 1
的编码时间为 T1 码(800ns ~ 2020ns)。
LED数量
支持的 LED 数量计算公式为:
当LED的刷新率为30帧/秒时,支持的LED数量为681 ~ 1023个。
当LED的刷新率为60帧/秒时,支持的LED数量为337 ~ 853个。
相关寄存器
相关配置寄存器包括:
LED_T0&T1_TIMING_CTRL_REG
LEDC_DATA_FINISH_CNT_REG
LED_RESET_TIMING_CTRL_REG
LEDC_WAIT_TIME_CTRL_REG
LEDC_DMA_CTRL_REG
LEDC_INTERRUPT_CTRL_REG
通信模式
WS2812B 系列LED数据传输采用单路非归零(NRZ)通信协议。
LED 上电复位后,通过DI端口从控制器接收数据,首颗LED采集前24位数据并锁存。
后续数据经内部整形电路通过DO端口传输至下一级LED。
每经过一颗LED,信号减少24位。
该系列LED采用自动信号整形技术,级联数量不受物理限制,仅取决于信号传输速率。
操作流程
LEDC 正常配置流程如下:
通过 LEDC_CTRL_REG 寄存器的以下字段来配置LEDC数据模式:
LED_RGB_MODE
LED_MSB_TOP
LED_MSB_BYTE2
LED_MSB_BYTE1
LED_MSB_BYTE0
通过以下寄存器来配置LEDC控制模式:
LED_T01_TIMING_CTRL_REG
LEDC_DATA_FINISH_CNT_REG
LED_RESET_TIMING_CTRL_REG
LEDC_WAIT_TIME0_CTRL_REG
LEDC_WAIT_TIME1_CTRL_REG
LEDC_DMA_CTRL_REG
LEDC_INTERRUPT_CTRL_REG
置位 LEDC_CTRL_REG 寄存器中的 LEDC_EN 位以启用LEDC。
如果 LEDC_DMA_CTRL_REG 寄存器中的 LEDC_DMA_EN 位设置为 1,则跳转到 步骤 5, 否则跳转到 步骤 7。
LEDC 向DMAC 发送 dma_req 请求。
DMAC通过APB总线将数据从内存传输至LEDC FIFO,并在传输结束时发送 dma_ack 确认信号,跳转到 步骤 8。
LEDC向CPU发送 CPU_REQ_INT 中断请求,触发DMA传输,跳转到 步骤 8。
LEDC 将FIFO数据输出至 LED 灯带。
当 LEDC_DATA_FINISH_CNT_REG 寄存器中 LEDC_DATA_FINISH_CNT_REG 的计数值等于 LEDC_CTRL_REG 寄存器中的 TOTAL_DATA_LENGTH 时,触发 LED_TRANS_FINISH_INT 中断,硬件重置 LEDC_EN 为0。
软件清除 LED_TRANS_FINISH_INT 中断。
建议置位 LEDC_CTRL_REG 寄存器中的 LEDC_SOFT_RESET 位,以清除所有中断状态。
如果希望软件再次扫描 LED 灯带,跳转到 步骤 1。