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