fgpio_sinit.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * Copyright : (C) 2022 Phytium Information Technology, Inc.
  3. * All Rights Reserved.
  4. *
  5. * This program is OPEN SOURCE software: you can redistribute it and/or modify it
  6. * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
  7. * either version 1.0 of the License, or (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
  10. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. * See the Phytium Public License for more details.
  12. *
  13. *
  14. * FilePath: fgpio_sinit.c
  15. * Date: 2022-02-10 14:53:42
  16. * LastEditTime: 2022-02-18 08:25:29
  17. * Description:  This files is for GPIO static variables
  18. *
  19. * Modify History:
  20. * Ver   Who        Date         Changes
  21. * ----- ------     --------    --------------------------------------
  22. * 1.0 zhugengyu 2022-3-1 init commit
  23. */
  24. /***************************** Include Files *********************************/
  25. #include "fparameters.h"
  26. #include "fgpio_hw.h"
  27. #include "fgpio.h"
  28. /************************** Constant Definitions *****************************/
  29. /**************************** Type Definitions *******************************/
  30. /***************** Macros (Inline Functions) Definitions *********************/
  31. /************************** Function Prototypes ******************************/
  32. /************************** Variable Definitions *****************************/
  33. #if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */
  34. extern const FGpioConfig fgpio_cfg_tbl[FGPIO_NUM];
  35. #elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */
  36. extern FGpioConfig fgpio_cfg_tbl[FGPIO_NUM];
  37. #endif
  38. /*****************************************************************************/
  39. #if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */
  40. /**
  41. * @name: FGpioLookupConfig
  42. * @msg: 获取GPIO控制器的默认配置
  43. * @return {const FGpioConfig *} GPIO控制器的默认配置
  44. * @param {u32} instance_id, GPIO控制器实例号
  45. */
  46. const FGpioConfig *FGpioLookupConfig(u32 instance_id)
  47. {
  48. const FGpioConfig *ptr = NULL;
  49. u32 index;
  50. for (index = 0; index < FGPIO_NUM; index++)
  51. {
  52. if (fgpio_cfg_tbl[index].instance_id == instance_id)
  53. {
  54. ptr = &fgpio_cfg_tbl[index];
  55. break;
  56. }
  57. }
  58. return ptr;
  59. }
  60. #elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */
  61. /**
  62. * @name: FGpioSetIrqNum
  63. * @msg: 设置GPIO控制器各引脚的中断号
  64. * @return {NONE}
  65. * @param {u32} instance_id, GPIO控制器实例号
  66. * @param {FGpioConfig} *ptr, GPIO控制器的默认配置
  67. */
  68. static void FGpioSetIrqNum(u32 instance_id, FGpioConfig *ptr)
  69. {
  70. u32 pin_id;
  71. u32 irq_num;
  72. if (FGPIO_WITH_PIN_IRQ >= instance_id) /* GPIO 0 ~ 2 */
  73. {
  74. /* each pin has its own interrupt id */
  75. for (pin_id = FGPIO_PIN_0; pin_id < FGPIO_PIN_NUM; pin_id++)
  76. {
  77. ptr->irq_num[pin_id] = FGPIO_PIN_IRQ_NUM_GET(instance_id, pin_id);
  78. }
  79. }
  80. else
  81. {
  82. if (FGPIO_ID_3 == instance_id)
  83. {
  84. irq_num = FGPIO_3_IRQ_NUM;
  85. }
  86. else if (FGPIO_4_IRQ_NUM == instance_id)
  87. {
  88. irq_num = FGPIO_4_IRQ_NUM;
  89. }
  90. else if (FGPIO_5_IRQ_NUM == instance_id)
  91. {
  92. irq_num = FGPIO_5_IRQ_NUM;
  93. }
  94. /* all pins in the controller share the same interrupt id */
  95. for (pin_id = FGPIO_PIN_0; pin_id < FGPIO_PIN_NUM; pin_id++)
  96. {
  97. ptr->irq_num[pin_id] = irq_num;
  98. }
  99. }
  100. return;
  101. }
  102. /**
  103. * @name: FGpioLookupConfig
  104. * @msg: 获取GPIO控制器的默认配置
  105. * @return {const FGpioConfig *} GPIO控制器的默认配置
  106. * @param {u32} instance_id, GPIO控制器实例号
  107. */
  108. const FGpioConfig *FGpioLookupConfig(u32 instance_id)
  109. {
  110. const FGpioConfig *ptr = NULL;
  111. u32 index;
  112. static boolean irq_num_set = FALSE;
  113. if (FALSE == irq_num_set) /* set irq num in the first time */
  114. {
  115. for (index = 0; index < FGPIO_NUM; index++)
  116. {
  117. FGpioSetIrqNum(index, &fgpio_cfg_tbl[index]);
  118. }
  119. irq_num_set = TRUE;
  120. }
  121. for (index = 0; index < FGPIO_NUM; index++) /* find configs of controller */
  122. {
  123. if (fgpio_cfg_tbl[index].instance_id == instance_id)
  124. {
  125. ptr = &fgpio_cfg_tbl[index];
  126. break;
  127. }
  128. }
  129. return ptr;
  130. }
  131. #endif