TM52F1386_bsp.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include <REGtenxTM52F1386.h>
  2. #include <intrins.h>
  3. #include "TM52F1386_bsp.h"
  4. /**********************************************************************************************************
  5. **函数名称 bsp_clock_init()
  6. **函数描述 :设置内部FRC/2为系统时钟
  7. **输 入 :无
  8. **输 出 :无
  9. **说 明 :快时钟系统主频为 18.432/2M 默认二分频
  10. **********************************************************************************************************/
  11. void bsp_clock_init()
  12. {
  13. SELFCK = 0; //切换到慢时钟
  14. CLKCON = 0x02; //时钟二分频
  15. // CLKCON = 0x03; //时钟一分频
  16. STPPCK = 0; //开启部分模块使用快时钟
  17. STPFCK = 0; //开启快时钟
  18. SELFCK = 1; //切换到快时钟
  19. }
  20. /**********************************************************************************************************
  21. **函数名称 bsp_FXT_clock_init()
  22. **函数描述 :设置FXT外部快速晶体振荡器/2为系统时钟
  23. **输 入 :无
  24. **输 出 :无
  25. **说 明 :注意 P20 P21需要配置为接外部快速晶振
  26. **********************************************************************************************************/
  27. void bsp_FXT_clock_init()
  28. {
  29. SELFCK = 0; //切换到慢时钟
  30. CLKCON = 0x02; //时钟二分频
  31. // CLKCON = 0x03; //时钟一分频
  32. FCKTYPE = 1; //FXT
  33. STPPCK = 0; //开启快时钟
  34. STPFCK = 0; //开启部分模块使用快时钟
  35. //延时2ms等待晶体振荡器稳定
  36. bsp_delay_ms(2);
  37. SELFCK = 1; //切换到快时钟
  38. }
  39. /**********************************************************************************************************
  40. **函数名称 bsp_SXT_clock_init()
  41. **函数描述 :设置SXT外部慢速晶体振荡器/2为系统时钟
  42. **输 入 :无
  43. **输 出 :无
  44. **说 明 :注意 P20 P21需要配置为接外部快速晶振
  45. **********************************************************************************************************/
  46. void bsp_SXT_clock_init()
  47. {
  48. SELFCK = 0; //切换到慢时钟
  49. CLKCON = 0x02; //时钟二分频
  50. // CLKCON = 0x03; //时钟一分频
  51. STPPCK = 0; //开启快时钟
  52. STPFCK = 0; //开启部分模块使用快时钟
  53. SELFCK = 1; //切换到快时钟
  54. SCKTYPE = 1; //SXT
  55. SELFCK = 0; //切换到慢时钟
  56. }
  57. /**********************************************************************************************************
  58. **函数名称 bsp_delay_100us()
  59. **函数描述 :100us单位延时函数
  60. **输 入 :
  61. **输 出 :无
  62. **说 明 :基于内部时钟二分频计算,非精确延时
  63. **********************************************************************************************************/
  64. void bsp_delay_100us(unsigned int cnt) //该函数不是精确延时,根据内部时钟FRC二分频计算得来的
  65. {
  66. unsigned int i;
  67. unsigned char delay_cnt;
  68. for(i = 0;i<cnt;i++)
  69. {
  70. delay_cnt = 23;
  71. while(delay_cnt--)
  72. {
  73. delay_10nop();
  74. }
  75. }
  76. }
  77. /**********************************************************************************************************
  78. **函数名称 bsp_delay_100us()
  79. **函数描述 :100us单位延时函数
  80. **输 入 :
  81. **输 出 :无
  82. **说 明 :基于内部时钟二分频计算,非精确延时
  83. **********************************************************************************************************/
  84. void bsp_delay_ms(unsigned int ms) //该函数不是精确延时,根据内部时钟FRC二分频计算得来的
  85. {
  86. unsigned int i;
  87. unsigned char delay_cnt;
  88. for(i = 0;i<ms;i++)
  89. {
  90. delay_cnt =95;
  91. while(delay_cnt--)
  92. {
  93. delay_10nop();
  94. delay_10nop();
  95. delay_10nop();
  96. delay_10nop();
  97. }
  98. }
  99. }