mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 13:37:03 +03:00
Исправлена настройка тактирования + обработка ошибок
This commit is contained in:
parent
3f35886f66
commit
d3ae56eff5
@ -3,8 +3,13 @@ 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.wakeup as wake_fields
|
||||
|
||||
def pm_init(openocd: OpenOcdTclRpc) -> int:
|
||||
|
||||
def pm_init(openocd: OpenOcdTclRpc):
|
||||
iter_count = 0
|
||||
max_iter_count = 2
|
||||
|
||||
while True:
|
||||
print('Clock init... ', end='')
|
||||
|
||||
WU_CLOCKS_default = 128 << wake_fields.CLOCKS_BU_ADJ_RC32K_S
|
||||
|
||||
@ -23,11 +28,52 @@ def pm_init(openocd: OpenOcdTclRpc):
|
||||
pm_fields.CLOCK_APB_M_WU_M
|
||||
)
|
||||
# 0x89
|
||||
APB_P_default = pm_fields.CLOCK_APB_P_GPIO_2_M
|
||||
# APB_P_default = pm_fields.CLOCK_APB_P_GPIO_2_M
|
||||
APB_P_default = 0
|
||||
# 0x00
|
||||
|
||||
# openocd.halt()
|
||||
# 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.write_word(mem_map.WU_CLOCKS_BU_OFFSET, WU_CLOCKS_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_M_Set_OFFSET, APB_M_default)
|
||||
# openocd.halt()
|
||||
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.halt()
|
||||
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.halt()
|
||||
openocd.write_word(mem_map.WU_CLOCKS_BU_OFFSET, WU_CLOCKS_default)
|
||||
# openocd.halt()
|
||||
|
||||
|
||||
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_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)
|
||||
|
||||
if (
|
||||
(WU_CLOCKS_real == WU_CLOCKS_default) and
|
||||
(AHB_real == AHB_default) and
|
||||
(APB_M_real == APB_M_default) and
|
||||
(APB_P_real == APB_P_default)
|
||||
):
|
||||
print('OK!')
|
||||
return 0
|
||||
else:
|
||||
print('\nPM initialization results:')
|
||||
print(f'wu план 0x{WU_CLOCKS_default:08x} факт 0x{WU_CLOCKS_real:08x}')
|
||||
print(f'ahb план 0x{AHB_default:08x} факт 0x{AHB_real:08x}')
|
||||
print(f'apb_m план 0x{APB_M_default:08x} факт 0x{APB_M_real:08x}')
|
||||
print(f'apb_p план 0x{APB_P_default:08x} факт 0x{APB_P_real:08x}')
|
||||
iter_count += 1
|
||||
if iter_count < max_iter_count:
|
||||
print(f'ERROR: PM initialization failed, retry #{iter_count}...', flush=True)
|
||||
else:
|
||||
print('ERROR: PM initialization failed, aborting', flush=True)
|
||||
return 1
|
||||
|
||||
@ -253,7 +253,9 @@ def upload_file(
|
||||
|
||||
logging.debug("OpenOCD configured!")
|
||||
|
||||
power_manager.pm_init(openocd)
|
||||
result = power_manager.pm_init(openocd)
|
||||
if result != 0:
|
||||
return 1
|
||||
|
||||
logging.debug("PM configured!")
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user