trouble 发表于 2012-3-1 16:40:57

EPM570+AT070TN92+SRAM LCD驱动问题多多

各位大侠,小弟最近在用CPLD做LCD驱动。CPLD型号EPM570T144,LCD为AT070TN92,外部MCU准备用STM32。系统整体架构为CPLD、MCU与SRAM的总线共享。CPLD通过读取SRAM的数据,再显示在LCD上。MCU通过写入SRAM,控制LCD显示的内容。现在不清楚的是如何分配这两个读写的时间。因为SRAM的总线是共享的,如果时间分配不合理,势必会造成总线冲突。以下是我的一些想法:
1、通过拜读了http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5119145&bbs_page_no=1&bbs_id=1029这个程序后,发现他的系统是54M六分频,里面程序的状态机正好要用6个状态。但目前我的LCD推荐时钟为33M,这样的话,我的外部晶振就要接200M,这是不太现实的。而且我的外部MCU用STM32,好像FSMC最快也就72M,因此我认为这个程序估计参考性不大。
2、我目前接的晶振是66M,二分频接入LCD。那么CPLD要读一整屏数据给LCD的话大概要18.5ms。如果我把MCU写SRAM的过程插入到CPLD读取SRAM的过程中去,好像无法做到。那么我该如何分配MCU的写时序才能做到使人看不到刷屏的过程呢?
3、我未来还想加上MCU可以读SRAM的功能,这样又该如何呢?
4、我还想加上字库的功能,因为我目前板子上保存字库的FLASH用的是串口FLASH,这样就等于MCU写SRAM的时间又会加长。
有哪位可以给我个建议,我的CPLD驱动该如何合理分配对SRAM的读写时间。在下谢谢了先!
也可以私聊QQ:371255635。

fishplj2000 发表于 2012-3-1 16:54:23

DE=Hi时读Sram到LCD
DE=Low时写数据到Sram

最好在MCU和LCD端各加一个DCFIFO,SRAM用100MHz读写

trouble 发表于 2012-3-1 16:59:15

那么MCU写SRAM时就需要检查DE的状态喽?但我看RA8875,SSD1963这些芯片好像没有这种引脚呀。而且还要问一下,因为MCU写SRAM的开始时间是不确定的,如果我的MCU用DMA方式对SRAM进行写操作的时候,这个状态好像不好操作吧。

honami520 发表于 2012-3-1 17:06:30

STM32的FSMC只有36M,除非你打算用STM32F407。

fishplj2000 发表于 2012-3-2 11:39:59

回复【2楼】trouble
-----------------------------------------------------------------------
如果使用一片Sram:
1. 在同一时间肯定只能由一个设备控制,要么是mcu要么是cpld
2. 66Mhz的系统时钟,33M的LCD时钟,那么MCU只可能在CPLD释放总线才能写sram,即在lcd的消隐期,此时MCU只能在特定的时间内写ram
3. 当然,如果MCU够快,远远高于33Mhz,那么可以让CPLD在LCD时钟的前半周读sram,后半周释放sram总线,MCU插空写sram。

MCU速度不够高,又要加大数据吞吐率,那么可以用下面两种思路:
1. MCU到Sram间加一级缓存L1,如1/3、1/2页,MCU随机写满L1,CPLD在66Mhz下在消隐期和DCLK后半周将L1的数据写入sram
2. 另加一片Sram,MCU和CPLD交错控制这两片ram,MCU只有写完一页后,才让CPLD读刚更新的页,这样看不到刷屏过程,MCU可以随机写;

shangdawei 发表于 2012-3-7 23:35:08

系统整体架构为CPLD、MCU与SRAM的总线共享, 似乎不太合适. 是否可以用把六个状态改为两个状态呢 ?

第一个状态设置lcd读取的地址, 同时可以读取当前数据( 第二个状态设置的STM32的地址 ) WE=1, 释放数据总线, 完成写入, 更新STM32地址
第二个状态读取lcd地址的数据, 同时设置要写入或者读取数据的地址, 如果是写入同时设置写入数据, WE=0, 驱动数据总线
等到转入第一个状态时数据已经写入, WE=1, 释放数据总线, 如此反复 ?

在STM32 读取数据后要更新地址, 等到STM32下次读取时, 数据已经就绪
再写入数据后, 也要更新地址, 为下次写入做准备

晶振是66M,二分频接入LCD = 33M, 66M 的周期 15 ns 大于 SRAM 访问时间 10 ns, 应该没有问题

   SRAM_ADDR    SRAM_DATA_OUTSRAM_DATA_IN   SRAM_WE
S0   LCD_ADDR   TO STM32       ZZZZZZZZZZZZ   1可以读取SRAM数据等待STM32读取, 待读取后更新地址
S1   STM32_ADR    TO LCD         ZZZZZZZZZZZZ   1总是读取SRAM数据并且发送到LCD,更新LCD_ADR, 设置STM32读取地址
S1   STM32_ADR    TO LCD         XXXXXXXXXXXX   0设置STM32读取地址(有数据待写入SRAM, 驱动总线, 到S0 写入完成后更新地址)
S1   LCD_ADDR                  ZZZZZZZZZZZZ   1( 如果STM32无请求, 保持 S0 状态 )

相比 6 个状态, 每一轮只能写入 1 次, 而 6 个状态可以写入 3 次, 在清屏和8点写入时, 速度比较慢.
但是还是可以无等待读写SRAM数据, STM32 发送一次数据至少需要 2 个周期 ( HCLK ),
加上数据处理的时间 1 CLK, 最大 72/3 = 24M, 小于写入SRAM 的速度 33M
如果启用 DMA 发送数据到 CPLD, CPLD的速度可能跟不上了

Forever 发表于 2012-3-8 09:22:55

关注!

ifus 发表于 2012-9-12 16:22:19

现在进展怎么样了?
页: [1]
查看完整版本: EPM570+AT070TN92+SRAM LCD驱动问题多多