summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c')
-rw-r--r--c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c b/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c
index e2b0135c34..d5b6afad04 100644
--- a/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c
+++ b/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/src/hwmgr/alt_generalpurpose_io.c
@@ -35,6 +35,7 @@
#include "socal/hps.h"
#include "socal/socal.h"
#include "socal/alt_gpio.h"
+#include "socal/alt_rstmgr.h"
#include "hwlib.h"
#include "alt_generalpurpose_io.h"
@@ -53,6 +54,37 @@
/****************************************************************************************/
+/* alt_gpio_init() initializes the GPIO modules */
+/****************************************************************************************/
+
+ALT_STATUS_CODE alt_gpio_init(void)
+{
+ // put GPIO modules into system manager reset if not already there
+ alt_gpio_uninit();
+ // release GPIO modules from system reset (w/ two-instruction delay)
+ alt_replbits_word(ALT_RSTMGR_PERMODRST_ADDR, ALT_RSTMGR_PERMODRST_GPIO0_SET_MSK |
+ ALT_RSTMGR_PERMODRST_GPIO1_SET_MSK |
+ ALT_RSTMGR_PERMODRST_GPIO2_SET_MSK, 0);
+ return ALT_E_SUCCESS;
+}
+
+
+/****************************************************************************************/
+/* alt_gpio_uninit() uninitializes the GPIO modules */
+/****************************************************************************************/
+
+ALT_STATUS_CODE alt_gpio_uninit(void)
+{
+ // put all GPIO modules into system manager reset
+ alt_replbits_word(ALT_RSTMGR_PERMODRST_ADDR, ALT_RSTMGR_PERMODRST_GPIO0_SET_MSK |
+ ALT_RSTMGR_PERMODRST_GPIO1_SET_MSK |
+ ALT_RSTMGR_PERMODRST_GPIO2_SET_MSK,
+ ALT_GPIO_BITMASK);
+ return ALT_E_SUCCESS;
+}
+
+
+/****************************************************************************************/
/* alt_gpio_port_datadir_set() sets the specified GPIO data bits to use the data */
/* direction(s) specified. 0 = input (default). 1 = output. */
/****************************************************************************************/