你好
我尝试使用 Raspberry Pi 3b 的 ARM 组件(裸机、因此未安装操作系统)来驱动 TLC5940。
我使用4个内核中的3个。 内核0在管理初始化(GPIO、屏幕帧缓冲器等)后、正在修改存储 LED 颜色的缓冲区、内核1正在管理空白、XLAT 和 GSCLK、而内核2正在将数据从 LED 颜色缓冲区传输到输入移位寄存器(SIN 和 SCLK)。 内存中有1个变量称为"BufferFeded"、允许 core1和 core 2之间同步。 最初、此 var 为0 (LED 颜色缓冲区不为空)。
我已经全面阅读了数据表、我的环路包括:
对于内核1:
-将空白设置为高(高)
- MainLoop1:
-当 BufferFed=0时,转至 MainLoop1
-将空白设置为 H
-将 XLAT 设置为 H
-将 XLAT 设置为 L (低)
-设置 BufferFed=1 (内核2可能再次启动以填充输入移位寄存器)
-将空白设置为 L
- GSLKLoop:
-µs 内部计时器将 GSLK 设置为 H,然后定期设置为 L (我每4 μ s,然后我每秒有60个周期)
虽然我们没有4096个脉冲,但返回到 GSLKLoop
-返回 MainLoop1
对于 core2:
- MainLoop2:
- BufferFed=1时,转至 MainLoop2
- ByteLoop2:
-读取缓冲区中的一个字节(从最后一个字节到第一个字节、相对于 MSB 到 LSB)
- BitLoop2:
-检查最高有效位并相应地设置 SIN
-将 SCLK 设置为 H,然后设置为 L
-向左移动数据字节
-如果我们没有检查完整字节,请返回 BitLoop2
-要从8位值转换为12位值、请再添加4个 SIN=L、然后 SCLK=H、然后 SCLK=L
-检查我们是否已完成所有字节的操作,如果不是,请返回 ByteLoop2
-设置 BufferFed=1
-返回 MainLoop2
它运行良好、但并不是很长时间、我有一个视频展示了它:
这是它工作的最长时间... 如您所见、它最终会停止。
我已经检查了屏幕上写入的值、并且没有内存泄漏(堆栈指针是常量的、显示变量所在的内存显示它正常运行)、那么什么?
您是否有任何想法、为什么这不能无限期地工作?
感谢你的帮助。
Cathy L.