Add timer.{h, c}
This commit is contained in:
22
src/timer.c
Normal file
22
src/timer.c
Normal file
@@ -0,0 +1,22 @@
|
||||
#include "rcc.h"
|
||||
#include "timer.h"
|
||||
|
||||
void tim4_init(void) {
|
||||
// Enable timer
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4_ENABLE;
|
||||
|
||||
// Reset timer
|
||||
TIM4->CR1 = 0x0000;
|
||||
TIM4->CR2 = 0x0000;
|
||||
|
||||
// Set prescaler
|
||||
// f_clk = 48MHz -> /48000 = 1KHz counting frequency = 1ms
|
||||
TIM4->PSC = (uint16_t) 48000 - 1;
|
||||
|
||||
// Set ARR to maximum value to get 1ms between updates
|
||||
TIM4->ARR = (uint16_t) 0xFFFF;
|
||||
}
|
||||
|
||||
void tim4_start(void) {
|
||||
TIM4->CR1 |= TIM4_ENABLE;
|
||||
}
|
||||
38
src/timer.h
Normal file
38
src/timer.h
Normal file
@@ -0,0 +1,38 @@
|
||||
#ifndef TIMER_H_
|
||||
#define TIMER_H_
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
struct timer {
|
||||
volatile uint32_t CR1; // Control register 1
|
||||
volatile uint32_t CR2; // Control register 2
|
||||
volatile uint32_t SMCR; // Slave mode control register
|
||||
volatile uint32_t DIER; // DMA/interrupt enable registe
|
||||
volatile uint32_t SR; // Status register
|
||||
volatile uint32_t EGR; // Event generation register
|
||||
volatile uint32_t CCMR1; // Capture/compare mode register 1
|
||||
volatile uint32_t CCMR2; // Capture/compare mode register 2
|
||||
volatile uint32_t CCER; // Capture/compare enable register
|
||||
volatile uint32_t CNT; // Counter
|
||||
volatile uint32_t PSC; // Prescalar
|
||||
volatile uint32_t ARR; // Auto-reload register
|
||||
volatile uint32_t RCR; // Repetition counter registe
|
||||
volatile uint32_t CCR1; // Capture/compare register 1
|
||||
volatile uint32_t CCR2; // Capture/compare register 2
|
||||
volatile uint32_t CCR3; // Capture/compare register 3
|
||||
volatile uint32_t CCR4; // Capture/compare register 4
|
||||
volatile uint32_t BDTR; // Break and dead-time register
|
||||
volatile uint32_t DCR; // DMA control register
|
||||
volatile uint32_t DMAR; // DMA address for full transfer
|
||||
};
|
||||
|
||||
#define TIM4_BASE_ADDR (0x40000800U)
|
||||
#define TIM4 ((struct timer *) TIM4_BASE_ADDR)
|
||||
|
||||
#define TIM4_CR_CEN_BIT 0
|
||||
#define TIM4_ENABLE (1 << TIM4_CR_CEN_BIT)
|
||||
|
||||
void tim4_init(void);
|
||||
void tim4_start(void);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user