WXK
2024-09-18 05e2e954bd127de378a9d1dfbb0ed95d725aad63
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
/**************************************************************************
 * @file     sys.h
 * @version  V1.00
 * $Revision: 15 $
 * $Date: 2023/11/08 $  
 * @brief    Panchip series SYS driver header file
 *
 * @note
 * Copyright (C) 2023 Panchip Technology Corp. All rights reserved.
 *****************************************************************************/
 
#ifndef __PAN_SYS_H__
#define __PAN_SYS_H__
 
 
/**
 * @brief System Interface
 * @defgroup system_interface System Interface
 * @{
 */
#ifdef __cplusplus
extern "C"
{
#endif
 
 
/** 
 * @defgroup MULTI_FUNC_FLAG Io function define
 * @brief       Io function define constant definitions
 * @{ 
 */
#define SYS_MFP_TYPE_Msk(bit)       (1UL << ((bit) +16)) /*!< TYPE mask for Multiple Function Port */
#define SYS_MFP_ALT_Msk(bit)        (1UL << ((bit) + 8)) /*!< ALT mask for Multiple Function Port */
#define SYS_MFP_MFP_Msk(bit)        (1UL << ((bit)    )) /*!< MFP mask for Multiple Function Port */
 
#define SYS_MFP_GPIO                    0x00000000UL
 
/*P0*/
#define SYS_MFP_P00_GPIO                0x00000000UL
#define SYS_MFP_P00_SWD_CLK                0x00000001UL
#define SYS_MFP_P00_UART1_RX            0x00000100UL
#define SYS_MFP_P00_I2C0_SCL            0x00000101UL
#define SYS_MFP_P00_SPI0_CLK            0x00010000UL
#define SYS_MFP_P00_LL_DBG_14            0x00010001UL
#define SYS_MFP_P00_MDM_DBG_11            0x00010100UL
#define SYS_MFP_P00_RESERVED            0x00010101UL
#define SYS_MFP_P00_Msk                    0x00010101UL
 
#define SYS_MFP_P01_GPIO                0x00000000UL
#define SYS_MFP_P01_SWD_DAT                0x00000002UL
#define SYS_MFP_P01_UART1_TX            0x00000200UL
#define SYS_MFP_P01_I2C0_SDA            0x00000202UL
#define SYS_MFP_P01_SPI0_CS                0x00020000UL
#define SYS_MFP_P01_LL_DBG_15            0x00020002UL
#define SYS_MFP_P01_MDM_DBG_12            0x00020200UL
#define SYS_MFP_P01_RESERVED            0x00020202UL
#define SYS_MFP_P01_Msk                    0x00020202UL
 
#define SYS_MFP_P02_GPIO                0x00000000UL
#define SYS_MFP_P02_UART0_CTS            0x00000004UL
#define SYS_MFP_P02_SPI1_MISO            0x00000400UL
#define SYS_MFP_P02_PWM_CH3                0x00000404UL
#define SYS_MFP_P02_UART1_CTS            0x00040000UL
#define SYS_MFP_P02_LL_DBG_8            0x00040004UL
#define SYS_MFP_P02_MDM_DBG_19            0x00040400UL
#define SYS_MFP_P02_RESERVED            0x00040404UL
#define SYS_MFP_P02_Msk                    0x00040404UL
 
#define SYS_MFP_P03_GPIO                0x00000000UL
#define SYS_MFP_P03_UART0_CTS            0x00000008UL
#define SYS_MFP_P03_SPI0_CS                0x00000800UL
#define SYS_MFP_P03_PWM_CH2                0x00000808UL
#define SYS_MFP_P03_TIMER0_CNT_OUT        0x00080000UL
#define SYS_MFP_P03_LL_DBG_8            0x00080008UL
#define SYS_MFP_P03_MDM_DBG_5            0x00080800UL
#define SYS_MFP_P03_RESERVED            0x00080808UL
#define SYS_MFP_P03_Msk                 0x00080808UL
 
#define SYS_MFP_P04_GPIO                0x00000000UL
#define SYS_MFP_P04_UART0_RTS            0x00000010UL
#define SYS_MFP_P04_SPI0_CLK            0x00001000UL
#define SYS_MFP_P04_PWM_CH3                0x00001010UL
#define SYS_MFP_P04_TIMER0_EXT            0x00100000UL
#define SYS_MFP_P04_LL_DBG_9            0x00100010UL
#define SYS_MFP_P04_MDM_DBG_6            0x00101000UL
#define SYS_MFP_P04_RESERVED            0x00101010UL
#define SYS_MFP_P04_Msk                    0x00101010UL    /* func act as ADC CH0 if io is in analog mode */
 
#define SYS_MFP_P05_GPIO                0x00000000UL
#define SYS_MFP_P05_UART0_TX            0x00000020UL
#define SYS_MFP_P05_SPI0_MISO            0x00002000UL
#define SYS_MFP_P05_PWM_CH4                0x00002020UL
#define SYS_MFP_P05_EXT_STADC            0x00200000UL
#define SYS_MFP_P05_LL_DBG_12            0x00200020UL
#define SYS_MFP_P05_MDM_DBG_9            0x00202000UL
#define SYS_MFP_P05_RESERVED            0x00202020UL
#define SYS_MFP_P05_Msk                    0x00202020UL
 
#define SYS_MFP_P06_GPIO                0x00000000UL
#define SYS_MFP_P06_UART0_RX            0x00000040UL
#define SYS_MFP_P06_SPI0_MISO            0x00004000UL
#define SYS_MFP_P06_PWM_CH5                0x00004040UL
#define SYS_MFP_P06_TIMER1_EXT            0x00400000UL
#define SYS_MFP_P06_LL_DBG_13            0x00400040UL
#define SYS_MFP_P06_MDM_DBG_3            0x00404000UL
#define SYS_MFP_P06_AHB_CLK                0x00404040UL
#define SYS_MFP_P06_Msk                    0x00404040UL
 
#define SYS_MFP_P07_GPIO                0x00000000UL
#define SYS_MFP_P07_UART1_RX            0x00000080UL
#define SYS_MFP_P07_I2C0_SCL            0x00008000UL
#define SYS_MFP_P07_SPI0_MOSI            0x00008080UL
#define SYS_MFP_P07_PWM_CH0                0x00800000UL
#define SYS_MFP_P07_LL_DBG_10            0x00800080UL
#define SYS_MFP_P07_MDM_DBG_7            0x00808000UL
#define SYS_MFP_P07_RESERVED            0x00808080UL
#define SYS_MFP_P07_Msk                    0x00808080UL    /* func act as ADC CH5 if io is in analog mode */
 
/*P1*/
#define SYS_MFP_P10_GPIO                0x00000000UL
#define SYS_MFP_P10_UART1_TX            0x00000001UL
#define SYS_MFP_P10_I2C0_SDA            0x00000100UL
#define SYS_MFP_P10_SPI0_MISO            0x00000101UL
#define SYS_MFP_P10_PWM_CH5                0x00010000UL
#define SYS_MFP_P10_LL_DBG_11            0x00010001UL
#define SYS_MFP_P10_MDM_DBG_8            0x00010100UL
#define SYS_MFP_P10_RESERVED            0x00010101UL
#define SYS_MFP_P10_Msk                    0x00010101UL
 
#define SYS_MFP_P11_GPIO                0x00000000UL
#define SYS_MFP_P11_UART1_RTS            0x00000002UL
#define SYS_MFP_P11_SPI0_MOSI            0x00000200UL
#define SYS_MFP_P11_PWM_CH7                0x00000202UL
#define SYS_MFP_P11_CLK_32K                0x00020000UL
#define SYS_MFP_P11_LL_DBG_9            0x00020002UL
#define SYS_MFP_P11_MDM_DBG_0            0x00020200UL
#define SYS_MFP_P11_UART0_TX            0x00020202UL
#define SYS_MFP_P11_Msk                    0x00020202UL
 
#define SYS_MFP_P12_GPIO                0x00000000UL
#define SYS_MFP_P12_UART0_RX            0x00000004UL
#define SYS_MFP_P12_PWM_CH4                0x00000400UL
#define SYS_MFP_P12_TIMER0_CNT_OUT        0x00000404UL
#define SYS_MFP_P12_UART1_TX            0x00040000UL
#define SYS_MFP_P12_LL_DBG_4            0x00040004UL
#define SYS_MFP_P12_MDM_DBG_17            0X00040400UL
#define SYS_MFP_P12_SPI0_MISO            0x00040404UL
#define SYS_MFP_P12_Msk                    0x00040404UL    /* func act as ADC CH3 if io is in analog mode */
 
#define SYS_MFP_P13_GPIO                0x00000000UL
#define SYS_MFP_P13_UART0_RTS            0x00000008UL
#define SYS_MFP_P13_I2C0_SDA            0x00000800UL
#define SYS_MFP_P13_PWM_CH3                0x00000808UL
#define SYS_MFP_P13_LL_DBG_3            0x00080000UL
#define SYS_MFP_P13_MDM_DBG_16            0x00080008UL
#define SYS_MFP_P13_SPI1_CS                0x00080800UL
#define SYS_MFP_P13_SPI0_CS                0x00080808UL
#define SYS_MFP_P13_Msk                    0x00080808UL    /* func act as USB DM if io is in analog mode */
 
#define SYS_MFP_P14_GPIO                0x00000000UL
#define SYS_MFP_P14_UART0_CTS            0x00000010UL
#define SYS_MFP_P14_I2C0_SCL            0x00001000UL
#define SYS_MFP_P14_PWM_CH2                0x00001010UL
#define SYS_MFP_P14_LL_DEBUG_2            0x00100000UL
#define SYS_MFP_P14_MDM_DBG_15            0x00100010UL
#define SYS_MFP_P14_SPI0_CLK            0x00101000UL
#define SYS_MFP_P14_RESERVED            0x00101010UL
#define SYS_MFP_P14_Msk                    0x00101010UL    /* func act as USB DP if io is in analog mode */
 
#define SYS_MFP_P15_GPIO                0x00000000UL
#define SYS_MFP_P15_SPI0_CS                0x00000020UL
#define SYS_MFP_P15_PWM_CH5                0x00002000UL
#define SYS_MFP_P15_TIMER0_EXT            0x00002020UL
#define SYS_MFP_P15_UART0_RX            0x00200000UL
#define SYS_MFP_P15_LL_DBG_5            0x00200020UL
#define SYS_MFP_P15_MDM_DBG_18            0x00202000UL
#define SYS_MFP_P15_RESERVED            0x00202020UL
#define SYS_MFP_P15_Msk                    0x00202020UL
 
#define SYS_MFP_P16_GPIO                0x00000000UL
#define SYS_MFP_P16_UART0_TX            0x00000040UL
#define SYS_MFP_P16_TIMER2_CNT_OUT        0x00004000UL
#define SYS_MFP_P16_PWM_CH0                0x00004040UL
#define SYS_MFP_P16_LL_DBG_0            0x00400000UL
#define SYS_MFP_P16_MDM_DBG_13            0x00400040UL
#define SYS_MFP_P16_SPI1_CLK            0x00404000UL
#define SYS_MFP_P16_I2C0_SCL            0x00404040UL
#define SYS_MFP_P16_Msk                    0x00404040UL    /* func act as HOSC EXT if io is in analog mode */
 
#define SYS_MFP_P17_GPIO                0x00000000UL
#define SYS_MFP_P17_UART0_RX            0x00000080UL
#define SYS_MFP_P17_TIMER2_EXT            0x00008000UL
#define SYS_MFP_P17_PWM_CH1                0x00008080UL
#define SYS_MFP_P17_LL_DBG_1            0x00800000UL
#define SYS_MFP_P17_MDM_DBG_14            0x00800080UL
#define SYS_MFP_P17_RCH                    0x00808000UL
#define SYS_MFP_P17_RESERVED            0x00808080UL
#define SYS_MFP_P17_Msk                    0x00808080UL    /* func act as LOSC EXT if io is in analog mode */
 
/*P2*/
#define SYS_MFP_P20_GPIO                0x00000000UL
#define SYS_MFP_P20_SPI1_MISO            0x00000001UL
#define SYS_MFP_P20_PWM_CH6                0x00000100UL
#define SYS_MFP_P20_TADC_CLK            0x00000101UL
#define SYS_MFP_P20_LL_DBG_6            0x00010000UL
#define SYS_MFP_P20_MDM_DBG_2            0x00010001UL
#define SYS_MFP_P20_XTL_C1_CLK            0x00010100UL
#define SYS_MFP_P20_RESERVED            0x00010101UL
#define SYS_MFP_P20_Msk                    0x00010101UL    /* func act as XTL C2 if io is in analog mode */
 
#define SYS_MFP_P21_GPIO                0x00000000UL
#define SYS_MFP_P21_SPI1_MOSI            0x00000002UL
#define SYS_MFP_P21_PWM_CH7                0x00000200UL
#define SYS_MFP_P21_TADC_VLD            0x00000202UL
#define SYS_MFP_P21_LL_DBG_7            0x00020000UL
#define SYS_MFP_P21_MDM_DBG_1            0x00020002UL
#define SYS_MFP_P21_XTL_C2_CLK            0x00020200UL
#define SYS_MFP_P21_RESERVED            0x00020202UL
#define SYS_MFP_P21_Msk                    0x00020202UL    /* func act as XTL C1 if io is in analog mode */
 
#define SYS_MFP_P22_GPIO                0x00000000UL
#define SYS_MFP_P22_SPI1_CLK            0x00000004UL
#define SYS_MFP_P22_PWM_CH0                0x00000400UL
#define SYS_MFP_P22_RESERVED            0x00000404UL
#define SYS_MFP_P22_TADC_DATl            0x00040000UL
#define SYS_MFP_P22_MDM_DBG_0            0x00040004UL
#define SYS_MFP_P22_SPI0_MOSI            0x00040400UL
#define SYS_MFP_P22_RESERVED1            0x00040404UL
#define SYS_MFP_P22_Msk                    0x00040404UL    /* func act as ADC CH2 & DFT IP & DFT_V if io is in analog mode */
 
#define SYS_MFP_P23_GPIO                0x00000000UL
#define SYS_MFP_P23_SPI1_CS                0x00000008UL
#define SYS_MFP_P23_PWM_CH1                0x00000800UL
#define SYS_MFP_P23_DPLL_DIV8            0x00000808UL
#define SYS_MFP_P23_TADC_DATH            0x00080000UL
#define SYS_MFP_P23_MDM_DBG_10            0x00080008UL
#define SYS_MFP_P23_I2C0_SCL            0x00080800UL
#define SYS_MFP_P23_RESERVED            0x00080808UL
#define SYS_MFP_P23_Msk                    0x00080808UL    /* func act as ADC CH1 & DFT IN & DFT_I if io is in analog mode */
 
#define SYS_MFP_P24_GPIO                0x00000000UL
#define SYS_MFP_P24_SPI1_MISO            0x00000010UL
#define SYS_MFP_P24_UART1_RX            0x00001000UL
#define SYS_MFP_P24_PWM_CH2                0x00001010UL
#define SYS_MFP_P24_TIMER1_CNT_OUT        0x00100000UL
#define SYS_MFP_P24_MDM_DBG_4            0x00100010UL
#define SYS_MFP_P24_RESERVED            0x00101000UL
#define SYS_MFP_P24_RESERVED1            0x00101010UL
#define SYS_MFP_P24_Msk                    0x00101010UL    /* func act as ADC CH6 & DFT QP if io is in analog mode */
 
#define SYS_MFP_P25_GPIO                0x00000000UL
#define SYS_MFP_P25_SPI1_MOSI            0x00000020UL
#define SYS_MFP_P25_UART1_TX            0x00002000UL
#define SYS_MFP_P25_PWM_CH3                0x00002020UL
#define SYS_MFP_P25_MDM_DBG_5            0x00200000UL
#define SYS_MFP_P25_RESERVED            0x00200020UL
#define SYS_MFP_P25_I2C0_SDA            0x00202000UL
#define SYS_MFP_P25_RESERVED1            0x00202020UL
#define SYS_MFP_P25_Msk                    0x00202020UL    /* func act as ADC CH7 & DFT QN if io is in analog mode */
 
#define SYS_MFP_P26_GPIO                0x00000000UL
#define SYS_MFP_P26_UART1_RTS            0x00000040UL
#define SYS_MFP_P26_PWM_CH4                0x00004000UL
#define SYS_MFP_P26_SPI1_CS                0x00004040UL
#define SYS_MFP_P26_MDM_DBG_4            0x00400000UL
#define SYS_MFP_P26_MDM_DBG_10            0x00400040UL
#define SYS_MFP_P26_RESERVED            0x00404000UL
#define SYS_MFP_P26_RESERVED1            0x00404040UL
#define SYS_MFP_P26_Msk                 0x00404040UL
 
#define SYS_MFP_P27_GPIO                0x00000000UL
#define SYS_MFP_P27_UART1_CTS            0x00000080UL
#define SYS_MFP_P27_PWM_CH5                0x00008000UL
#define SYS_MFP_P27_SPI1_CLK            0x00008080UL
#define SYS_MFP_P27_RESERVED            0x00800000UL
#define SYS_MFP_P27_MDM_DBG_20            0x00800080UL
#define SYS_MFP_P27_XTH                    0x00808000UL
#define SYS_MFP_P27_RESERVED1            0x00808080UL
#define SYS_MFP_P27_Msk                    0x00808080UL
 
/*P3*/
#define SYS_MFP_P30_GPIO                0x00000000UL
#define SYS_MFP_P30_UART1_RX            0x00000001UL
#define SYS_MFP_P30_PWM_CH6                0x00000100UL
#define SYS_MFP_P30_SPI1_MISO            0x00000101UL
#define SYS_MFP_P30_MDM_DBG_10            0x00010000UL
#define SYS_MFP_P30_RESERVED            0x00010001UL
#define SYS_MFP_P30_RESERVED1            0x00010100UL
#define SYS_MFP_P30_RESERVED2            0x00010101UL
#define SYS_MFP_P30_Msk                    0x00010101UL
 
#define SYS_MFP_P31_GPIO                0x00000000UL
#define SYS_MFP_P31_UART1_TX            0x00000002UL
#define SYS_MFP_P31_PWM_CH7                0x00000200UL
#define SYS_MFP_P31_SPI1_MOSI            0x00000202UL
#define SYS_MFP_P31_RESERVED            0x00020000UL
#define SYS_MFP_P31_RESERVED1            0x00020002UL
#define SYS_MFP_P31_RESERVED2            0x00020200UL
#define SYS_MFP_P31_RESERVED3            0x00020202UL
#define SYS_MFP_P31_Msk                    0x00020202UL
/* @}*///end of group  MULTI_FUNC_FLAG
 
/**
  * @brief      Set pin function
  * @param[in]   Port GPIO port number.
  * @param[in]   Bit  The single or multiple pins of specified gpio port.
  * @param[in]   Func  pin function
  * @return     None
  */
#define SYS_SET_MFP(Port, Bit, Func)     \
            (SYS->Port##_MFP = (SYS->Port##_MFP & ~SYS_MFP_##Port##Bit##_Msk) | SYS_MFP_##Port##Bit##_##Func)
 
 
 
 
/**
  * @brief      Disable register write-protection function
  * @param      None
  * @return     None
  * @details    This function disable register write-protection function.
  *             To unlock the protected register to allow write access.
  */
__STATIC_INLINE void SYS_UnlockReg(void)
{
    do
     {
        SYS->REGLCTL = 0x59;
        SYS->REGLCTL = 0x16;
        SYS->REGLCTL = 0x88;
    }
    while(SYS->REGLCTL == 0);
}
 
/**
  * @brief      Enable register write-protection function
  * @return     None
  * @details    This function is used to enable register write-protection function.
  *             To lock the protected register to forbid write access.
  */
__STATIC_INLINE void SYS_LockReg(void)
{
    // (Workaround) To insure write-protected reg
    // is succefully wrote before lock
#if 1
    __NOP();__NOP();__NOP();__NOP();__NOP();
#else
    __ISB();
#endif
    SYS->REGLCTL = 0;
}
 
/**
  * @brief  This function check register write-protection bit setting
  * @return 0: Write-protection function is disabled.
  *         1: Write-protection function is enabled.
  */
uint32_t SYS_IsRegLocked(void);
 
/**
  * @brief       Set delay time
  * @param[in]   u32NopCnt nop count.
  * @return     None
  */
void SYS_delay_10nop(uint32_t u32NopCnt);
 
/*@}*/
 
 
#ifdef __cplusplus
}
#endif
 
#endif //__PAN_SYS_H__