typedef struct { void (*delayUs)(uint32_t); void (*delayMs)(uint32_t); bool (*enabled)(void); void (*startMs)(uint32_t); void (*stop)(void); bool (*expired)(void); } timer_t; extern const timer_t g_timer32b0m0; extern const timer_t g_timer32b0m1; ... |
static void Timer32b0m0DelayUs (uint32_t us) { ... } static void Timer32b0m0DelayMs (uint32_t ms) { Timer32b0m0DelayUs(ms * 1000); } static bool Timer32b0m0Enabled (void) { ... } static void Timer32b0m0StartMs (uint32_t ms) { ... } static void Timer32b0m0Stop (void) { ... } static bool Timer32b0m0Expired (void) { ... } const timer_t g_timer32b0m0 = { Timer32b0m0DelayUs, Timer32b0m0DelayMs, Timer32b0m0Enabled, Timer32b0m0StartMs, Timer32b0m0Stop, Timer32b0m0Expired }; ... |
g_timer32b0m0.delayMs(100); g_timer32b0m1.delayUs(550); |
g_timer32b0m2.startMs(1000); while (!checkSomeFlag()) { if (g_timer32b0m2.expired()) { break; } g_timer32b0m3.delayUs(100); } g_timer32b0m2.stop(); |
typedef struct { void (*delayUs)(uint32_t); void (*delayMs)(uint32_t); bool (*enabled)(void); void (*startMs)(uint32_t); void (*stop)(void); bool (*expired)(void); } timer_t; extern const timer_t g_timer32b0m0; extern const timer_t g_timer32b0m1; ... |
static void Timer32b0m0DelayUs (uint32_t us) { ... } static void Timer32b0m0DelayMs (uint32_t ms) { Timer32b0m0DelayUs(ms * 1000); } static bool Timer32b0m0Enabled (void) { ... } static void Timer32b0m0StartMs (uint32_t ms) { ... } static void Timer32b0m0Stop (void) { ... } static bool Timer32b0m0Expired (void) { ... } const timer_t g_timer32b0m0 = { Timer32b0m0DelayUs, Timer32b0m0DelayMs, Timer32b0m0Enabled, Timer32b0m0StartMs, Timer32b0m0Stop, Timer32b0m0Expired }; ... |
g_timer32b0m0.delayMs(100); g_timer32b0m1.delayUs(550); |
g_timer32b0m2.startMs(1000); while (!checkSomeFlag()) { if (g_timer32b0m2.expired()) { break; } g_timer32b0m3.delayUs(100); } g_timer32b0m2.stop(); |
typedef struct { void (*delayUs)(uint32_t); void (*delayMs)(uint32_t); bool (*enabled)(void); void (*startMs)(uint32_t); void (*stop)(void); bool (*expired)(void); } timer_t; extern const timer_t g_timer32b0m0; extern const timer_t g_timer32b0m1; ... |
static void Timer32b0m0DelayUs (uint32_t us) { ... } static void Timer32b0m0DelayMs (uint32_t ms) { Timer32b0m0DelayUs(ms * 1000); } static bool Timer32b0m0Enabled (void) { ... } static void Timer32b0m0StartMs (uint32_t ms) { ... } static void Timer32b0m0Stop (void) { ... } static bool Timer32b0m0Expired (void) { ... } const timer_t g_timer32b0m0 = { Timer32b0m0DelayUs, Timer32b0m0DelayMs, Timer32b0m0Enabled, Timer32b0m0StartMs, Timer32b0m0Stop, Timer32b0m0Expired }; ... |
g_timer32b0m0.delayMs(100); g_timer32b0m1.delayUs(550); |
g_timer32b0m2.startMs(1000); while (!checkSomeFlag()) { if (g_timer32b0m2.expired()) { break; } g_timer32b0m3.delayUs(100); } g_timer32b0m2.stop(); |
volatile uint32_t delay; //delay counter ... //SysTick timer handler void SysTick_Handler(void) //Interrupt handler 1ms { //delay counter if(delay)delay--; //delay counter .... } |
delay = 50; //set 50 ms delay while(delay); //wait for end of delay |
delay = 50; //set 50 ms timeout sensor_error =0; //reset sensor error while(!sensor_data_ready) //wait for sensor data { if(delay == 0) //timeout { sensor_error =1; //set sensor error break; } //end timeout } //end wait for sensor data |
void _delay_ms (uint16_t ms) { uint16_t delay; volatile uint32_t i; for (delay = ms; delay >0 ; delay--) //1ms loop with -Os optimisation { for (i=3500; i >0;i--){}; } } |
volatile uint32_t msTicks;/* counts 1ms timeTicks */ void SysTick_Handler(void) { msTicks++;/* increment counter necessary in Delay() */ } __inline static void _delay_ms(uint32_t del) { uint32_t curTicks; curTicks = msTicks; while ((msTicks - curTicks) < del) { __WFI(); } } void setSYSTICK(void)// Setup Systick! { if (SysTick_Config(SystemCoreClock / 100)) { /* Setup SysTick Timer for 1 msec interrupts */ while (1); /* Capture error */ } if ( !(SysTick->CTRL & (1<<SysTick_CTRL_CLKSOURCE_Msk)) ) { LPC_SYSCON->SYSTICKCLKDIV = 0x08; } } int main(void) { SystemInit(); setSYSTICK(); LPC_PMU->PCON |= (1<<11); SCB->SCR &= ~(1<<2); while(1) { _delay_ms(100); //Do Something } return 0 ; } |
volatile uint32_t msTicks;/* counts 1ms timeTicks */ void SysTick_Handler(void) { msTicks++;/* increment counter necessary in Delay() */ } __inline static void _delay_ms(uint32_t del) { uint32_t curTicks; curTicks = msTicks; while ((msTicks - curTicks) < del) { __WFI(); } } void setSYSTICK(void)// Setup Systick! { if (SysTick_Config(SystemCoreClock / 100)) { /* Setup SysTick Timer for 1 msec interrupts */ while (1); /* Capture error */ } if ( !(SysTick->CTRL & (1<<SysTick_CTRL_CLKSOURCE_Msk)) ) { LPC_SYSCON->SYSTICKCLKDIV = 0x08; } } int main(void) { SystemInit(); setSYSTICK(); LPC_PMU->PCON |= (1<<11); SCB->SCR &= ~(1<<2); while(1) { _delay_ms(100); //Do Something } return 0 ; } |
void _delay_ms (uint16_t ms) { uint16_t delay; volatile uint32_t i; for (delay = ms; delay >0 ; delay--) //1ms loop with -Os optimisation { for (i=3500; i >0;i--){}; } } |