完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在将 STM32H743II 与 8080 并行总线 LCD 接口。我在 CubeMX 中将 FMC 配置为具有 16 位总线的 LCD 接口,并将 A11 配置为 R/S 引脚。但是,我在将命令/数据写入 LCD 时遇到了问题。在 0x68000000 地址下的单个 uint16_t 写入导致 4 次写入内存,其中第一次写入是有效数据,其余为 0,如逻辑分析仪快照所示。 写入由以下代码执行:
我也尝试了 HAL_SRAM_Write_16b(),但结果是一样的。 这些写入基本上编译为 strh(存储寄存器半字)指令,执行这条指令会导致 4 次对 LCD 的写入访问。经过一番调查,我注意到,在递增地址下写入,例如 0x68000002 仅在第二次写入操作中导致有效数据,在 0x68000004 下写入仅在第三次写入操作中导致有效数据,依此类推。这就像 FMC 试图一次写入整个 64 位内存块。 ICache 和 DCache 被禁用,我尝试禁用 FMC 写入 FIFO,但它并没有太大变化。不用说,这种 FMC 行为会中断与 LCD 的通信。 我没有考虑到一些细节吗?我想避免 bitbanging LCD 信号或改变硬件设计。 |
|
相关推荐
1个回答
|
|
我通过将 fmc SRAM 重新映射到 0xC0000000 解决了这个问题;
HAL_SetFMCMemorySwappingConfig(FMC_SWAPBMAP_SDRAM_SRAM); 为什么这有效?0xC0000000 以下的内存作为设备内存访问,而不是以下的内存 0x60000000 作为普通内存访问。“普通内存允许 CPU 以高效方式安排字节、半字和字的加载和存储(编译器不知道内存区域类型)”。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2635 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3610 浏览 6 评论
5988 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1359浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:03 , Processed in 1.035598 second(s), Total 67, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号