做了个IO口模拟IIC协议读片外RTC的程序,同样的IIC读写程序放在片内SRAM上运行,读写时钟正确,但放在片内FLASH上运行,时钟会走慢,中断已关,片内SRAM和片内FLASH有何区别?请高人解释。。。
片内FLASH如果系统时钟是72M,需要有2个等待,这个是初始化等待吗? 用户手册哪个地方有说明 谢谢
片内FLASH如果系统时钟是72M,需要有2个等待,在reference manual里面说到了,摘录如下:
Note: 1 These options should be used in accordance with the Flash memory access time. The wait
states represent the ratio of the SYSCLK (system clock) period to the Flash memory access
time:
zero wait state, if 0 < SYSCLK ≤ 24 MHz
one wait state, if 24 MHz < SYSCLK ≤ 48 MHz
two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
The Flash memory access time is adjusted to the fHCLK frequency (0 wait state from 0
to 24 MHz, 1 wait state from 24 to 48 MHz and 2 wait states above)
您说的是这个吧 这个是从0HZ到72MHZ需要2个等待状态次数 是上电FLASH初始化时候出现 之后IIC通讯应该不会有影响了吧
程序在片内SRAM和片内FLASH的运行速度不一样。
前面不是说了有等待周期的问题吗?
还有就是Cortex-M3的结构问题,CPU至FLASH有专门的取指通道,取指与操作SRAM可以并行。而CPU至SRAM没有专门的取指通道,取指与操作SRAM不能并行,只能串行。
我觉得FLASH等待时间这个影响可能更大一点 结构的影响应该不大
但还有一个问题,就是我在片内FLASH 执行时,上来就屏蔽所有中断执行IIC读写程序,没有问题,而在IIC读写外部RTC程序前加屏蔽中断,就出问题了,这个怎么解释啊,中断屏蔽了还有影响,放在不同位置,不一样
这个等于没说
thinpadhoho 发表于 2010-5-25 14:16
就是我在片内FLASH 执行时,程序开始就屏蔽所有中断执行IIC读外部RTC,没有问题,而在IIC读外部RTC前屏蔽中断,就有问题,中断屏蔽位置不同,影响不一样
就这个 前面说了
中断位置不同,也是出现走慢的情况还是其他情况?描述仔细一点看呢
片外RTC是自己独立走时吗?应该是你RTC擦左右问题吧?片外RTC怎么会受你程序影响?除非你是MCU模拟RTC。
这个很奇怪啊 外部RTC应该不受我程序影响才是 但实际上 受影响了 这个很奇怪 不知道有没有用STM32+外部RTC的 可以讨论讨论
另外用内部RTC的话 市场上通用的晶振不行 误差太大 一天快3秒左右 要想提高精度 必须得定制6pf匹配电容的32.768K晶振 这块ST设计不知道怎么想的