这两天看FMC这块,其中关于外扩SRAM或者SDRAM这块有些疑问,比如外扩了SDRAM,SDRAM挂载在1区,在程序里读取SDRAM的数据:
1 uint32_t temp;
2 temp = *(uint32_t *)0xC000 0000;
3 if(temp > 100) temp = 0;
对于第二行代码,可能只需要几个时钟周期就执行完毕了,但是FMC控制时序将外部SDRAM中的数据读取出来并放到数据总线上需要的时间比执行刚才那个语句的时间长,如果没有等待机制的话,很有可能当程序执行到第三行的时候,实际数据还没有读过来,那岂不是会数据出错吗?
想知道这个问题到底是怎么解决的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我知道是硬件自动处理,我的意思是,FMC硬件处理外部SDRAM的时钟最快就90M,而内核执行一条指令的时钟是 180M,第二行语句对应的汇编应该很快就执行完,但是FMC操作一次读取或者写入操作用的时间应该比执行指令的时间长吧? 如果外部FMC操作SDRAM的时序还没完成,第二行代码就已经执行完了,数据岂不是混乱了? 第三行代码的执行不就出错了吗? 处理器是怎么协调内部代码执行时间 和 FMC操作外部SDRAM时序时间 的?
一周热门 更多>