我采用的处理器为STM32F103VC,在对PCM语音的2.048M时钟进行IO采样时感觉很吃力呀。 例如:我用PB0做上升沿外部中断,一旦触发中断,就将PB1的IO线拉低。进中断后,不做任何操作,直接将PB1的IO拉低了,对于PB1的数据输出寄存器的操作不使用官方带的库函数(库函数确实有些低效),而直接通过位带区来访问PB1数据输出寄存器的BIT1位(减少了位操作的时间)。并且代码采用了编译器的最高级优化。但是,从示波器看,从上升沿触发中断,到PB1的IO拉低,中间过了500ns,感觉时间还是好长啊,请问有没高手能解答这个是否正常?是我哪里出问题了么?如果正常,那么处理器中间做了什么花费了这么多的时间? 在上面的基础上,我在触发中断和拉低电平之间加入了一句读取RAM中数据的操作,加入该操作后,能看到PB1的IO拉低的时间推迟了大概200ns以上。请问这个是否正常呢?看汇编,其中第一句语句是到PC位置后面的某处获取该RAM中变量的地址,然后将该RAM读取到寄存器中,也就2个指令,应该不用花费这么久的时间,非常疑惑。望高手解答。感谢之至! |
RE:请教一个有关STM32中断处理和执行效率的问题
1、主频是多少?如果是72MHZ,那么执行一条指令的理论时间为14ns;
2、确认开启程序前面初始化IO口的频率是多少。
回复:请教一个有关STM32中断处理和执行效率的问题
RE:请教一个有关STM32中断处理和执行效率的问题
我看了资料,里面说STM32的中断响应时间为12个指令周期,感觉500ns好像有点长呀。
RE:请教一个有关STM32中断处理和执行效率的问题
请考虑使用其它方法吧,比如使用SPI。
RE:请教一个有关STM32中断处理和执行效率的问题
回复:请教一个有关STM32中断处理和执行效率的问题
正如楼上的楼上所说,用这种方式去采样的时候无法做别的事情了,不过目前我采用这样的方式正好能够实现PCM的录音,但是PCM放音却一直无法实现,我尝试下使用SPI的方式。
谢谢各位的指点!谢谢!^^