Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.
Upstream: https://github.com/ARMmbed/DAPLink
Diff: source/hic_hal/maxim/max32620/gpio.c
- Revision:
- 0:01f31e923fe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/hic_hal/maxim/max32620/gpio.c Tue Apr 07 12:55:42 2020 +0200 @@ -0,0 +1,113 @@ +/* CMSIS-DAP Interface Firmware + * Copyright (c) 2009-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "max32620.h" +#include "clkman_regs.h" +#include "gpio_regs.h" +#include "IO_Config.h" +#include "gpio.h" + +/******************************************************************************/ +void gpio_init(void) +{ + int i; + uint32_t out_mode; + + // Ensure that the GPIO clock is enabled + if (MXC_CLKMAN->sys_clk_ctrl_6_gpio == MXC_S_CLKMAN_CLK_SCALE_DISABLED) { + MXC_CLKMAN->sys_clk_ctrl_6_gpio = MXC_S_CLKMAN_CLK_SCALE_DIV_1; + } + + // All inputs readable + for (i = 0; i < MXC_GPIO_NUM_PORTS; i++) { + MXC_GPIO->in_mode[i] = 0x00000000; + } + + // LED initial state off + MXC_GPIO->out_val[PIN_DAP_LED_PORT] |= (1 << PIN_DAP_LED_PIN); + MXC_GPIO->out_val[PIN_MSD_LED_PORT] |= (1 << PIN_MSD_LED_PIN); + MXC_GPIO->out_val[PIN_CDC_LED_PORT] |= (1 << PIN_CDC_LED_PIN); + + // LED outputs + out_mode = MXC_GPIO->out_mode[PIN_DAP_LED_PORT]; + out_mode &= ~(0xFU << (4 * PIN_DAP_LED_PIN)); + out_mode |= (MXC_V_GPIO_OUT_MODE_OPEN_DRAIN << (4 * PIN_DAP_LED_PIN)); + MXC_GPIO->out_mode[PIN_DAP_LED_PORT] = out_mode; + + out_mode = MXC_GPIO->out_mode[PIN_MSD_LED_PORT]; + out_mode &= ~(0xFU << (4 * PIN_MSD_LED_PIN)); + out_mode |= (MXC_V_GPIO_OUT_MODE_OPEN_DRAIN << (4 * PIN_MSD_LED_PIN)); + MXC_GPIO->out_mode[PIN_MSD_LED_PORT] = out_mode; + + out_mode = MXC_GPIO->out_mode[PIN_CDC_LED_PORT]; + out_mode &= ~(0xFU << (4 * PIN_CDC_LED_PIN)); + out_mode |= (MXC_V_GPIO_OUT_MODE_OPEN_DRAIN << (4 * PIN_CDC_LED_PIN)); + MXC_GPIO->out_mode[PIN_CDC_LED_PORT] = out_mode; + + // Button input + out_mode = MXC_GPIO->out_mode[PIN_RESET_IN_NO_FWRD_PORT]; + out_mode &= ~(0xFU << (4 * PIN_RESET_IN_NO_FWRD_PIN)); + out_mode |= (MXC_V_GPIO_OUT_MODE_OPEN_DRAIN_WEAK_PULLUP << (4 * PIN_RESET_IN_NO_FWRD_PIN)); + MXC_GPIO->out_mode[PIN_RESET_IN_NO_FWRD_PORT] = out_mode; + MXC_GPIO->out_val[PIN_RESET_IN_NO_FWRD_PORT] |= (0x1 << PIN_RESET_IN_NO_FWRD_PIN); +} + +/******************************************************************************/ +void gpio_set_hid_led(gpio_led_state_t state) +{ + if (state == GPIO_LED_ON) { + MXC_CLRBIT(&MXC_GPIO->out_val[PIN_DAP_LED_PORT], PIN_DAP_LED_PIN); + } else { + MXC_SETBIT(&MXC_GPIO->out_val[PIN_DAP_LED_PORT], PIN_DAP_LED_PIN); + } +} + +/******************************************************************************/ +void gpio_set_msc_led(gpio_led_state_t state) +{ + if (state == GPIO_LED_ON) { + MXC_CLRBIT(&MXC_GPIO->out_val[PIN_MSD_LED_PORT], PIN_MSD_LED_PIN); + } else { + MXC_SETBIT(&MXC_GPIO->out_val[PIN_MSD_LED_PORT], PIN_MSD_LED_PIN); + } +} + +/******************************************************************************/ +void gpio_set_cdc_led(gpio_led_state_t state) +{ + if (state == GPIO_LED_ON) { + MXC_CLRBIT(&MXC_GPIO->out_val[PIN_CDC_LED_PORT], PIN_CDC_LED_PIN); + } else { + MXC_SETBIT(&MXC_GPIO->out_val[PIN_CDC_LED_PORT], PIN_CDC_LED_PIN); + } +} + +/******************************************************************************/ +uint8_t gpio_get_reset_btn_no_fwrd(void) +{ + return !MXC_GETBIT(&MXC_GPIO->in_val[PIN_RESET_IN_NO_FWRD_PORT], PIN_RESET_IN_NO_FWRD_PIN); +} + +/******************************************************************************/ +uint8_t gpio_get_reset_btn_fwrd(void) +{ + return 0; +} + +/******************************************************************************/ +void gpio_set_board_power(bool powerEnabled) +{ +}