engine_control/source/firmware/arch/stm32f4xx/__dep/delay.c
2016-07-23 07:59:54 +02:00

63 lines
1.3 KiB
C
Executable File

/*
* delay.c
*
* Created on: Feb 16, 2012
* Author: tkl
*/
#include <stdint.h>
#include <stddef.h>
#ifdef BOARD_STM32_H103
#include "system_stm32f10x.h"
#endif
#ifdef BOARD_STM32F4_DISCOVERY
#include "system_stm32f4xx.h"
#endif
#include "delay.h"
#define CORRECT 30 // Korrekturfaktor (stm32-h103 - oszi ermittelt (startup code ???)
//-----------------------------------------------------------------------------
static uint32_t get_div_us(void) {
uint32_t us = 1e6;
uint32_t ret = SystemCoreClock;
ret /= us;
if(ret == 0) {
ret += 1;
}
return ret;
}
//-----------------------------------------------------------------------------
static uint32_t get_div_ms(void) {
uint32_t ms = 1e3;
uint32_t ret = SystemCoreClock;
ret /= ms;
if(ret == 0) {
ret += 1;
}
return ret;
}
//-----------------------------------------------------------------------------
void delay_us(uint32_t delay_us) {
uint32_t div = get_div_us();
volatile uint64_t count = delay_us * div / CORRECT;
while(count > 0) {
count--;
}
}
//-----------------------------------------------------------------------------
void delay_ms(uint32_t delay_ms) {
uint32_t div = get_div_ms();
volatile uint64_t count = delay_ms * div / CORRECT;
while(count > 0) {
count--;
}
}