1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-29 10:58:21 +00:00

bootloader: added systick handler

This commit is contained in:
Jochen Hoenicke 2016-09-29 14:38:31 +02:00
parent 0d15cabfcf
commit c9857a756c
No known key found for this signature in database
GPG Key ID: 65B10C0466560648
2 changed files with 50 additions and 4 deletions

View File

@ -89,10 +89,10 @@ openocd: ## start openocd which connects to the device
openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg
gdb: ## start remote gdb session which connects to the openocd
gdb $(STMHAL_BUILD_DIR)/firmware.elf -ex 'target remote localhost:3333'
arm-none-eabi-gdb $(STMHAL_BUILD_DIR)/firmware.elf -ex 'target remote localhost:3333'
gdb_bootloader: ## start remote gdb session which connects to the openocd
gdb $(STMHAL_BUILD_DIR)/bootloader.elf -ex 'target remote localhost:3333'
arm-none-eabi-gdb $(STMHAL_BUILD_DIR)/bootloader.elf -ex 'target remote localhost:3333'
load: ## load contents of src into mass storage of trezor
rm -rf /run/media/${USER}/PYBFLASH/*

View File

@ -28,7 +28,44 @@ void nlr_jump_fail(void *val) {
void SystemClock_Config(void);
// ###
// ### from stm32_it.c
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void) {
// Instead of calling HAL_IncTick we do the increment here of the counter.
// This is purely for efficiency, since SysTick is called 1000 times per
// second at the highest interrupt priority.
// Note: we don't need uwTick to be declared volatile here because this is
// the only place where it can be modified, and the code is more efficient
// without the volatile specifier.
extern uint32_t uwTick;
uwTick += 1;
// Read the systick control regster. This has the side effect of clearing
// the COUNTFLAG bit, which makes the logic in sys_tick_get_microseconds
// work properly.
SysTick->CTRL;
#if 0
// Right now we have the storage and DMA controllers to process during
// this interrupt and we use custom dispatch handlers. If this needs to
// be generalised in the future then a dispatch table can be used as
// follows: ((void(*)(void))(systick_dispatch[uwTick & 0xf]))();
if (STORAGE_IDLE_TICK(uwTick)) {
NVIC->STIR = FLASH_IRQn;
}
if (DMA_IDLE_ENABLED() && DMA_IDLE_TICK(uwTick)) {
dma_idle_handler(uwTick);
}
#endif
}
// ### from timer.c
@ -65,7 +102,16 @@ int main(void) {
display_init();
display_clear();
display_text(0, 0, "TREZOR", 6, FONT_MONO, 0xFFFF, 0x0000);
display_text(100, 120, "TREZOR", 6, FONT_MONO, 0xFFFF, 0x0000);
display_text(90, 140, "bootloader", 10, FONT_MONO, 0xFFFF, 0x0000);
display_backlight(255);
HAL_Delay(250);
display_backlight(0);
HAL_Delay(250);
display_backlight(100);
HAL_Delay(250);
display_backlight(0);
HAL_Delay(250);
display_backlight(255);
__fatal_error("end");