docs: 规划手环级联双 RGB 灯珠硬件 SPI 级联传输驱动与消噪保护时序
This commit is contained in:
@@ -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 报警色彩矩阵
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user