初级会员

- 积分
- 155
- 金钱
- 155
- 注册时间
- 2019-10-19
- 在线时间
- 46 小时
|
发表于 2020-5-19 18:51:55
|
显示全部楼层
我认为DMA 写外部SRAM不是速度问题,而是数据保持时间问题。
模仿LCD的接口设置SRAM时序,DMA将OV2640的数据写到外部SRAM,然后将数据显示在LCD上,还是不正常。但是用内部SRAM就正常(我申请空间120*480).
我觉得不是外部写速度太慢,DMA将数据放到LCD上,写时序很慢,我怀疑是外部SRAM的写操作,NWE变高后,DATA只维持一个时钟,导致的问题。记得早年用NXP的芯片,访问一个黑白LCD,就是这个问题,后来用IO模拟的SRAM时序,就OK了。
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE1 ,也就对应BTCR[0],[1]。
FSMC_Bank1->BTCR[4]=0X00000000;
FSMC_Bank1->BTCR[5]=0X00000000;
FSMC_Bank1E->BWTR[4]=0X00000000;
//操作BCR寄存器 使用异步模式
FSMC_Bank1->BTCR[4]|=1<<12; //存储器写使能
FSMC_Bank1->BTCR[4]|=1<<14; //读写使用不同的时序
FSMC_Bank1->BTCR[4]|=1<<4; //存储器数据宽度为16bit
//操作BTR寄存器
//读时序控制寄存器
FSMC_Bank1->BTCR[5]|=0<<28; //模式A
FSMC_Bank1->BTCR[5]|=0XF<<0; //地址建立时间(ADDSET)为15个HCLK 1/168M=6ns*15=90ns
//因为液晶驱动IC的读数据的时候,速度不能太快,尤其是个别奇葩芯片。
FSMC_Bank1->BTCR[5]|=60<<8; //数据保存时间(DATAST)为60个HCLK =6*60=360ns
//写时序控制寄存器
FSMC_Bank1E->BWTR[4]|=0<<28; //模式A
FSMC_Bank1E->BWTR[4]|=9<<0; //地址建立时间(ADDSET)为9个HCLK=54ns
//9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。
FSMC_Bank1E->BWTR[4]|=8<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns
//使能BANK1,区域4
FSMC_Bank1->BTCR[4]|=1<<0; //使能BANK1,区域1 |
|