1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
使用OMAP-L138通过SPI控制两款屏幕:
屏幕1:像素160*128,16比特; 屏幕2:像素320*240,16比特; 均使用EDMA3写入显存数据,屏幕1数据量较小(160*128*2=40960字节),使用A Sync模式,屏幕2数据量较大(320*240*2=153600字节),使用AB Sync模式。按照表格中配置DMA参数,屏幕1可以正常显示,屏幕2却不能正常显示且程序卡死。请问我的参数是不是配置的不正确,或者除了Param这几个寄存器,使用AB Sync模式还需要配置哪些寄存器,请高手指点,不胜感激。
#define ACNT 2 #define BCNT 240 #define CCNT 320 #define BCNTRLD 0 #define LINK 0xFFFF #define DSTBIDX 0 #define SRCBIDX 2 #define DSTCIDX 0 #define SRCCIDX (ACNT * BCNT) |
|
相关推荐
6个回答
|
|
我看手册spruh77a第18.3.4.2 Brusting Peripherals一章举得例子,和我的情况完全相同,但是按照其配置方法,仍然会卡死,也不能正常显示。
|
|
|
|
yzrui 发表于 2018-6-21 17:33 把param按照下面的参数配置: param.a_b_cnt = (2 << 16) | 2; param.src_dst_bidx = 2; param.link_bcntrld = 0x0000FFFF; param.src_dst_cidx = 4; param.ccnt = 38400; 屏幕被横竖分成四个相同的区域,每个区域显示一副完整的图像,读取Framebuffer缓冲区,和原图片相同,好像DMA每隔四个像素取一个值传输。 |
|
|
|
SPI接口就一个数据寄存器,不能支持AB同步,因为AB同步是一个事件往SPI搬A*B个数据,SPI接口里没地方放啊,需要等移位寄存器往外移出一个数才可以接收下一个数。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 17:59 多谢您的答复,从示波器上看,发送的数据索引是0、3、7、...,确实是隔四个送出一个。而且手册上写着138的DMA不支持FIFO,那么像我这种情况应该如何操作?我要是把BCNT设置成1,那么CCNT就是76800,超过了65535的限制,那么CCNT设置为38400,屏幕被上下等分,每块均显示图片的上半部分;我想在TCINTEN回调函数中重新更新Param,继续显示下半副图像,但是屏幕却滚动的很厉害;我看手册上提到Chaining,本次Param耗尽后可以执行另一个Channel的操作,请问这个Channel可以和本Channel相同吗?请问您那里有例程吗? |
|
|
|
yzrui 发表于 2018-6-21 18:11 还是用A-sync,把B*C设成你需要的值,而不是B=1。这里肯定不是用Chain,要用也应该是用Link。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 18:17 谢谢,是您给我很大启发,是我想太多了。 /* Channel Options Parameters (OPT) Field Descriptions of EDMA3 */ param.opt = #ifdef SPI_DMA_TCINT_ENABLE TCINTEN | #endif EDMA_TCC(channel) /* | SYNCDIM | FWID(3) | SAM | DAM | STATIC | ITCINTEN | TCCHEN | ITCCHEN | TCCMODE */; param.src = dma_phyaddr; param.dst = spi_phyaddr; #define ACNT 2 #define BCNT 240 #define CCNT 320 param.a_b_cnt = (BCNT << 16) | ACNT; param.src_dst_bidx = ACNT; param.link_bcntrld = (BCNT << 16) | 0xFFFF; param.src_dst_cidx = ACNT; param.ccnt = CCNT; 这样配置就可以正常显示了。 |
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
56浏览 29评论
128浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
252浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
201浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
57浏览 13评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:21 , Processed in 0.524262 second(s), Total 52, Slave 46 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号