armcm_timer: Unify udelay() implementation

Move the udelay() code from various arm board directories into the
src/generic/armcm_timer.c code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2019-06-09 20:26:30 -04:00
parent 97840f9851
commit 700e35c6ac
10 changed files with 24 additions and 42 deletions

View File

@ -54,6 +54,20 @@ timer_kick(void)
SCB->ICSR = SCB_ICSR_PENDSTSET_Msk; SCB->ICSR = SCB_ICSR_PENDSTSET_Msk;
} }
// Implement simple early-boot delay mechanism
void
udelay(uint32_t usecs)
{
if (!(CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk)) {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
uint32_t end = timer_read_time() + timer_from_us(usecs);
while (timer_is_before(timer_read_time(), end))
;
}
void void
timer_init(void) timer_init(void)
{ {

View File

@ -0,0 +1,8 @@
#ifndef __GENERIC_ARMCM_TIMER_H
#define __GENERIC_ARMCM_TIMER_H
#include <stdint.h> // uint32_t
void udelay(uint32_t usecs);
#endif // serial_irq.h

View File

@ -18,6 +18,4 @@ int is_enabled_pclock(uint32_t pclk);
void enable_pclock(uint32_t pclk); void enable_pclock(uint32_t pclk);
void gpio_peripheral(uint32_t gpio, int func, int pullup); void gpio_peripheral(uint32_t gpio, int func, int pullup);
void udelay(uint32_t usecs);
#endif // internal.h #endif // internal.h

View File

@ -67,20 +67,6 @@ command_reset(uint32_t *args)
} }
DECL_COMMAND_FLAGS(command_reset, HF_IN_SHUTDOWN, "reset"); DECL_COMMAND_FLAGS(command_reset, HF_IN_SHUTDOWN, "reset");
// Implement simple early-boot delay mechanism
void
udelay(uint32_t usecs)
{
if (!(CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk)) {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
uint32_t end = timer_read_time() + timer_from_us(usecs);
while (timer_is_before(timer_read_time(), end))
;
}
// Main entry point // Main entry point
int int
main(void) main(void)

View File

@ -7,6 +7,7 @@
#include <string.h> // memcpy #include <string.h> // memcpy
#include "LPC17xx.h" // LPC_SC #include "LPC17xx.h" // LPC_SC
#include "autoconf.h" // CONFIG_SMOOTHIEWARE_BOOTLOADER #include "autoconf.h" // CONFIG_SMOOTHIEWARE_BOOTLOADER
#include "board/armcm_timer.h" // udelay
#include "board/irq.h" // irq_disable #include "board/irq.h" // irq_disable
#include "board/misc.h" // timer_read_time #include "board/misc.h" // timer_read_time
#include "byteorder.h" // cpu_to_le32 #include "byteorder.h" // cpu_to_le32

View File

@ -9,7 +9,6 @@
extern uint8_t const avail_pins[]; extern uint8_t const avail_pins[];
void udelay(uint32_t usecs);
void gpio_init(void); void gpio_init(void);
void TimerInit(void); void TimerInit(void);

View File

@ -84,15 +84,6 @@ void clock_config(void)
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
} }
// Implement simple early-boot delay mechanism
void
udelay(uint32_t usecs)
{
uint32_t end = timer_read_time() + timer_from_us(usecs);
while (timer_is_before(timer_read_time(), end))
;
}
void void
watchdog_reset(void) watchdog_reset(void)
{ {

View File

@ -10,6 +10,4 @@
extern GPIO_TypeDef *const digital_regs[]; extern GPIO_TypeDef *const digital_regs[];
extern uint32_t const digital_pins[]; extern uint32_t const digital_pins[];
void udelay(uint32_t usecs);
#endif // internal.h #endif // internal.h

View File

@ -131,20 +131,6 @@ void io_config(void)
LL_DBGMCU_SetTracePinAssignment(LL_DBGMCU_TRACE_NONE); LL_DBGMCU_SetTracePinAssignment(LL_DBGMCU_TRACE_NONE);
} }
// Implement simple early-boot delay mechanism
void
udelay(uint32_t usecs)
{
if (!(CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk)) {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
uint32_t end = timer_read_time() + timer_from_us(usecs);
while (timer_is_before(timer_read_time(), end))
;
}
// Main entry point // Main entry point
int int
main(void) main(void)

View File

@ -6,6 +6,7 @@
#include <string.h> // NULL #include <string.h> // NULL
#include "autoconf.h" // CONFIG_STM_FLASH_START_2000 #include "autoconf.h" // CONFIG_STM_FLASH_START_2000
#include "board/armcm_timer.h" // udelay
#include "board/gpio.h" // gpio_out_setup #include "board/gpio.h" // gpio_out_setup
#include "board/io.h" // writeb #include "board/io.h" // writeb
#include "board/irq.h" // irq_disable #include "board/irq.h" // irq_disable