1 /**
2   ******************************************************************************
3   * @file    lib_misc.c
4   * @author  Application Team
5   * @version V4.4.0
6   * @date    2018-09-27
7   * @brief   MISC library.
8   ******************************************************************************
9   * @attention
10   *
11   ******************************************************************************
12   */
13 #include "lib_misc.h"
14 
15 /**
16   * @brief  Get flag status.
17   * @param  FlagMask:
18                 MISC_FLAG_LOCKUP
19                 MISC_FLAG_PIAC
20                 MISC_FLAG_HIAC
21                 MISC_FLAG_PERR
22   * @retval Flag status.
23   */
MISC_GetFlag(uint32_t FlagMask)24 uint8_t MISC_GetFlag(uint32_t FlagMask)
25 {
26   /* Check parameters */
27   assert_parameters(IS_MISC_FLAGR(FlagMask));
28 
29   if (MISC->SRAMINT&FlagMask)
30   {
31     return 1;
32   }
33   else
34   {
35     return 0;
36   }
37 }
38 
39 /**
40   * @brief  Clear flag status.
41   * @param  FlagMask: can use the ��|�� operator
42                 MISC_FLAG_LOCKUP
43                 MISC_FLAG_PIAC
44                 MISC_FLAG_HIAC
45                 MISC_FLAG_PERR
46   * @retval None
47   */
MISC_ClearFlag(uint32_t FlagMask)48 void MISC_ClearFlag(uint32_t FlagMask)
49 {
50   /* Check parameters */
51   assert_parameters(IS_MISC_FLAGC(FlagMask));
52 
53   MISC->SRAMINT = FlagMask;
54 }
55 
56 /**
57   * @brief  Interrupt configure.
58   * @param  INTMask: can use the ��|�� operator
59                 MISC_INT_LOCK
60                 MISC_INT_PIAC
61                 MISC_INT_HIAC
62                 MISC_INT_PERR
63             NewState:
64                 ENABLE
65                 DISABLE
66   * @retval None
67   */
MISC_INTConfig(uint32_t INTMask,uint32_t NewState)68 void MISC_INTConfig(uint32_t INTMask, uint32_t NewState)
69 {
70   uint32_t tmp;
71 
72   /* Check parameters */
73   assert_parameters(IS_MISC_INT(INTMask));
74   assert_parameters(IS_FUNCTIONAL_STATE(NewState));
75 
76   tmp = MISC->SRAMINIT;
77   if (NewState == ENABLE)
78   {
79     tmp |= INTMask;
80   }
81   else
82   {
83     tmp &= ~INTMask;
84   }
85   MISC->SRAMINIT = tmp;
86 }
87 
88 /**
89   * @brief  sram parity contrl.
90   * @param  NewState:
91                 ENABLE
92                 DISABLE
93   * @retval None
94   */
MISC_SRAMParityCmd(uint32_t NewState)95 void MISC_SRAMParityCmd(uint32_t NewState)
96 {
97   /* Check parameters */
98   assert_parameters(IS_FUNCTIONAL_STATE(NewState));
99 
100   if (NewState == ENABLE)
101   {
102     MISC->SRAMINIT |= MISC_SRAMINIT_PEN;
103   }
104   else
105   {
106     MISC->SRAMINIT &= ~MISC_SRAMINIT_PEN;
107   }
108 }
109 
110 /**
111   * @brief  Get sram parity error address.
112   * @param  None
113   * @retval parity error address.
114   */
MISC_GetSRAMPEAddr(void)115 uint32_t MISC_GetSRAMPEAddr(void)
116 {
117   uint32_t tmp;
118 
119   tmp = MISC->PARERR;
120   tmp = tmp*4 + 0x20000000;
121   return tmp;
122 }
123 
124 /**
125   * @brief  Get APB error address.
126   * @param  None
127   * @retval APB error address.
128   */
MISC_GetAPBErrAddr(void)129 uint32_t MISC_GetAPBErrAddr(void)
130 {
131   uint32_t tmp;
132 
133   tmp = MISC->PIADDR;
134   tmp = tmp + 0x40010000;
135   return tmp;
136 }
137 
138 /**
139   * @brief  Get AHB error address.
140   * @param  None
141   * @retval AHB error address.
142   */
MISC_GetAHBErrAddr(void)143 uint32_t MISC_GetAHBErrAddr(void)
144 {
145   uint32_t tmp;
146 
147   tmp = MISC->HIADDR;
148   tmp = tmp + 0x40000000;
149   return tmp;
150 }
151 
152 /**
153   * @brief  IR control.
154   * @param  IRx:
155                 MISC_IREN_TX0
156                 MISC_IREN_TX1
157                 MISC_IREN_TX2
158                 MISC_IREN_TX3
159                 MISC_IREN_TX4
160                 MISC_IREN_TX5
161             NewState:
162                 ENABLE
163                 DISABLE
164   * @retval None
165   */
MISC_IRCmd(uint32_t IRx,uint32_t NewState)166 void MISC_IRCmd(uint32_t IRx, uint32_t NewState)
167 {
168   uint32_t tmp;
169 
170   /* Check parameters */
171   assert_parameters(IS_FUNCTIONAL_STATE(NewState));
172   assert_parameters(IS_MISC_IREN(IRx));
173 
174   tmp = MISC->IREN;
175   if (NewState == ENABLE)
176   {
177     tmp |= IRx;
178   }
179   else
180   {
181     tmp &= ~IRx;
182   }
183   MISC->IREN = tmp;
184 }
185 
186 /**
187   * @brief  IR duty configure.
188   * @param  DutyHigh
189                 The high pulse width will be (DUTYH + 1)*APBCLK period.
190             DutyLow
191                 The low pulse width will be (DUTYL + 1)*APBCLK period.
192   * @retval None
193   */
MISC_IRDutyConfig(uint16_t DutyHigh,uint16_t DutyLow)194 void MISC_IRDutyConfig(uint16_t DutyHigh, uint16_t DutyLow)
195 {
196   MISC->DUTYH = DutyHigh;
197   MISC->DUTYL = DutyLow;
198 }
199 
200 /**
201   * @brief  Hardfault generation configure.
202   * @param  NewState:
203                 ENABLE
204                 DISABLE
205   * @retval None
206   */
MISC_HardFaultCmd(uint32_t NewState)207 void MISC_HardFaultCmd(uint32_t NewState)
208 {
209    /* Check parameters */
210   assert_parameters(IS_FUNCTIONAL_STATE(NewState));
211 
212   if (NewState == ENABLE)
213   {
214     MISC->IRQLAT &= ~MISC_IRQLAT_NOHARDFAULT;
215   }
216   else
217   {
218     MISC->IRQLAT |= MISC_IRQLAT_NOHARDFAULT;
219   }
220 }
221 
222 /**
223   * @brief  Control if the lockup will issue a system reset.
224   * @param  NewState:
225                 ENABLE
226                 DISABLE
227   * @retval None
228   */
MISC_LockResetCmd(uint32_t NewState)229 void MISC_LockResetCmd(uint32_t NewState)
230 {
231    /* Check parameters */
232   assert_parameters(IS_FUNCTIONAL_STATE(NewState));
233 
234   if (NewState == ENABLE)
235   {
236     MISC->IRQLAT |= MISC_IRQLAT_LOCKRESET;
237   }
238   else
239   {
240     MISC->IRQLAT &= ~MISC_IRQLAT_LOCKRESET;
241   }
242 }
243 
244 /**
245   * @brief  IRQLAT configure.
246   * @param  Latency:0~255
247   * @retval None
248   */
MISC_IRQLATConfig(uint8_t Latency)249 void MISC_IRQLATConfig(uint8_t Latency)
250 {
251   uint32_t tmp;
252 
253   tmp = MISC->IRQLAT;
254   tmp &= ~MISC_IRQLAT_IRQLAT;
255   tmp |= Latency;
256   MISC->IRQLAT = tmp;
257 }
258 
259 /*********************************** END OF FILE ******************************/
260