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 "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_config_t * pstcGpioCfg)98 en_result_t Gpio_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin, stc_gpio_config_t *pstcGpioCfg)
99 {
100 //配置为默认值,GPIO功能
101 *((uint32_t*)(((uint32_t)(&(M0P_GPIO->PA00_SEL)) + enPort) + (((uint32_t)enPin)<<2))) = GpioAf0;
102
103 //方向配置
104 if(GpioDirIn == pstcGpioCfg->enDir)
105 {
106 setBit(((uint32_t)&M0P_GPIO->PADIR + enPort), enPin, TRUE);
107 }
108 else
109 {
110 setBit(((uint32_t)&M0P_GPIO->PADIR + enPort), enPin, FALSE);
111 }
112
113 //驱动能力配置
114 if(GpioDrvH == pstcGpioCfg->enDrv)
115 {
116 setBit(((uint32_t)&M0P_GPIO->PADR + enPort), enPin, FALSE);
117 }
118 else
119 {
120 setBit(((uint32_t)&M0P_GPIO->PADR + enPort), enPin, TRUE);
121 }
122
123 //上拉下拉配置
124 if(GpioPu == pstcGpioCfg->enPuPd)
125 {
126 setBit(((uint32_t)&M0P_GPIO->PAPU + enPort), enPin, TRUE);
127 setBit(((uint32_t)&M0P_GPIO->PAPD + enPort), enPin, FALSE);
128 }
129 else if(GpioPd == pstcGpioCfg->enPuPd)
130 {
131 setBit(((uint32_t)&M0P_GPIO->PAPU + enPort), enPin, FALSE);
132 setBit(((uint32_t)&M0P_GPIO->PAPD + enPort), enPin, TRUE);
133 }
134 else
135 {
136 setBit(((uint32_t)&M0P_GPIO->PAPU + enPort), enPin, FALSE);
137 setBit(((uint32_t)&M0P_GPIO->PAPD + enPort), enPin, FALSE);
138 }
139
140 //开漏输出功能
141 if(GpioOdDisable == pstcGpioCfg->enOD)
142 {
143 setBit(((uint32_t)&M0P_GPIO->PAOD + enPort), enPin, FALSE);
144 }
145 else
146 {
147 setBit(((uint32_t)&M0P_GPIO->PAOD + enPort), enPin, TRUE);
148 }
149
150 M0P_GPIO->CTRL2_f.AHB_SEL = pstcGpioCfg->enCtrlMode;
151
152 return Ok;
153 }
154
155 /**
156 *******************************************************************************
157 ** \brief GPIO IO输入值获取
158 **
159 ** \param [in] enPort IO Port口
160 ** \param [in] enPin IO Pin脚
161 **
162 ** \retval boolean_t IO电平高低
163 ******************************************************************************/
Gpio_GetInputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)164 boolean_t Gpio_GetInputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
165 {
166 return getBit(((uint32_t)&M0P_GPIO->PAIN + enPort), enPin);
167 }
168
169 /**
170 *******************************************************************************
171 ** \brief GPIO IO Port输入数据获取
172 **
173 ** \param [in] enPort IO Port
174 **
175 ** \retval boolean_t IO Port数据
176 ******************************************************************************/
Gpio_GetInputData(en_gpio_port_t enPort)177 uint16_t Gpio_GetInputData(en_gpio_port_t enPort)
178 {
179 return (uint16_t)(*((uint32_t *)((uint32_t)&M0P_GPIO->PAIN + enPort)));
180 }
181
182 /**
183 *******************************************************************************
184 ** \brief GPIO IO输出值写入
185 **
186 ** \param [in] enPort IO Port口
187 ** \param [in] enPin IO Pin脚
188 ** \param [out] bVal 输出值
189 **
190 ** \retval en_result_t Ok 设置成功
191 ** 其他值 设置失败
192 ******************************************************************************/
Gpio_WriteOutputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin,boolean_t bVal)193 en_result_t Gpio_WriteOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin, boolean_t bVal)
194 {
195 setBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin, bVal);
196
197 return Ok;
198 }
199
200 /**
201 *******************************************************************************
202 ** \brief GPIO IO输出值获取
203 **
204 ** \param [in] enPort IO Port口
205 ** \param [in] enPin IO Pin脚
206 **
207 ** \retval boolean_t IO电平高低
208 ******************************************************************************/
Gpio_ReadOutputIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)209 boolean_t Gpio_ReadOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
210 {
211 return getBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin);
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_SetPort(en_gpio_port_t enPort,uint16_t u16ValMsk)223 en_result_t Gpio_SetPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
224 {
225 *((uint16_t*)(((uint32_t)&(M0P_GPIO->PABSET)) + enPort)) = u16ValMsk;
226 return Ok;
227 }
228
229 /**
230 *******************************************************************************
231 ** \brief GPIO IO设置
232 **
233 ** \param [in] enPort IO Port口
234 ** \param [in] enPin IO Pin脚
235 **
236 ** \retval en_result_t Ok 设置成功
237 ** 其他值 设置失败
238 ******************************************************************************/
Gpio_SetIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)239 en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
240 {
241 setBit(((uint32_t)&M0P_GPIO->PABSET + enPort), enPin, TRUE);
242
243 return Ok;
244 }
245
246 /**
247 *******************************************************************************
248 ** \brief GPIO IO Port清零,可同时清零一组Port中的多个PIN
249 **
250 ** \param [in] enPort IO Port
251 ** \param [in] u16ValMsk 该Port的16个PIN掩码值,将需要清零的PIN对应的bit写1有效
252 **
253 ** \retval boolean_t IO Port数据
254 ******************************************************************************/
Gpio_ClrPort(en_gpio_port_t enPort,uint16_t u16ValMsk)255 en_result_t Gpio_ClrPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
256 {
257 *((uint16_t*)(((uint32_t)&(M0P_GPIO->PABCLR)) + enPort)) = u16ValMsk;
258
259 return Ok;
260 }
261
262 /**
263 *******************************************************************************
264 ** \brief GPIO IO清零
265 **
266 ** \param [in] enPort IO Port口
267 ** \param [in] enPin IO Pin脚
268 **
269 ** \retval en_result_t Ok 设置成功
270 ** 其他值 设置失败
271 ******************************************************************************/
Gpio_ClrIO(en_gpio_port_t enPort,en_gpio_pin_t enPin)272 en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
273 {
274 setBit(((uint32_t)&M0P_GPIO->PABCLR + enPort), enPin, TRUE);
275
276 return Ok;
277 }
278
279 /**
280 *******************************************************************************
281 ** \brief GPIO IO Port置位/清零,可同时置位/清零一组Port中的多个PIN
282 **
283 ** \param [in] enPort IO Port
284 ** \param [in] u32ValMsk 高16bits表示该Port的16个PIN置位掩码值,
285 ** 低16bits表示该Port的16个PIN清零掩码值,
286 ** 将需要设置的PIN对应的bit写1,同一个PIN的掩码同时为1,则该PIN清零。
287 **
288 ** \retval en_result_t Ok 设置成功
289 ** 其他值 设置失败
290 ******************************************************************************/
Gpio_SetClrPort(en_gpio_port_t enPort,uint32_t u32ValMsk)291 en_result_t Gpio_SetClrPort(en_gpio_port_t enPort, uint32_t u32ValMsk)
292 {
293 *((uint32_t*)(((uint32_t)&(M0P_GPIO->PABSETCLR)) + enPort)) = u32ValMsk;
294
295 return Ok;
296 }
297
298 /**
299 *******************************************************************************
300 ** \brief GPIO IO配置为模拟功能模式
301 **
302 ** \param [in] enPort IO Port口
303 ** \param [in] enPin IO Pin脚
304 **
305 ** \retval Ok 设置成功
306 ** 其他值 设置失败
307 ******************************************************************************/
Gpio_SetAnalogMode(en_gpio_port_t enPort,en_gpio_pin_t enPin)308 en_result_t Gpio_SetAnalogMode(en_gpio_port_t enPort, en_gpio_pin_t enPin)
309 {
310 setBit((uint32_t)&M0P_GPIO->PAADS + enPort, enPin, TRUE);
311
312 return Ok;
313 }
314
315 /**
316 *******************************************************************************
317 ** \brief GPIO IO复用功能设置
318 **
319 ** \param [in] enPort IO Port口
320 ** \param [in] enPin IO Pin脚
321 ** \param [in] enAf 复用功能枚举类型选择
322 ** \retval Ok 设置成功
323 ** 其他值 设置失败
324 ******************************************************************************/
Gpio_SetAfMode(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_af_t enAf)325 en_result_t Gpio_SetAfMode(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_af_t enAf)
326 {
327 *((uint32_t*)(((uint32_t)(&(M0P_GPIO->PA00_SEL)) + enPort) + (((uint32_t)enPin)<<2))) = enAf;
328
329 return Ok;
330 }
331
332
_GpioEnableIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_irqtype_t enType,boolean_t bEnable)333 static en_result_t _GpioEnableIrq(en_gpio_port_t enPort,
334 en_gpio_pin_t enPin,
335 en_gpio_irqtype_t enType,
336 boolean_t bEnable)
337 {
338 //high level
339 if (enType & GpioIrqHigh)
340 {
341 setBit((uint32_t)&M0P_GPIO->PAHIE + enPort, enPin, bEnable);
342 }
343 //low level
344 if (enType & GpioIrqLow)
345 {
346 setBit((uint32_t)&M0P_GPIO->PALIE + enPort, enPin, bEnable);
347 }
348 //rising
349 if (enType & GpioIrqRising)
350 {
351 setBit((uint32_t)&M0P_GPIO->PARIE + enPort, enPin, bEnable);
352 }
353 //falling
354 if (enType & GpioIrqFalling)
355 {
356 setBit((uint32_t)&M0P_GPIO->PAFIE + enPort, enPin, bEnable);
357 }
358
359 return Ok;
360 }
361
362 /**
363 *******************************************************************************
364 ** \brief GPIO IO中断使能
365 **
366 ** \param [in] enPort IO Port口
367 ** \param [in] enPin IO Pin脚
368 ** \param [in] enType 中断使能类型
369 **
370 ** \retval Ok 设置成功
371 ******************************************************************************/
Gpio_EnableIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_irqtype_t enType)372 en_result_t Gpio_EnableIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_irqtype_t enType)
373 {
374 _GpioEnableIrq(enPort, enPin, enType, TRUE);
375
376 return Ok;
377 }
378
379 /**
380 *******************************************************************************
381 ** \brief GPIO IO中断关闭
382 **
383 ** \param [in] enPort IO Port口
384 ** \param [in] enPin IO Pin脚
385 ** \param [in] enType 中断使能类型
386 **
387 ** \retval Ok 设置成功
388 ******************************************************************************/
Gpio_DisableIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin,en_gpio_irqtype_t enType)389 en_result_t Gpio_DisableIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin, en_gpio_irqtype_t enType)
390 {
391 _GpioEnableIrq(enPort, enPin, enType, FALSE);
392
393 return Ok;
394 }
395
396
397 /**
398 *******************************************************************************
399 ** \brief GPIO 获得IO中断状态
400 **
401 ** \param [in] u8Port IO Port口
402 ** \param [in] u8Pin IO Pin脚
403 **
404 ** \retval IO中断状态开关
405 ******************************************************************************/
Gpio_GetIrqStatus(en_gpio_port_t enPort,en_gpio_pin_t enPin)406 boolean_t Gpio_GetIrqStatus(en_gpio_port_t enPort, en_gpio_pin_t enPin)
407 {
408 return getBit((uint32_t)&M0P_GPIO->PA_STAT + enPort, enPin);
409 }
410
411 /**
412 *******************************************************************************
413 ** \brief GPIO 清除IO中断状态
414 **
415 ** \param [in] u8Port IO Port口
416 ** \param [in] u8Pin IO Pin脚
417 **
418 ** \retval Ok 设置成功
419 ******************************************************************************/
Gpio_ClearIrq(en_gpio_port_t enPort,en_gpio_pin_t enPin)420 en_result_t Gpio_ClearIrq(en_gpio_port_t enPort, en_gpio_pin_t enPin)
421 {
422 setBit((uint32_t)&M0P_GPIO->PA_ICLR + enPort, enPin, FALSE);
423
424 return Ok;
425 }
426
427 /**
428 *******************************************************************************
429 ** \brief GPIO 端口辅助功能配置——中断模式配置
430 **
431 ** \param [in] enIrqMode 端口中断模式(深度休眠是否响应中断)
432 **
433 ** \retval Ok 设置成功
434 ******************************************************************************/
Gpio_SfIrqModeConfig(en_gpio_sf_irqmode_t enIrqMode)435 en_result_t Gpio_SfIrqModeConfig(en_gpio_sf_irqmode_t enIrqMode)
436 {
437 M0P_GPIO->CTRL0_f.IESEL = enIrqMode;
438
439 return Ok;
440 }
441
442 /**
443 *******************************************************************************
444 ** \brief GPIO 端口辅助功能配置——IR输出极性配置
445 **
446 ** \param [in] enIrPolMode IR输出极性配置枚举
447 **
448 ** \retval Ok 设置成功
449 ******************************************************************************/
Gpio_SfIrPolConfig(en_gpio_sf_irpol_t enIrPolMode)450 en_result_t Gpio_SfIrPolConfig(en_gpio_sf_irpol_t enIrPolMode)
451 {
452 M0P_GPIO->CTRL1_f.IR_POL = enIrPolMode;
453
454 return Ok;
455 }
456
457 /**
458 *******************************************************************************
459 ** \brief GPIO 端口辅助功能配置——HCLK输出配置
460 **
461 ** \param [in] enGate HCLK输出使能
462 ** \param [in] enDiv 输出分频枚举值
463 **
464 ** \retval Ok 设置成功
465 ******************************************************************************/
Gpio_SfHClkOutputConfig(en_gpio_sf_hclkout_g_t enGate,en_gpio_sf_hclkout_div_t enDiv)466 en_result_t Gpio_SfHClkOutputConfig(en_gpio_sf_hclkout_g_t enGate, en_gpio_sf_hclkout_div_t enDiv)
467 {
468 M0P_GPIO->CTRL1_f.HCLK_EN = enGate;
469 M0P_GPIO->CTRL1_f.HCLK_SEL = enDiv;
470
471 return Ok;
472 }
473
474 /**
475 *******************************************************************************
476 ** \brief GPIO 端口辅助功能配置——PCLK输出配置
477 **
478 ** \param [in] enGate PCLK输出使能
479 ** \param [in] enDiv 输出分频枚举值
480 **
481 ** \retval Ok 设置成功
482 ******************************************************************************/
Gpio_SfPClkOutputConfig(en_gpio_sf_pclkout_g_t enGate,en_gpio_sf_pclkout_div_t enDiv)483 en_result_t Gpio_SfPClkOutputConfig(en_gpio_sf_pclkout_g_t enGate, en_gpio_sf_pclkout_div_t enDiv)
484 {
485 M0P_GPIO->CTRL1_f.PCLK_EN = enGate;
486 M0P_GPIO->CTRL1_f.PCLK_SEL = enDiv;
487
488 return Ok;
489 }
490
491 /**
492 *******************************************************************************
493 ** \brief GPIO 端口辅助功能配置——外部时钟输入来源配置
494 **
495 ** \param [in] enExtClk 外部时钟信号来源选择枚举
496 **
497 ** \retval Ok 设置成功
498 ******************************************************************************/
Gpio_SfExtClkConfig(en_gpio_sf_ssn_extclk_t enExtClk)499 en_result_t Gpio_SfExtClkConfig(en_gpio_sf_ssn_extclk_t enExtClk)
500 {
501 M0P_GPIO->CTRL1_f.EXT_CLK_SEL = enExtClk;
502
503 return Ok;
504 }
505
506 /**
507 *******************************************************************************
508 ** \brief GPIO 端口辅助功能配置——SSN 通道信号来源配置
509 **
510 ** \param [in] enSpi SSN SPI通道选择枚举
511 ** \param [in] enSsn SSN 信号来源选择枚举
512 **
513 ** \retval Ok 设置成功
514 ******************************************************************************/
Gpio_SfSsnConfig(en_gpio_sf_ssnspi_t enSpi,en_gpio_sf_ssn_extclk_t enSsn)515 en_result_t Gpio_SfSsnConfig(en_gpio_sf_ssnspi_t enSpi, en_gpio_sf_ssn_extclk_t enSsn)
516 {
517 //SPI0
518 if(enSpi == GpioSpi0)
519 {
520 M0P_GPIO->CTRL1_f.SSN0_SEL = enSsn;
521 }
522 //SPI1
523 if(enSpi == GpioSpi1)
524 {
525 M0P_GPIO->CTRL2_f.SSN1_SEL = enSsn;
526 }
527
528 return Ok;
529 }
530
531 /**
532 *******************************************************************************
533 ** \brief GPIO 端口辅助功能配置——Timer 门控输入配置
534 **
535 ** \param [in] enTimG Timer类型选择枚举
536 ** \param [in] enSf Timer互联功能选择枚举
537 **
538 ** \retval Ok 设置成功
539 ******************************************************************************/
Gpio_SfTimGConfig(en_gpio_sf_tim_g_t enTimG,en_gpio_sf_t enSf)540 en_result_t Gpio_SfTimGConfig(en_gpio_sf_tim_g_t enTimG, en_gpio_sf_t enSf)
541 {
542 M0P_GPIO->TIMGS &= (uint32_t)(~(0x07U<<enTimG));
543 M0P_GPIO->TIMGS |= (uint32_t)(enSf<<enTimG);
544
545 return Ok;
546 }
547
548 /**
549 *******************************************************************************
550 ** \brief GPIO 端口辅助功能配置——Timer ETR选择配置
551 **
552 ** \param [in] enTimE Timer类型选择枚举
553 ** \param [in] enSf Timer互联功能选择枚举
554 **
555 ** \retval Ok 设置成功
556 ******************************************************************************/
Gpio_SfTimEConfig(en_gpio_sf_tim_e_t enTimE,en_gpio_sf_t enSf)557 en_result_t Gpio_SfTimEConfig(en_gpio_sf_tim_e_t enTimE, en_gpio_sf_t enSf)
558 {
559 M0P_GPIO->TIMES &= (uint32_t)(~(0x07U<<enTimE));
560 M0P_GPIO->TIMES |= (uint32_t)(enSf<<enTimE);
561
562 return Ok;
563 }
564
565 /**
566 *******************************************************************************
567 ** \brief GPIO 端口辅助功能配置——Timer 捕获输入选择配置
568 **
569 ** \param [in] enTimC Timer类型选择枚举
570 ** \param [in] enSf Timer互联功能选择枚举
571 **
572 ** \retval Ok 设置成功
573 ******************************************************************************/
Gpio_SfTimCConfig(en_gpio_sf_tim_c_t enTimC,en_gpio_sf_t enSf)574 en_result_t Gpio_SfTimCConfig(en_gpio_sf_tim_c_t enTimC, en_gpio_sf_t enSf)
575 {
576 M0P_GPIO->TIMCPS &= (uint32_t)(~(0x07u<<enTimC));
577 M0P_GPIO->TIMCPS |= (uint32_t)(enSf<<enTimC);
578
579 return Ok;
580 }
581
582 /**
583 *******************************************************************************
584 ** \brief GPIO 端口辅助功能配置——PCA 捕获输入选择配置
585 **
586 ** \param [in] enPca PCA类型选择枚举
587 ** \param [in] enSf PCA互联功能选择枚举
588 **
589 ** \retval Ok 设置成功
590 ******************************************************************************/
Gpio_SfPcaConfig(en_gpio_sf_pca_t enPca,en_gpio_sf_t enSf)591 en_result_t Gpio_SfPcaConfig(en_gpio_sf_pca_t enPca, en_gpio_sf_t enSf)
592 {
593 if(GpioSfPcaCH0 == enPca)
594 {
595 M0P_GPIO->PCAS_f.PCA_CH0 = enSf;
596 }
597
598 if(GpioSfPcaECI == enPca)
599 {
600 M0P_GPIO->PCAS_f.PCA_ECI = enSf;
601 }
602
603 return Ok;
604 }
605
606
607 //@} // GpioGroup
608
609
610 /*******************************************************************************
611 * EOF (not truncated)
612 ******************************************************************************/
613
614