初级会员

- 积分
- 113
- 金钱
- 113
- 注册时间
- 2014-2-4
- 在线时间
- 22 小时
|
1金钱
刚做了一块板子,STM32H743IIT6芯片,板本是V,晶振12M,时钟配置Stm32_Clock_Init(160,2,2,4);//设置时钟,480Mhz,我是配置成133M的delay_init(480);
sys文件修改如下
//设置PLL2的R分频输出,为220Mhz,后续做SDRAM时钟,可得到110M的SDRAM时钟频率
RCC->PLLCKSELR|=12<<12; //DIVM2[5:0]=25,设置PLL2的预分频系数
RCC->PLL2DIVR|=(533-1)<<0; //DIVN2[8:0]=440-1,设置PLL2的倍频系数,设置值需减1
RCC->PLL2DIVR|=(2-1)<<9; //DIVP2[6:0]=2-1,设置PLL2的p分频系数,设置值需减1
RCC->PLL2DIVR|=(2-1)<<24; //DIVR2[6:0]=2-1,设置PLL2的r分频系数,设置值需减1
RCC->PLLCFGR|=0<<6; //PLL2RGE[1:0]=0,PLL2输入时钟频率在1~2Mhz之间(12/12=1Mhz)
RCC->PLLCFGR|=0<<5; //PLL2VCOSEL=0,PLL2宽的VCO范围,192~836Mhz
RCC->PLLCFGR|=1<<19; //DIVP2EN=1,使能pll2_p_ck
//SDRAM配置
sdtimereg|=1<<0; //加载模式寄存器到激活时间的延迟为2个时钟周期
sdtimereg|=9<<4; //退出自刷新延迟为8个时钟周期,tXSR=72ns(min)
sdtimereg|=5<<8; //自刷新时间为5个时钟周期,tRAS=42ns(min)
sdtimereg|=7<<12; //行循环延迟为7个时钟周期,tRC=60ns(min)
sdtimereg|=1<<16; //恢复延迟为2个时钟周期,tWR=2 CLK
sdtimereg|=1<<20; //行预充电延迟为2个时钟周期,tRP=15ns(min)
sdtimereg|=1<<24; //行到列延迟为2个时钟周期,tRCD=15ns(min)
......
mregval|=2<<4; //设置CAS值:3(可以是2/3)
......
FMC_Bank5_6->SDRTR=1019<<1; //设置刷新频率计数器
//
测试代码
p1=(u32 *)0xc0000000;
p2=(u32 *)0xc1000000;
for(j=0;j<100;j++){
for(i=0;i<4000000;i++)p1=i;
for(i=0;i<4000000;i++)p2=i;
}
发现这段代码特别慢。在内部存储区测试,减少缓冲大小,增加次数,速度能达到800M字节/秒,而上面的代码只能达到70M。
改成下面参数之后,速度成倍提高。
RCC->PLLCKSELR|=6<<12; //DIVM2[5:0]=25,设置PLL2的预分频系数
我现在想知道什么速度是合理的,如何调到合适的参数。
|
最佳答案
查看完整内容[请看2#楼]
果然是这个问题。实测133M配置下不正常。按原子哥的配置测试。125M勉强能通过测试。考虑到余量,设置成100M比较合理。实测吞吐量差不多200M/S
|