|
发表于 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_OUT SRAM_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的速度可能跟不上了 |
|