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)20 UINT8 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)34 void 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)48 void 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)60 void 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)71 UINT32 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)82 void  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)97 void 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)112 void 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)127 void 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)166 void 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)176 int 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