新手上路
- 积分
- 37
- 金钱
- 37
- 注册时间
- 2018-12-2
- 在线时间
- 7 小时
|
本帖最后由 啊哈哈哈 于 2019-1-16 14:46 编辑
最近在研究RT1052的Reference Manual(以下简称RM),突然发现SEMC模块下有8080 DBI(8080 Display Bus Interface),于是就来了兴趣。
解决了大大小小的bug之后,成功点亮OLED屏幕并且写入数据. 大概的原理可以参考ye火(居然会屏蔽这个字...)的sdram教程和RM,有一些细节需要注意:
1. 引脚连接: 在RM上有详细的介绍如何连接DBI,再参考一下板子的引脚定义就好了,当然屏幕的Reset和Vcc引脚还是连在了GPIO2上...
2. SEMC初始化: 这个参考一下库函数的默认配置就可以完美运行了,各个引脚的延时之类的目前都是调成7个Cycles,没有问题。
3. 地址: 这是很关键的问题,因为我的OLED屏幕只有1KB的显存,但是SEMC的Memory Size配置最小是4KB,所以我就想当然地认为应该用4KB,
实际上这样的话在你用IP初始化屏幕的时候会发现如果你想写Command,就必须要将写的地址改成比初始地址大0x10000,这样的话就会导致SEMC误判为
地址溢出,所以务必将这个调为至少128KB(目前没有发现有其他影响,也许是因为这个地址在IP方式中只是起到判断是Data还是Command的作用的)。
4.实际刷新: 在用AXI刷新的时候直接向你定义的那块内存里面写数据就行了,目前发现如果写单字节会有地址跳跃的问题,而每次写4字节就没有,还有就是刷新一定要快,
快到bug追不上你-.-,不然就也会有写入不连续的问题。目前我用的是单个while循环加上开了O2优化加速来做256次unsigned int的刷新,这样就有1024字节了。
最后,打算继续研究eDMA,这样的话就可以实现自动刷新,最小化CPU的负担了。
今天又实验了一下,发现其实每次写入8字节也可以完美运行...
|
|