1 /******************************************************************************
2 * Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file Gpio.c
44 **
45 ** GPIO driver API.
46 ** @link Driver Group Some description @endlink
47 **
48 ** - 2018-04-22 1.0 Lux First version
49 **
50 ******************************************************************************/
51
52 /*******************************************************************************
53 * Include files
54 ******************************************************************************/
55 #include "hc32l196_gpio.h"
56
57 /**
58 *******************************************************************************
59 ** \addtogroup GpioGroup
60 ******************************************************************************/
61 //@{
62
63 /*******************************************************************************
64 * Local pre-processor symbols/macros ('#define')
65 ******************************************************************************/
66 #define IS_VALID_PIN(port,pin) ( )
67 /*******************************************************************************
68 * Global variable definitions (declared in header file with 'extern') *
69 ******************************************************************************/
70
71 /*******************************************************************************
72 * Local type definitions ('typedef')
73 ******************************************************************************/
74
75 /*******************************************************************************
76 * Local function prototypes ('static')
77 ******************************************************************************/
78
79 /*******************************************************************************
80 * Local variable definitions ('static')
81 ******************************************************************************/
82
83 /*******************************************************************************
84 * Function implementation - global ('extern') and local ('static')
85 ******************************************************************************/
86
87 /**
88 *******************************************************************************
89 ** \brief GPIO 初始化
90 **
91 ** \param [in] enPort IO Port口
92 ** \param [in] enPin IO Pin脚
93 ** \param [in] pstcGpioCfg IO 配置结构体指针
94 **
95 ** \retval Ok 设置成功
96 ** 其他值 设置失败
97 ******************************************************************************/
Gpio_Init(en_gpio_port_t enPort,en_gpio_pin_t enPin,stc_gpio_cfg_t * pstcGpioCfg)98 en_result_t Gpio_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin, stc_gpio_cfg_t *pstcGpioCfg)
99 {
100 //配置为默认值,GPIO功能
101 SetBit((uint32_t)&M0P_GPIO->PAADS + enPort, enPin, FALSE);
102 *((uint32_t*)(((uint32_t)(&(M0P_GPIO->PA00_SEL)) + enPort) + (((uint32_t)enPin)<<2))) = GpioAf0;
103
104 //默认输出值配置
105 SetBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin, pstcGpioCfg->bOutputVal);
106 //方向配置
107 SetBit(((uint32_t)&M0P_GPIO->PADIR + enPort), enPin, (boolean_t)(pstcGpioCfg->enDir));
108 //驱动能力配置
109 SetBit(((uint32_t)&M0P_GPIO->PADR + enPort), enPin, (boolean_t)(pstcGpioCfg->enDrv));
110 //上拉/下拉配置
111 SetBit(((uint32_t)&M0P_GPIO->PAPU + enPort), enPin, (boolean_t)(pstcGpioCfg->enPu));
112 SetBit(((uint32_t)&M0P_GPIO->PAPD + enPort), enPin, (boolean_t)(pstcGpioCfg->enPd));
113 //开漏输出功能
114 SetBit(((uint32_t)&M0P_GPIO->PAOD + enPort), enPin, (boolean_t)(pstcGpioCfg->enOD));
115
116 M0P_GPIO->CTRL2_f.AHB_SEL = pstcGpioCfg->enCtrlMode;
117
118 return Ok;
119 }
120
121
122
123 /**
124 *******************************************************************************
125 ** \brief GPIO IO输入值获取
126 **
127 ** \param [in] enPort IO Port口
128 ** \param [in] enPin IO Pin脚
129 **
130 ** \retval boolean_t IO电平高低
131 ******************************************************************************/
Gpio_GetInputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)132 boolean_t Gpio_GetInputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
133 {
134 return GetBit(((uint32_t)&M0P_GPIO->PAIN + enPort), enPin);
135 }
136
137 /**
138 *******************************************************************************
139 ** \brief GPIO IO Port输入数据获取
140 **
141 ** \param [in] enPort IO Port
142 **
143 ** \retval boolean_t IO Port数据
144 ******************************************************************************/
Gpio_GetInputData(en_gpio_port_t enPort)145 uint16_t Gpio_GetInputData(en_gpio_port_t enPort)
146 {
147 return (uint16_t)(*((uint32_t *)((uint32_t)&M0P_GPIO->PAIN + enPort)));
148 }
149
150 /**
151 *******************************************************************************
152 ** \brief GPIO IO输出值写入
153 **
154 ** \param [in] enPort IO Port口
155 ** \param [in] enPin IO Pin脚
156 ** \param [out] bVal 输出值
157 **
158 ** \retval en_result_t Ok 设置成功
159 ** 其他值 设置失败
160 ******************************************************************************/
Gpio_WriteOutputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin,boolean_t bVal)161 en_result_t Gpio_WriteOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin, boolean_t bVal)
162 {
163 SetBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin, bVal);
164
165 return Ok;
166 }
167
168 /**
169 *******************************************************************************
170 ** \brief GPIO IO输出值获取
171 **
172 ** \param [in] enPort IO Port口
173 ** \param [in] enPin IO Pin脚
174 **
175 ** \retval boolean_t IO电平高低
176 ******************************************************************************/
Gpio_ReadOutputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)177 boolean_t Gpio_ReadOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
178 {
179 return GetBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin);
180 }
181
182 /**
183 *******************************************************************************
184 ** \brief GPIO IO Port设置,可同时设置一组Port中的多个PIN
185 **
186 ** \param [in] enPort IO Port
187 ** \param [in] u16ValMsk 该Port的16个PIN掩码值,将需要设置的PIN对应的bit写1有效
188 **
189 ** \retval boolean_t IO Port数据
190 ******************************************************************************/
Gpio_SetPort(en_gpio_port_t enPort,uint16_t u16ValMsk)191 en_result_t Gpio_SetPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
192 {
193 *((uint16_t*)(((uint32_t)&(M0P_GPIO->PABSET)) + enPort)) = u16ValMsk;
194 return Ok;
195 }
196
197 /**
198 *******************************************************************************
199 ** \brief GPIO IO设置
200 **
201 ** \param [in] enPort IO Port口
202 ** \param [in] enPin IO Pin脚
203 **
204 ** \retval en_result_t Ok 设置成功
205 ** 其他值 设置失败
206 ******************************************************************************/
Gpio_SetIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)207 en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
208 {
209 SetBit(((uint32_t)&M0P_GPIO->PABSET + enPort), enPin, TRUE);
210
211 return Ok;
212 }
213
214 /**
215 *******************************************************************************
216 ** \brief GPIO IO Port清零,可同时清零一组Port中的多个PIN
217 **
218 ** \param [in] enPort IO Port
219 ** \param [in] u16ValMsk 该Port的16个PIN掩码值,将需要清零的PIN对应的bit写1有效
220 **
221 ** \retval boolean_t IO Port数据
222 ******************************************************************************/
Gpio_ClrPort(en_gpio_port_t enPort,uint16_t u16ValMsk)223 en_result_t Gpio_ClrPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
224 {
225 *((uint16_t*)(((uint32_t)&(M0P_GPIO->PABCLR)) + enPort)) = u16ValMsk;
226
227 return Ok;
228 }
229
230 /**
231 *******************************************************************************
232 ** \brief GPIO IO清零
233 **
234 ** \param [in] enPort IO Port口
235 ** \param [in] enPin IO Pin脚
236 **
237 ** \retval en_result_t Ok 设置成功
238 ** 其他值 设置失败
239 ******************************************************************************/
Gpio_ClrIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)240 en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
241 {
242 SetBit(((uint32_t)&M0P_GPIO->PABCLR + enPort), enPin, TRUE);
243
244 return Ok;
245 }
246
247 /**
248 *******************************************************************************
249 ** \brief GPIO IO Port置位/清零,可同时置位/清零一组Port中的多个PIN
250 **
251 ** \param [in] enPort IO Port
252 ** \param [in] u32ValMsk 高16bits表示该Port的16个PIN置位掩码值,
253 ** 低16bits表示该Port的16个PIN清零掩码值,
254 ** 将需要设置的PIN对应的bit写1,同一个PIN的掩码同时为1,则该PIN清零。
255 **
256 ** \retval en_result_t Ok 设置成功
257 ** 其他值 设置失败
258 ******************************************************************************/
Gpio_SetClrPort(en_gpio_port_t enPort,uint32_t u32ValMsk)259 en_result_t Gpio_SetClrPort(en_gpio_port_t enPort, uint32_t u32ValMsk)
260 {
261 *((uint32_t*)(((uint32_t)&(M0P_GPIO->PABSETCLR)) + enPort)) = u32ValMsk;
262
263 return Ok;
264 }
265
266 /**
267 *******************************************************************************
268 ** \brief GPIO IO配置为模拟功能模式
269 **
270 ** \param [in] enPort IO Port口
271 ** \param [in] enPin IO Pin脚
272 **
273 ** \retval Ok 设置成功
274 ** 其他值 设置失败
275 ******************************************************************************/
Gpio_SetAnalogMode(en_gpio_port_t enPort,en_gpio_pin_t enPin)276 en_result_t Gpio_SetAnalogMode(en_gpio_port_t enPort, en_gpio_pin_t enPin)
277 {
278 SetBit((uint32_t)&M0P_GPIO->PAADS + enPort, enPin, TRUE);
279
280 return Ok;
281 }
282
283 /**
284 *******************************************************************************
285 ** \brief GPIO IO复用功能设置
286 **
287 ** \param [in] enPort IO Port口
288 ** \param [in] enPin IO Pin脚
289 ** \param [in] enAf 复用功能枚举类型选择
290 ** \retval Ok 设置成功
291 ** 其他值 设置失败
292 ******************************************************************************/
Gpio_SetAfMode(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_af_t enAf)293 en_result_t Gpio_SetAfMode(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_af_t enAf)
294 {
295 *((uint32_t*)(((uint32_t)(&(M0P_GPIO->PA00_SEL)) + enPort) + (((uint32_t)enPin)<<2))) = enAf;
296
297 return Ok;
298 }
299
300 /**
301 *******************************************************************************
302 ** \brief GPIO IO复用功能设置
303 **
304 ** \param [in] PinMux 复用功能宏定义
305 ** \retval Null
306 **
307 ******************************************************************************/
Gpio_SetAfMode_Lite(GpioPinMux PinMux)308 void Gpio_SetAfMode_Lite(GpioPinMux PinMux)
309 {
310 *((uint32_t*)(((uint32_t)(&(M0P_GPIO->PA00_SEL)) + ((PinMux>>16u)&0xFFFFu)) + (((uint32_t)((PinMux>>8u)&0xFFu))<<2))) = (uint32_t)(PinMux&0x7u);
311 }
312
313 /**
314 *******************************************************************************
315 ** \brief GPIO IO中断使能
316 **
317 ** \param [in] enPort IO Port口
318 ** \param [in] enPin IO Pin脚
319 ** \param [in] enType 中断使能类型
320 **
321 ** \retval Ok 设置成功
322 ******************************************************************************/
Gpio_EnableIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_irqtype_t enType)323 en_result_t Gpio_EnableIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_irqtype_t enType)
324 {
325 uint32_t u32PieAddr;
326
327 u32PieAddr = ((uint32_t)((&M0P_GPIO->PAHIE) + enType)) + enPort;
328
329 SetBit(u32PieAddr, enPin, TRUE);
330
331 return Ok;
332 }
333
334 /**
335 *******************************************************************************
336 ** \brief GPIO IO中断关闭
337 **
338 ** \param [in] enPort IO Port口
339 ** \param [in] enPin IO Pin脚
340 ** \param [in] enType 中断使能类型
341 **
342 ** \retval Ok 设置成功
343 ******************************************************************************/
Gpio_DisableIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_irqtype_t enType)344 en_result_t Gpio_DisableIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_irqtype_t enType)
345 {
346 uint32_t u32PieAddr;
347
348 u32PieAddr = ((uint32_t)((&M0P_GPIO->PAHIE) + enType)) + enPort;
349
350 SetBit(u32PieAddr, enPin, FALSE);
351
352 return Ok;
353 }
354
355
356 /**
357 *******************************************************************************
358 ** \brief GPIO 获得IO中断状态
359 **
360 ** \param [in] u8Port IO Port口
361 ** \param [in] u8Pin IO Pin脚
362 **
363 ** \retval IO中断状态开关
364 ******************************************************************************/
Gpio_GetIrqStatus(en_gpio_port_t enPort,en_gpio_pin_t enPin)365 boolean_t Gpio_GetIrqStatus(en_gpio_port_t enPort, en_gpio_pin_t enPin)
366 {
367 return GetBit((uint32_t)&M0P_GPIO->PA_STAT + enPort, enPin);
368 }
369
370 /**
371 *******************************************************************************
372 ** \brief GPIO 清除IO中断状态
373 **
374 ** \param [in] u8Port IO Port口
375 ** \param [in] u8Pin IO Pin脚
376 **
377 ** \retval Ok 设置成功
378 ******************************************************************************/
Gpio_ClearIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin)379 en_result_t Gpio_ClearIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin)
380 {
381 SetBit((uint32_t)&M0P_GPIO->PA_ICLR + enPort, enPin, FALSE);
382
383 return Ok;
384 }
385
386 /**
387 *******************************************************************************
388 ** \brief GPIO 端口辅助功能配置——中断模式配置
389 **
390 ** \param [in] enIrqMode 端口中断模式(深度休眠是否响应中断)
391 **
392 ** \retval Ok 设置成功
393 ******************************************************************************/
Gpio_SfIrqModeCfg(en_gpio_sf_irqmode_t enIrqMode)394 en_result_t Gpio_SfIrqModeCfg(en_gpio_sf_irqmode_t enIrqMode)
395 {
396 M0P_GPIO->CTRL0_f.IESEL = enIrqMode;
397
398 return Ok;
399 }
400
401 /**
402 *******************************************************************************
403 ** \brief GPIO 端口辅助功能配置——IR输出极性配置
404 **
405 ** \param [in] enIrPolMode IR输出极性配置枚举
406 **
407 ** \retval Ok 设置成功
408 ******************************************************************************/
Gpio_SfIrPolCfg(en_gpio_sf_irpol_t enIrPolMode)409 en_result_t Gpio_SfIrPolCfg(en_gpio_sf_irpol_t enIrPolMode)
410 {
411 M0P_GPIO->CTRL1_f.IR_POL = enIrPolMode;
412
413 return Ok;
414 }
415
416 /**
417 *******************************************************************************
418 ** \brief GPIO 端口辅助功能配置——HCLK输出配置
419 **
420 ** \param [in] enGate HCLK输出使能
421 ** \param [in] enDiv 输出分频枚举值
422 **
423 ** \retval Ok 设置成功
424 ******************************************************************************/
Gpio_SfHClkOutputCfg(en_gpio_sf_hclkout_g_t enGate,en_gpio_sf_hclkout_div_t enDiv)425 en_result_t Gpio_SfHClkOutputCfg(en_gpio_sf_hclkout_g_t enGate, en_gpio_sf_hclkout_div_t enDiv)
426 {
427 M0P_GPIO->CTRL1_f.HCLK_EN = enGate;
428 M0P_GPIO->CTRL1_f.HCLK_SEL = enDiv;
429
430 return Ok;
431 }
432
433 /**
434 *******************************************************************************
435 ** \brief GPIO 端口辅助功能配置——PCLK输出配置
436 **
437 ** \param [in] enGate PCLK输出使能
438 ** \param [in] enDiv 输出分频枚举值
439 **
440 ** \retval Ok 设置成功
441 ******************************************************************************/
Gpio_SfPClkOutputCfg(en_gpio_sf_pclkout_g_t enGate,en_gpio_sf_pclkout_div_t enDiv)442 en_result_t Gpio_SfPClkOutputCfg(en_gpio_sf_pclkout_g_t enGate, en_gpio_sf_pclkout_div_t enDiv)
443 {
444 M0P_GPIO->CTRL1_f.PCLK_EN = enGate;
445 M0P_GPIO->CTRL1_f.PCLK_SEL = enDiv;
446
447 return Ok;
448 }
449
450 /**
451 *******************************************************************************
452 ** \brief GPIO 端口辅助功能配置——外部时钟输入来源配置
453 **
454 ** \param [in] enExtClk 外部时钟信号来源选择枚举
455 **
456 ** \retval Ok 设置成功
457 ******************************************************************************/
Gpio_SfExtClkCfg(en_gpio_sf_ssn_extclk_t enExtClk)458 en_result_t Gpio_SfExtClkCfg(en_gpio_sf_ssn_extclk_t enExtClk)
459 {
460 M0P_GPIO->CTRL1_f.EXT_CLK_SEL = enExtClk;
461
462 return Ok;
463 }
464
465 /**
466 *******************************************************************************
467 ** \brief GPIO 端口辅助功能配置——SSN 通道信号来源配置
468 **
469 ** \param [in] enSpi SSN SPI通道选择枚举
470 ** \param [in] enSsn SSN 信号来源选择枚举
471 **
472 ** \retval Ok 设置成功
473 ******************************************************************************/
Gpio_SfSsnCfg(en_gpio_sf_ssnspi_t enSpi,en_gpio_sf_ssn_extclk_t enSsn)474 en_result_t Gpio_SfSsnCfg(en_gpio_sf_ssnspi_t enSpi, en_gpio_sf_ssn_extclk_t enSsn)
475 {
476 //SPI0
477 if(enSpi == GpioSpi0)
478 {
479 M0P_GPIO->CTRL1_f.SSN0_SEL = enSsn;
480 }
481 //SPI1
482 if(enSpi == GpioSpi1)
483 {
484 M0P_GPIO->CTRL2_f.SSN1_SEL = enSsn;
485 }
486
487 return Ok;
488 }
489
490 /**
491 *******************************************************************************
492 ** \brief GPIO 端口辅助功能配置——Timer 门控输入配置
493 **
494 ** \param [in] enTimG Timer类型选择枚举
495 ** \param [in] enSf Timer互联功能选择枚举
496 **
497 ** \retval Ok 设置成功
498 ******************************************************************************/
Gpio_SfTimGCfg(en_gpio_sf_tim_g_t enTimG,en_gpio_sf_t enSf)499 en_result_t Gpio_SfTimGCfg(en_gpio_sf_tim_g_t enTimG, en_gpio_sf_t enSf)
500 {
501 if(enTimG&0x20u)
502 {
503 enTimG &= ~0x20u;
504 M0P_GPIO->PCAS &= (uint32_t)(~(0x07U<<enTimG));
505 M0P_GPIO->PCAS |= (uint32_t)(enSf<<enTimG);
506 }
507 else
508 {
509 M0P_GPIO->TIMGS &= (uint32_t)(~(0x07U<<enTimG));
510 M0P_GPIO->TIMGS |= (uint32_t)(enSf<<enTimG);
511 }
512
513 return Ok;
514 }
515
516 /**
517 *******************************************************************************
518 ** \brief GPIO 端口辅助功能配置——Timer ETR选择配置
519 **
520 ** \param [in] enTimE Timer类型选择枚举
521 ** \param [in] enSf Timer互联功能选择枚举
522 **
523 ** \retval Ok 设置成功
524 ******************************************************************************/
Gpio_SfTimECfg(en_gpio_sf_tim_e_t enTimE,en_gpio_sf_t enSf)525 en_result_t Gpio_SfTimECfg(en_gpio_sf_tim_e_t enTimE, en_gpio_sf_t enSf)
526 {
527 if(enTimE&0x20u)
528 {
529 enTimE &= ~0x20u;
530 M0P_GPIO->PCAS &= (uint32_t)(~(0x07U<<enTimE));
531 M0P_GPIO->PCAS |= (uint32_t)(enSf<<enTimE);
532 }
533 else
534 {
535 M0P_GPIO->TIMES &= (uint32_t)(~(0x07U<<enTimE));
536 M0P_GPIO->TIMES |= (uint32_t)(enSf<<enTimE);
537 }
538
539 return Ok;
540 }
541
542 /**
543 *******************************************************************************
544 ** \brief GPIO 端口辅助功能配置——Timer 捕获输入选择配置
545 **
546 ** \param [in] enTimC Timer类型选择枚举
547 ** \param [in] enSf Timer互联功能选择枚举
548 **
549 ** \retval Ok 设置成功
550 ******************************************************************************/
Gpio_SfTimCCfg(en_gpio_sf_tim_c_t enTimC,en_gpio_sf_t enSf)551 en_result_t Gpio_SfTimCCfg(en_gpio_sf_tim_c_t enTimC, en_gpio_sf_t enSf)
552 {
553 M0P_GPIO->TIMCPS &= (uint32_t)(~(0x07u<<enTimC));
554 M0P_GPIO->TIMCPS |= (uint32_t)(enSf<<enTimC);
555
556 return Ok;
557 }
558
559 /**
560 *******************************************************************************
561 ** \brief GPIO 端口辅助功能配置——PCA 捕获输入选择配置
562 **
563 ** \param [in] enPca PCA类型选择枚举
564 ** \param [in] enSf PCA互联功能选择枚举
565 **
566 ** \retval Ok 设置成功
567 ******************************************************************************/
Gpio_SfPcaCfg(en_gpio_sf_pca_t enPca,en_gpio_sf_t enSf)568 en_result_t Gpio_SfPcaCfg(en_gpio_sf_pca_t enPca, en_gpio_sf_t enSf)
569 {
570 M0P_GPIO->PCAS &= (uint32_t)(~(0x07u<<enPca));
571 M0P_GPIO->PCAS |= (uint32_t)(enSf<<enPca);
572
573 return Ok;
574 }
575
576 //@} // GpioGroup
577
578
579 /*******************************************************************************
580 * EOF (not truncated)
581 ******************************************************************************/
582
583