diff --git a/Docs/50_module-breakdown/mod-led.md b/Docs/50_module-breakdown/mod-led.md index b1c74a7..276eb5c 100644 --- a/Docs/50_module-breakdown/mod-led.md +++ b/Docs/50_module-breakdown/mod-led.md @@ -6,9 +6,10 @@ * **职责范围**: 1. 在系统启动时,配置 WS2812 的物理输出引脚 `P2.3` (MOSI)。 - 2. 提供高速的硬件 SPI 发送驱动,配合 LUT 查表展宽算法,输出满足单线纳秒级精度的 WS2812 时序波形。 - 3. 在硬件 SPI 传输 24位灯效数据时,采取临时关闭中断并把复用的 `P2.5` 配置为高阻输入的隔离防噪处理。 - 4. 维护软件定时闪烁状态机,提供报警状态下的指示灯颜色与特定频率闪烁效果。 + 2. 支持一上一下级联(Daisy-chained)的双 WS2812B/FCOB-2.7 灯珠驱动。上灯的 DOUT 串行连接至下灯的 DIN。 + 3. 提供高速的硬件 SPI 发送驱动,配合 LUT 查表展宽算法,连续发送 48-bit (24-bit × 2) 的 GRB 级联数据流,输出满足单线纳秒级精度的 WS2812 时序波形,使两个灯珠同步亮起相同的颜色。 + 4. 在硬件 SPI 传输 48位灯效数据时,采取临时关闭中断并把复用的 `P2.5` 配置为高阻输入的隔离防噪处理。 + 5. 维护软件定时闪烁状态机,提供报警状态下的指示灯颜色与特定频率闪烁效果。 ## 2. LED 报警色彩矩阵 diff --git a/Docs/60_coding/mod-led.md b/Docs/60_coding/mod-led.md index 8713f74..9e0dc80 100644 --- a/Docs/60_coding/mod-led.md +++ b/Docs/60_coding/mod-led.md @@ -55,7 +55,18 @@ void WS2812_Write24Bit(u8 g, u8 r, u8 b) { SPDAT = b0; // 发送数据 SPCTL = 0xD0; // 开启 SPI 硬件传输 - // 展开的非阻塞高速发送时序 (300ns 传输间隔) + // 展开的非阻塞高速发送时序 - 发送第 1 个灯珠 (Top LED) + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b1; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b2; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b3; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b4; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b5; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b6; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b7; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b8; + while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b9; + + // 展开的非阻塞高速发送时序 - 发送第 2 个灯珠 (Bottom LED, 级联相同颜色) while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b1; while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b2; while (!(SPSTAT & 0x80)); SPSTAT = 0xC0; SPDAT = b3;