IC:

支持的芯片

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 数据手册中的数据输入编码要求来配置逻辑字符 01,如下表所示。

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 数量计算公式为:

\begin{gather*} LED\_NUM = \frac{\frac{1}{LED\,fresh\,rate(\frac{frame}{s})} - 280μs}{(logical\,0\,or\,1\,coding\,time) * 24} \end{gather*}
  • 当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 正常配置流程如下:

../../_images/ledc_normal_configuration_process.svg
  1. 通过 LEDC_CTRL_REG 寄存器的以下字段来配置LEDC数据模式:

    • LED_RGB_MODE

    • LED_MSB_TOP

    • LED_MSB_BYTE2

    • LED_MSB_BYTE1

    • LED_MSB_BYTE0

  2. 通过以下寄存器来配置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

  3. 置位 LEDC_CTRL_REG 寄存器中的 LEDC_EN 位以启用LEDC。

  4. 如果 LEDC_DMA_CTRL_REG 寄存器中的 LEDC_DMA_EN 位设置为 1,则跳转到 步骤 5, 否则跳转到 步骤 7

  5. LEDC 向DMAC 发送 dma_req 请求。

  6. DMAC通过APB总线将数据从内存传输至LEDC FIFO,并在传输结束时发送 dma_ack 确认信号,跳转到 步骤 8

  7. LEDC向CPU发送 CPU_REQ_INT 中断请求,触发DMA传输,跳转到 步骤 8

  8. LEDC 将FIFO数据输出至 LED 灯带。

  9. LEDC_DATA_FINISH_CNT_REG 寄存器中 LEDC_DATA_FINISH_CNT_REG 的计数值等于 LEDC_CTRL_REG 寄存器中的 TOTAL_DATA_LENGTH 时,触发 LED_TRANS_FINISH_INT 中断,硬件重置 LEDC_EN 为0。

  10. 软件清除 LED_TRANS_FINISH_INT 中断。

  11. 建议置位 LEDC_CTRL_REG 寄存器中的 LEDC_SOFT_RESET 位,以清除所有中断状态。

  12. 如果希望软件再次扫描 LED 灯带,跳转到 步骤 1