共2条
1/1 1 跳转至页
Lpc2210,flash Lpc2210是怎么符合flash的读写时序的,糊涂了,请高手指教
问
#define Fosc 11059200
#define Fcclk (Fosc * 4)
以上是周公lpc2200模板的boot对pll的设置,也就是说2210工作于44MHz下,
按照周公的ARM教程上说ARM7tdmi“能提供0.9MIPS/MHz的指令执行速度”(3.2.1三级流水线),那就算是0.5MIPS/MHz吧(好算些,结论一样),就是说2个cclk可以执行一条指令,2个cclk是(1/22)ns。
lpc启动时MAM被禁止,直接从flash取指(设为外部flash启动),虽然BCFG0的WST(读访问长度)复位值为最大34 cclk(即0.77ns),但是根据SST39VF160数据手册所写,即使是最快的55ns的读周期时间也远远地超过了34 cclk,但为什么周公的smart2200能够用外部flash SST39VF160正常启动呢?
同样的,黄皮书里外部存储器接口1(实验2.15)的例程在写flash前先写入必须的软件命令时序:
(相关宏定义
#define FLASH_ADDR 0x81000000
#define GetAddr(addr) (volatile uint16 *)(FLASH_ADDR|(addr<<1))
)
实际语句:
ip=GetAddr(0x5555);
*ip=0xAA;
ip=GetAddr(0x2AAA);
*ip=0x55;
ip=GetAddr(0x5555);
*ip=0xA0;
从axd里看其产生的汇编语句也就1-3句/条c语句,而SST39VF160数据手册里一个命令的地址就必须保持最小30ns,同样与34 cclk差太多了,但执行却正确。
看来应该是我的时间的计算有问题,但是不知道哪有问题,请高手指教啊! 答 1: 2个cclk是(1/22)ns?怎么算的?34cclk才0.77ns?LPC2210什么时候成了GHz级的处理器?
答 2: boot运行的开始频率是不用pll的此时flash是满足要求的,在配置pll之前正确的配置了等待周期就不会到导致取指失败,但是此时的运行速度实在是很慢的,用22x0的用户最好要研究一下把最要求速度的一部分代码放到内部sram运行 答 3: 2个cclk是(1/22)ns?怎么算的?MIPS是百万条指令每秒,0.5MIPS/MHz,就是1条指令/2cclk,然后44MHz的倒数就是1/44ns(10e-6秒)=1cclk。是这么算的吗?
这样,就算mam有加速,但flash的最小读写周期是固定的,读写一个word还是要几十ns的吧。
应该是算法上有问题,希望大家能给出正确的算法。 答 4: 错了错了!1ns = 10e-9s!44MHz的时钟,每个时钟周期应该是1/44us = 22.7ns!
答 5: 44MHz的时钟,每个时钟周期应该是1/44us = 22.7ns!对了。
1ns是1秒的10亿分之一,我还以为ms以下是ns然后才是us,记错了:)。
多谢楼上的提醒。
那么这样的话,就是1条ARM指令/6cclk(2*16bit,6cclk>(2*55)ns)),即使mam加速,mam取指周期MAMTIM的值只能是1-7cclk,而mam每次取指为4个代码字,时间不够啊,教程里还推荐40MHz以上取MAMTIM=3cclk,这个是怎么算的?请大家继续帮助,谢谢。 答 6: 没人知道吗?还是因为太简单了大家不想帮忙回答一下吗?
我还是新手,希望大家指导一下。版主放假回来的话,也请看一下吧。
是关于楼上的mam加速的问题。
看了一下论坛的老贴,是不是mamtim实际是指一次读flash的操作的cclk,mam取指时是进行了4次的读flash操作,也就是mam一次取指所用周期为(4*2*MAMTIM)=8*3cclk? 答 7: mam是针对片内flash的片内flash的访问周期为50ns以上,即最高频率20MHz。
所以,CCLK>20MHz,mamtim设为2,CCLK>40MHz,mamtim设为3。 答 8: mam是针对片内flash的应该不是这样的,因为2210没有片内flash,但是有mam加速。
#define Fcclk (Fosc * 4)
以上是周公lpc2200模板的boot对pll的设置,也就是说2210工作于44MHz下,
按照周公的ARM教程上说ARM7tdmi“能提供0.9MIPS/MHz的指令执行速度”(3.2.1三级流水线),那就算是0.5MIPS/MHz吧(好算些,结论一样),就是说2个cclk可以执行一条指令,2个cclk是(1/22)ns。
lpc启动时MAM被禁止,直接从flash取指(设为外部flash启动),虽然BCFG0的WST(读访问长度)复位值为最大34 cclk(即0.77ns),但是根据SST39VF160数据手册所写,即使是最快的55ns的读周期时间也远远地超过了34 cclk,但为什么周公的smart2200能够用外部flash SST39VF160正常启动呢?
同样的,黄皮书里外部存储器接口1(实验2.15)的例程在写flash前先写入必须的软件命令时序:
(相关宏定义
#define FLASH_ADDR 0x81000000
#define GetAddr(addr) (volatile uint16 *)(FLASH_ADDR|(addr<<1))
)
实际语句:
ip=GetAddr(0x5555);
*ip=0xAA;
ip=GetAddr(0x2AAA);
*ip=0x55;
ip=GetAddr(0x5555);
*ip=0xA0;
从axd里看其产生的汇编语句也就1-3句/条c语句,而SST39VF160数据手册里一个命令的地址就必须保持最小30ns,同样与34 cclk差太多了,但执行却正确。
看来应该是我的时间的计算有问题,但是不知道哪有问题,请高手指教啊! 答 1: 2个cclk是(1/22)ns?怎么算的?34cclk才0.77ns?LPC2210什么时候成了GHz级的处理器?
答 2: boot运行的开始频率是不用pll的此时flash是满足要求的,在配置pll之前正确的配置了等待周期就不会到导致取指失败,但是此时的运行速度实在是很慢的,用22x0的用户最好要研究一下把最要求速度的一部分代码放到内部sram运行 答 3: 2个cclk是(1/22)ns?怎么算的?MIPS是百万条指令每秒,0.5MIPS/MHz,就是1条指令/2cclk,然后44MHz的倒数就是1/44ns(10e-6秒)=1cclk。是这么算的吗?
这样,就算mam有加速,但flash的最小读写周期是固定的,读写一个word还是要几十ns的吧。
应该是算法上有问题,希望大家能给出正确的算法。 答 4: 错了错了!1ns = 10e-9s!44MHz的时钟,每个时钟周期应该是1/44us = 22.7ns!
答 5: 44MHz的时钟,每个时钟周期应该是1/44us = 22.7ns!对了。
1ns是1秒的10亿分之一,我还以为ms以下是ns然后才是us,记错了:)。
多谢楼上的提醒。
那么这样的话,就是1条ARM指令/6cclk(2*16bit,6cclk>(2*55)ns)),即使mam加速,mam取指周期MAMTIM的值只能是1-7cclk,而mam每次取指为4个代码字,时间不够啊,教程里还推荐40MHz以上取MAMTIM=3cclk,这个是怎么算的?请大家继续帮助,谢谢。 答 6: 没人知道吗?还是因为太简单了大家不想帮忙回答一下吗?
我还是新手,希望大家指导一下。版主放假回来的话,也请看一下吧。
是关于楼上的mam加速的问题。
看了一下论坛的老贴,是不是mamtim实际是指一次读flash的操作的cclk,mam取指时是进行了4次的读flash操作,也就是mam一次取指所用周期为(4*2*MAMTIM)=8*3cclk? 答 7: mam是针对片内flash的片内flash的访问周期为50ns以上,即最高频率20MHz。
所以,CCLK>20MHz,mamtim设为2,CCLK>40MHz,mamtim设为3。 答 8: mam是针对片内flash的应该不是这样的,因为2210没有片内flash,但是有mam加速。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |