CH57x_sys.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name : CH57x_SYS.c
  3. * Author : WCH
  4. * Version : V1.0
  5. * Date : 2018/12/15
  6. * Description
  7. *******************************************************************************/
  8. #include "CH57x_common.h"
  9. /*******************************************************************************
  10. * Function Name : SYS_GetInfoSta
  11. * Description : 获取当前系统信息状态
  12. * Input : i:
  13. refer to SYS_InfoStaTypeDef
  14. * Return : DISABLE - 关闭
  15. ENABLE - 开启
  16. *******************************************************************************/
  17. UINT8 SYS_GetInfoSta( SYS_InfoStaTypeDef i )
  18. {
  19. if(i == STA_SAFEACC_ACT)
  20. return (R8_SAFE_ACCESS_SIG & RB_SAFE_ACC_ACT);
  21. else
  22. return (R8_GLOB_CFG_INFO&(1<<i));
  23. }
  24. /*******************************************************************************
  25. * Function Name : SYS_ResetExecute
  26. * Description : 执行系统软件复位
  27. * Input : None
  28. * Return : None
  29. *******************************************************************************/
  30. void SYS_ResetExecute( void )
  31. {
  32. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
  33. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
  34. R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET;
  35. R8_SAFE_ACCESS_SIG = 0;
  36. }
  37. /*******************************************************************************
  38. * Function Name : SYS_DisableAllIrq
  39. * Description : 关闭所有中断,并保留当前中断值
  40. * Input : pirqv:当前保留中断值
  41. * Return : None
  42. *******************************************************************************/
  43. void SYS_DisableAllIrq( PUINT32 pirqv)
  44. {
  45. *pirqv = NVIC->ISER[0];
  46. NVIC->ICER[0] = 0xffffffff;
  47. }
  48. /*******************************************************************************
  49. * Function Name : SYS_RecoverIrq
  50. * Description : 恢复之前关闭的中断值
  51. * Input : irq_status:当前保留中断值
  52. * Return : None
  53. *******************************************************************************/
  54. void SYS_RecoverIrq( UINT32 irq_status )
  55. {
  56. NVIC->ISER[0] = irq_status;
  57. }
  58. /*******************************************************************************
  59. * Function Name : SYS_GetSysTickCnt
  60. * Description : 获取当前系统(SYSTICK)计数值
  61. * Input : None
  62. * Return : 当前计数值
  63. *******************************************************************************/
  64. UINT32 SYS_GetSysTickCnt( void )
  65. {
  66. return(SysTick->VAL );
  67. }
  68. /*******************************************************************************
  69. * Function Name : WWDG_ITCfg
  70. * Description : 看门狗定时器溢出中断使能
  71. * Input : DISABLE-溢出不中断 ENABLE-溢出中断
  72. * Return : None
  73. *******************************************************************************/
  74. void WWDG_ITCfg( UINT8 s )
  75. {
  76. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
  77. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
  78. if(s == DISABLE) R8_RST_WDOG_CTRL&=~RB_WDOG_INT_EN;
  79. else R8_RST_WDOG_CTRL|=RB_WDOG_INT_EN;
  80. R8_SAFE_ACCESS_SIG = 0;
  81. }
  82. /*******************************************************************************
  83. * Function Name : WWDG_ResetCfg
  84. * Description : 看门狗定时器复位功能
  85. * Input : DISABLE-溢出不复位 ENABLE-溢出系统复位
  86. * Return : None
  87. *******************************************************************************/
  88. void WWDG_ResetCfg( UINT8 s )
  89. {
  90. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
  91. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
  92. if(s == DISABLE) R8_RST_WDOG_CTRL&=~RB_WDOG_RST_EN;
  93. else R8_RST_WDOG_CTRL|=RB_WDOG_RST_EN;
  94. R8_SAFE_ACCESS_SIG = 0;
  95. }
  96. /*******************************************************************************
  97. * Function Name : WWDG_ClearFlag
  98. * Description : 清除看门狗中断标志,重新加载计数值也可清除
  99. * Input : None
  100. * Return : None
  101. *******************************************************************************/
  102. void WWDG_ClearFlag( void )
  103. {
  104. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
  105. R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
  106. R8_RST_WDOG_CTRL |= RB_WDOG_INT_FLAG;
  107. R8_SAFE_ACCESS_SIG = 0;
  108. }
  109. /*******************************************************************************
  110. * Function Name : mDelayuS
  111. * Description : uS 延时
  112. * Input : t: 时间参数
  113. * Return : None
  114. *******************************************************************************/
  115. void mDelayuS( UINT16 t )
  116. {
  117. UINT16 i, j;
  118. for(j=0; j<t; j++)
  119. {
  120. #if (FREQ_SYS == 40000000)
  121. for(i=0; i<4; i++) __nop();
  122. #elif (FREQ_SYS == 32000000)
  123. i = 2;
  124. while(i--) { __nop(); __nop(); }
  125. #elif (FREQ_SYS == 24000000)
  126. i = 1;
  127. while(i--) { __nop(); __nop(); }
  128. #elif (FREQ_SYS == 20000000)
  129. for(i=0; i<1; i++) __nop();
  130. #elif (FREQ_SYS == 16000000)
  131. __nop(); __nop(); __nop(); __nop();
  132. __nop(); __nop(); __nop(); __nop(); __nop();
  133. #elif (FREQ_SYS == 8000000)
  134. __nop(); __nop();
  135. #endif
  136. }
  137. }
  138. /*******************************************************************************
  139. * Function Name : mDelaymS
  140. * Description : mS 延时
  141. * Input : t: 时间参数
  142. * Return : None
  143. *******************************************************************************/
  144. void mDelaymS( UINT16 t )
  145. {
  146. UINT16 i;
  147. for(i=0; i<t; i++)
  148. mDelayuS(1000);
  149. }
  150. #if( defined DEBUG)
  151. int fputc( int c, FILE *f )
  152. {
  153. #if DEBUG == Debug_UART0
  154. while( R8_UART0_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
  155. R8_UART0_THR = c; /* 发送数据 */
  156. #elif DEBUG == Debug_UART1
  157. while( R8_UART1_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
  158. R8_UART1_THR = c; /* 发送数据 */
  159. #elif DEBUG == Debug_UART2
  160. while( R8_UART2_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
  161. R8_UART2_THR = c; /* 发送数据 */
  162. #elif DEBUG == Debug_UART3
  163. while( R8_UART3_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
  164. R8_UART3_THR = c; /* 发送数据 */
  165. #endif
  166. return( c );
  167. }
  168. #endif