条件,FCLK=200M
PCLK=100M,HCLK 100M
并且开启MMU,内存进行映射的情况下
延时函数如下
void delay_pw(void) 3.25us { int i,j; for(j=2;j>0;j--) { for(i=0;i<50;i++) { __asm{ nop } } } } void delay_Tb0(void)//8.33-3.25=5.08us,一个nop合计1.6/50us的时间 { int i,j; for(j=3;j>0;j--) { for(i=0;i<53;i++) { __asm{ nop } } } } void delay_Tb1(void)//14.58-3.25=11.33us,一个nop合计1.6/50us的时间 { int i,j; for(j=2;j>0;j--) { for(i=0;i<183;i++) { __asm{ nop } } } } void delay_Tdelimiter(void)//12.5us { int i,j; for(j=2;j>0;j--) { for(i=0;i<203;i++) { __asm{ nop } } } } void delay_RT(void)//22.91-3.25=19.66us { int i,j; for(i=0;i<600;i++) { __asm{ nop } }//以上定时18.16us,还需定时1.5us for(i=0;i<47;i++) __asm{ nop }//延时1.5us,搞定 }
发现代码改变了之后,nop延时变得非常不准确了哦?
原来是cpu时钟设置不对,当把cpu设置对了之后呢,结果就对了
应该是FCLK200M,HCLK,PCLK都是100M的干活。
得到的query图形如下