|
发表于 2010-11-10 09:55:04
|
显示全部楼层
楼上的,不客气,也在学习的。QQ最近大战360, 咱力挺周流氓的,哈哈。。。
DrvSYS_Delay的主要问题,可能处在这句中的除法运算
SysTick->LOAD = (us * (SystemCoreClock / 10000)) / 100;
除法在这里是个函数调用,并非硬件指令完成的。
执行两次除法函数的时间,就相当可怕了。
函数库虽然不一定效率很高,学习起来却是最省事的,清楚明白的让我们知道怎么改。
如果确定用48M的话,建议仿效函数库,重新定义一个My_DrvSYS_Delay, 完全不要函数调用并去掉除法。
#define My_DrvSYS_Delay(us) do \
{ \
SysTick->LOAD = (us) * (48000000 / 1000000); \
SysTick->VAL = (0x00); \
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; \
/* Waiting for down-count to zero */ \
while((SysTick->CTRL & (1 << 16)) == 0); \
} while(0) |
|