mik32-uploader/mik32_debug_hal/gpio.py

57 lines
1.5 KiB
Python

from enum import Enum
from tclrpc import OpenOcdTclRpc
import mik32_debug_hal.registers.memory_map as mem_map
class MIK32_Version(Enum):
MIK32V0 = "MIK32V0"
MIK32V2 = "MIK32V2"
def __str__(self):
return self.value
port2_value = 0
def gpio_init(openocd: OpenOcdTclRpc, version: MIK32_Version):
port2_addr = 0
if version == MIK32_Version.MIK32V0:
port2_addr = mem_map.PAD_CONFIG_REGS + mem_map.PAD_CONFIG_REGS_V0.PORT_2_CFG.value
elif version == MIK32_Version.MIK32V2:
port2_addr = mem_map.PAD_CONFIG_REGS + mem_map.PAD_CONFIG_REGS_V2.PORT_2_CFG.value
else:
return
openocd.halt()
port2_value = openocd.read_memory(port2_addr, 32, 1)[0]
port2_value_updated = port2_value
port2_value_updated &= 0xF000
if version == MIK32_Version.MIK32V0:
port2_value_updated |= 0x000
elif version == MIK32_Version.MIK32V2:
port2_value_updated |= 0x555
else:
return
openocd.write_word(port2_addr, port2_value_updated)
openocd.write_word(port2_addr + 8, 0x0500)
def gpio_deinit(openocd: OpenOcdTclRpc, version: MIK32_Version):
if version == MIK32_Version.MIK32V0:
port2_addr = mem_map.PAD_CONFIG_REGS + mem_map.PAD_CONFIG_REGS_V0.PORT_2_CFG.value
elif version == MIK32_Version.MIK32V2:
port2_addr = mem_map.PAD_CONFIG_REGS + mem_map.PAD_CONFIG_REGS_V2.PORT_2_CFG.value
else:
return
openocd.write_word(port2_addr, port2_value)