delay.c 939 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "delay.h"
  2. #if 1
  3. void delay_us(u32 nUs){
  4. uint32_t i=0,j=0;
  5. for(i=0;i<nUs;i++){
  6. for(j=0;j<22;j++){
  7. }
  8. }
  9. }
  10. //简单的延时函数
  11. void delay_ms(u16 nms)
  12. {
  13. delay_us(nms*1000);
  14. }
  15. #endif
  16. #if 0
  17. //仿原子延时,不进入systic中断
  18. void delay_us(u32 nus)
  19. {
  20. u32 temp;
  21. SysTick->LOAD = 9*nus;
  22. SysTick->VAL=0X00;//清空计数器
  23. SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  24. do
  25. {
  26. temp=SysTick->CTRL;//读取当前倒计数值
  27. }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  28. SysTick->CTRL=0x00; //关闭计数器
  29. SysTick->VAL =0X00; //清空计数器
  30. }
  31. void delay_ms(u16 nms)
  32. {
  33. u32 temp;
  34. SysTick->LOAD = 9000*nms;
  35. SysTick->VAL=0X00;//清空计数器
  36. SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  37. do
  38. {
  39. temp=SysTick->CTRL;//读取当前倒计数值
  40. }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  41. SysTick->CTRL=0x00; //关闭计数器
  42. SysTick->VAL =0X00; //清空计数器
  43. }
  44. #endif