1. void delay_ms(u16 nms)
2. {
3. u32 temp;
4. SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
5. SysTick->VAL =0x00; //清空计数器
6. SysTick->CTRL=0x01 ; //开始倒数
7. do
8. {
9. temp=SysTick->CTRL;
10. }
11. while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
12. SysTick->CTRL=0x00; //关闭计数器
13. SysTick->VAL =0X00; //清空计数器
14. }
15. #endif
问:1.其中第11行怎么理解,好复杂!
2.寄存器 SysTick->CTRL是一个16位的吗?
3.手册上说SysTick是一个倒计数器,请问是通过自动减一来计数的吗(没有看见像j--之类的语句)?
4.其中SysTick->LOAD=(u32)nms*fac_ms表示的是脉冲的个数,但记录的脉冲个数放在哪个寄存器里啊?
5.根据cotex-m3第133页介绍,寄存器SysTick->CTRL只有0、1、2和16位的描述,为什么没有其他为的描述呢?平时用的时候怎么设置?对第16位的描述怎么理解?
语句while((temp&0x01)&&!(temp&(1CTRL是16位的,而0x01是8位的,他们怎么进行&啊?
寄存器SysTick->CTRL(cotex-m3手册的133页)的第16位后面的描述“
如果在上次读取本寄存器后,SysTick 已经数到了
0,则该位为1。如果读取该位,该位将自动清零
“怎么理解。
只进行 低八位相与,不过我认为是你的例子写错了,应该是0x0001,
2,该寄存器为只读写零 寄存器 你看看 寄存器 底下是否有 r0_w1的标志 ,顺便查下手册的开头 有对这些 缩写的描述。