mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 13:37:03 +03:00
рефактор
This commit is contained in:
parent
c5950bfa4f
commit
2d5a23268f
@ -3,15 +3,26 @@ import mik32_debug_hal.registers.memory_map as mem_map
|
|||||||
import mik32_debug_hal.registers.bitfields.power_manager as pm_fields
|
import mik32_debug_hal.registers.bitfields.power_manager as pm_fields
|
||||||
import mik32_debug_hal.registers.bitfields.wakeup as wake_fields
|
import mik32_debug_hal.registers.bitfields.wakeup as wake_fields
|
||||||
|
|
||||||
def pm_init(openocd: OpenOcdTclRpc) -> int:
|
|
||||||
|
|
||||||
iter_count = 0
|
def pm_init(openocd: OpenOcdTclRpc) -> int:
|
||||||
max_iter_count = 2
|
""" Настройка тактирования
|
||||||
|
|
||||||
|
Ключевые аргументы:
|
||||||
|
openocd - объект для доступа к интерфейсу Tcl OpenOCD
|
||||||
|
|
||||||
|
Возвращаемое значение:
|
||||||
|
0 - успех
|
||||||
|
1 - ошибка
|
||||||
|
"""
|
||||||
|
|
||||||
|
iter = 1
|
||||||
|
max_iter = 2 # число попыток записи регистров
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
print('Clock init... ', end='')
|
print('Clock init... ', end='')
|
||||||
|
|
||||||
WU_CLOCKS_default = 128 << wake_fields.CLOCKS_BU_ADJ_RC32K_S
|
# определение начальных значений регистров
|
||||||
|
APB_P_default = 0
|
||||||
|
|
||||||
AHB_default = (
|
AHB_default = (
|
||||||
pm_fields.CLOCK_AHB_CPU_M |
|
pm_fields.CLOCK_AHB_CPU_M |
|
||||||
@ -21,40 +32,33 @@ def pm_init(openocd: OpenOcdTclRpc) -> int:
|
|||||||
pm_fields.CLOCK_AHB_TCB_M |
|
pm_fields.CLOCK_AHB_TCB_M |
|
||||||
pm_fields.CLOCK_AHB_DMA_M
|
pm_fields.CLOCK_AHB_DMA_M
|
||||||
)
|
)
|
||||||
# 0x1F
|
|
||||||
APB_M_default = (
|
APB_M_default = (
|
||||||
pm_fields.CLOCK_APB_M_PM_M |
|
pm_fields.CLOCK_APB_M_PM_M |
|
||||||
pm_fields.CLOCK_APB_M_PAD_CONFIG_M |
|
pm_fields.CLOCK_APB_M_PAD_CONFIG_M |
|
||||||
pm_fields.CLOCK_APB_M_WU_M
|
pm_fields.CLOCK_APB_M_WU_M
|
||||||
)
|
)
|
||||||
# 0x89
|
|
||||||
# APB_P_default = pm_fields.CLOCK_APB_P_GPIO_2_M
|
|
||||||
APB_P_default = 0
|
|
||||||
# 0x00
|
|
||||||
|
|
||||||
# openocd.halt()
|
WU_CLOCKS_default = 128 << wake_fields.CLOCKS_BU_ADJ_RC32K_S
|
||||||
# openocd.write_word(mem_map.WU_CLOCKS_BU_OFFSET, WU_CLOCKS_default)
|
|
||||||
# openocd.write_word(mem_map.PM_Clk_APB_P_Set_OFFSET, APB_P_default)
|
|
||||||
# openocd.write_word(mem_map.PM_Clk_APB_M_Set_OFFSET, APB_M_default)
|
|
||||||
# openocd.write_word(mem_map.PM_Clk_AHB_Set_OFFSET, AHB_default)
|
|
||||||
|
|
||||||
|
# запись начальных значений в регистры
|
||||||
openocd.halt()
|
openocd.halt()
|
||||||
|
|
||||||
openocd.write_word(mem_map.PM_Clk_APB_P_Clear_OFFSET, ~APB_P_default)
|
openocd.write_word(mem_map.PM_Clk_APB_P_Clear_OFFSET, ~APB_P_default)
|
||||||
openocd.write_word(mem_map.PM_Clk_APB_P_Set_OFFSET, APB_P_default)
|
openocd.write_word(mem_map.PM_Clk_APB_P_Set_OFFSET, APB_P_default)
|
||||||
# openocd.halt()
|
|
||||||
openocd.write_word(mem_map.PM_Clk_AHB_Clear_OFFSET, ~AHB_default)
|
openocd.write_word(mem_map.PM_Clk_AHB_Clear_OFFSET, ~AHB_default)
|
||||||
openocd.write_word(mem_map.PM_Clk_AHB_Set_OFFSET, AHB_default)
|
openocd.write_word(mem_map.PM_Clk_AHB_Set_OFFSET, AHB_default)
|
||||||
# openocd.halt()
|
|
||||||
openocd.write_word(mem_map.PM_Clk_APB_M_Clear_OFFSET, ~APB_M_default)
|
openocd.write_word(mem_map.PM_Clk_APB_M_Clear_OFFSET, ~APB_M_default)
|
||||||
openocd.write_word(mem_map.PM_Clk_APB_M_Set_OFFSET, APB_M_default)
|
openocd.write_word(mem_map.PM_Clk_APB_M_Set_OFFSET, APB_M_default)
|
||||||
# openocd.halt()
|
|
||||||
openocd.write_word(mem_map.WU_CLOCKS_BU_OFFSET, WU_CLOCKS_default)
|
openocd.write_word(mem_map.WU_CLOCKS_BU_OFFSET, WU_CLOCKS_default)
|
||||||
# openocd.halt()
|
|
||||||
|
|
||||||
|
|
||||||
|
# проверка записи на случай неожиданного ресета и перезаписи прошивкой
|
||||||
|
APB_P_real = openocd.read_word(mem_map.PM_Clk_APB_P_Set_OFFSET)
|
||||||
AHB_real = openocd.read_word(mem_map.PM_Clk_AHB_Set_OFFSET)
|
AHB_real = openocd.read_word(mem_map.PM_Clk_AHB_Set_OFFSET)
|
||||||
APB_M_real = openocd.read_word(mem_map.PM_Clk_APB_M_Set_OFFSET)
|
APB_M_real = openocd.read_word(mem_map.PM_Clk_APB_M_Set_OFFSET)
|
||||||
APB_P_real = openocd.read_word(mem_map.PM_Clk_APB_P_Set_OFFSET)
|
|
||||||
WU_CLOCKS_real = openocd.read_word(mem_map.WU_CLOCKS_BU_OFFSET)
|
WU_CLOCKS_real = openocd.read_word(mem_map.WU_CLOCKS_BU_OFFSET)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -65,15 +69,17 @@ def pm_init(openocd: OpenOcdTclRpc) -> int:
|
|||||||
):
|
):
|
||||||
print('OK!')
|
print('OK!')
|
||||||
return 0
|
return 0
|
||||||
else:
|
|
||||||
print('\nPM initialization results:')
|
print('\nPM initialization results:')
|
||||||
print(f'wu план 0x{WU_CLOCKS_default:08x} факт 0x{WU_CLOCKS_real:08x}')
|
print(
|
||||||
print(f'ahb план 0x{AHB_default:08x} факт 0x{AHB_real:08x}')
|
f'wu def 0x{WU_CLOCKS_default:08x} real 0x{WU_CLOCKS_real:08x}')
|
||||||
print(f'apb_m план 0x{APB_M_default:08x} факт 0x{APB_M_real:08x}')
|
print(f'ahb def 0x{AHB_default:08x} real 0x{AHB_real:08x}')
|
||||||
print(f'apb_p план 0x{APB_P_default:08x} факт 0x{APB_P_real:08x}')
|
print(f'apb_m def 0x{APB_M_default:08x} real 0x{APB_M_real:08x}')
|
||||||
iter_count += 1
|
print(f'apb_p def 0x{APB_P_default:08x} real 0x{APB_P_real:08x}')
|
||||||
if iter_count < max_iter_count:
|
|
||||||
print(f'ERROR: PM initialization failed, retry #{iter_count}...', flush=True)
|
iter += 1
|
||||||
else:
|
if iter > max_iter:
|
||||||
print('ERROR: PM initialization failed, aborting', flush=True)
|
print('ERROR: PM initialization failed, aborting', flush=True)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
print(f'ERROR: PM initialization failed, retry #{iter}...', flush=True)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user