mik32-uploader/mik32_pm.py
2023-08-26 18:06:36 +03:00

107 lines
3.0 KiB
Python

# --------------------------
# PM register offset
# --------------------------
PM_BASE_ADDRESS = 0x000050000
PM_Clk_AHB_Set_OFFSET = 0x0C
PM_Clk_APB_M_Set_OFFSET = 0x14
PM_Clk_APB_P_Set_OFFSET = 0x1C
# --------------------------
# PM register fields
# --------------------------
# AHB BUS
PM_CLOCK_CPU_S = 0
PM_CLOCK_CPU_M = (1 << PM_CLOCK_CPU_S)
PM_CLOCK_EEPROM_S = 1
PM_CLOCK_EEPROM_M = (1 << PM_CLOCK_EEPROM_S)
PM_CLOCK_RAM_S = 2
PM_CLOCK_RAM_M = (1 << PM_CLOCK_RAM_S)
PM_CLOCK_SPIFI_S = 3
PM_CLOCK_SPIFI_M = (1 << PM_CLOCK_SPIFI_S)
PM_CLOCK_TCB_S = 4
PM_CLOCK_TCB_M = (1 << PM_CLOCK_TCB_S)
PM_CLOCK_DMA_S = 5
PM_CLOCK_DMA_M = (1 << PM_CLOCK_DMA_S)
PM_CLOCK_CRYPTO_S = 6
PM_CLOCK_CRYPTO_M = (1 << PM_CLOCK_CRYPTO_S)
PM_CLOCK_CRC32_S = 7
PM_CLOCK_CRC32_M = (1 << PM_CLOCK_CRC32_S)
# APB M
PM_CLOCK_PM_S = 0
PM_CLOCK_PM_M = (1 << PM_CLOCK_PM_S)
PM_CLOCK_EPIC_S = 1
PM_CLOCK_EPIC_M = (1 << PM_CLOCK_EPIC_S)
PM_CLOCK_TIMER32_0_S = 2
PM_CLOCK_TIMER32_0_M = (1 << PM_CLOCK_TIMER32_0_S)
PM_CLOCK_GPIO_S = 3
PM_CLOCK_GPIO_M = (1 << PM_CLOCK_GPIO_S)
PM_CLOCK_WDT_BUS_S = 4
PM_CLOCK_WDT_BUS_M = (1 << PM_CLOCK_WDT_BUS_S)
PM_CLOCK_OTP_S = 5
PM_CLOCK_OTP_M = (1 << PM_CLOCK_OTP_S)
PM_CLOCK_PMON_S = 6
PM_CLOCK_PMON_M = (1 << PM_CLOCK_PMON_S)
PM_CLOCK_WU_S = 7
PM_CLOCK_WU_M = (1 << PM_CLOCK_WU_S)
PM_CLOCK_RTC_S = 8
PM_CLOCK_RTC_M = (1 << PM_CLOCK_RTC_S)
# APB_P
PM_CLOCK_WDT_S = 0
PM_CLOCK_WDT_M = (1 << PM_CLOCK_WDT_S)
PM_CLOCK_UART_0_S = 1
PM_CLOCK_UART_0_M = (1 << PM_CLOCK_UART_0_S)
PM_CLOCK_UART_1_S = 2
PM_CLOCK_UART_1_M = (1 << PM_CLOCK_UART_1_S)
PM_CLOCK_TIMER16_0_S = 3
PM_CLOCK_TIMER16_0_M = (1 << PM_CLOCK_TIMER16_0_S)
PM_CLOCK_TIMER16_1_S = 4
PM_CLOCK_TIMER16_1_M = (1 << PM_CLOCK_TIMER16_1_S)
PM_CLOCK_TIMER16_2_S = 5
PM_CLOCK_TIMER16_2_M = (1 << PM_CLOCK_TIMER16_2_S)
PM_CLOCK_TIMER32_1_S = 6
PM_CLOCK_TIMER32_1_M = (1 << PM_CLOCK_TIMER32_1_S)
PM_CLOCK_TIMER32_2_S = 7
PM_CLOCK_TIMER32_2_M = (1 << PM_CLOCK_TIMER32_2_S)
PM_CLOCK_SPI_0_S = 8
PM_CLOCK_SPI_0_M = (1 << PM_CLOCK_SPI_0_S)
PM_CLOCK_SPI_1_S = 9
PM_CLOCK_SPI_1_M = (1 << PM_CLOCK_SPI_1_S)
PM_CLOCK_I2C_0_S = 10
PM_CLOCK_I2C_0_M = (1 << PM_CLOCK_I2C_0_S)
PM_CLOCK_I2C_1_S = 11
PM_CLOCK_I2C_1_M = (1 << PM_CLOCK_I2C_1_S)
PM_CLOCK_GPIO_0_S = 12
PM_CLOCK_GPIO_0_M = (1 << PM_CLOCK_GPIO_0_S)
PM_CLOCK_GPIO_1_S = 13
PM_CLOCK_GPIO_1_M = (1 << PM_CLOCK_GPIO_1_S)
PM_CLOCK_GPIO_2_S = 14
PM_CLOCK_GPIO_2_M = (1 << PM_CLOCK_GPIO_2_S)
PM_CLOCK_ANALOG_S = 15
PM_CLOCK_ANALOG_M = (1 << PM_CLOCK_ANALOG_S)
PM_CLOCK_GPIO_IRQ_S = 16
PM_CLOCK_GPIO_IRQ_M = (1 << PM_CLOCK_GPIO_IRQ_S)
# --------------------------
# WU register offset
# --------------------------
WU_BASE_ADDRESS = 0x00060000
WU_CLOCKS_BU_OFFSET = 0x10
# --------------------------
# WU register fields
# --------------------------
# CLOCKS_BU
def pm_init():
openocd.write_word(WU_BASE_ADDRESS + WU_CLOCKS_BU_OFFSET, 0x202)
openocd.write_word(PM_BASE_ADDRESS + PM_Clk_APB_P_Set_OFFSET, 0xffffffff)
openocd.write_word(PM_BASE_ADDRESS + PM_Clk_APB_M_Set_OFFSET, 0xffffffff)
openocd.write_word(PM_BASE_ADDRESS + PM_Clk_AHB_Set_OFFSET, 0xffffffff)