我正在将
STM32H743II 与 8080 并行总线 LCD 接口。我在 CubeMX 中将 FMC 配置为具有 16 位总线的 LCD 接口,并将 A11 配置为 R/S 引脚。但是,我在将命令/数据写入 LCD 时遇到了问题。在 0x68000000 地址下的单个 uint16_t 写入导致 4 次写入内存,其中第一次写入是有效数据,其余为 0,如逻辑分析仪快照所示。
写入由以下代码执行:
- #define COMMAND_POINTER 0x68000000
- #define DATA_POINTER 0x68001000
- ...
- static uint16_t * command = (uint16_t *) COMMAND_POINTER;
- static uint16_t * data = (uint16_t *) DATA_POINTER;
- ...
- *command = ILI9341_SWRESET; //software reset
我也尝试了 HAL_SRAM_Write_16b(),但结果是一样的。
这些写入基本上编译为 strh(存储寄存器半字)指令,执行这条指令会导致 4 次对 LCD 的写入访问。经过一番调查,我注意到,在递增地址下写入,例如 0x68000002 仅在第二次写入操作中导致有效数据,在 0x68000004 下写入仅在第三次写入操作中导致有效数据,依此类推。这就像 FMC 试图一次写入整个 64 位内存块。
ICache 和 DCache 被禁用,我尝试禁用 FMC 写入 FIFO,但它并没有太大变化。不用说,这种 FMC 行为会中断与 LCD 的
通信。
我没有考虑到一些细节吗?我想避免 bitbanging LCD 信号或改变硬件设计。