summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--SConscript1
-rw-r--r--platforms/stm32/f1.yaml27
-rw-r--r--platforms/stm32/f3.yaml27
-rw-r--r--platforms/stm32/f4.yaml27
-rw-r--r--platforms/stm32/wb.yaml14
-rw-r--r--timer/SConscript21
-rw-r--r--timer/stm32_timer.h33
-rw-r--r--timer/timer.h47
9 files changed, 151 insertions, 47 deletions
diff --git a/.gitignore b/.gitignore
index d170793..5277dce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,5 +13,6 @@ interrupt/default_handlers.cpp
interrupt/vectors_*.cpp
rcc/rcc.h
rcc/rcc_enums.h
+timer/timer.h
usb/usb.h
uart/uart.h
diff --git a/SConscript b/SConscript
index 4af5391..87b5a1c 100644
--- a/SConscript
+++ b/SConscript
@@ -10,6 +10,7 @@ env.Append(
env.SConscript('dma/SConscript'),
env.SConscript('interrupt/SConscript'),
env.SConscript('rcc/SConscript'),
+ env.SConscript('timer/SConscript'),
env.SConscript('uart/SConscript'),
env.SConscript('usb/SConscript'),
Glob('startup/*.cpp'),
diff --git a/platforms/stm32/f1.yaml b/platforms/stm32/f1.yaml
new file mode 100644
index 0000000..8d4962b
--- /dev/null
+++ b/platforms/stm32/f1.yaml
@@ -0,0 +1,27 @@
+# This is incomplete, just preserving register addresses!
+- periph:
+ stm32_timer:
+ TIM1:
+ type: v1
+ offset: 0x40012c00
+ TIM2:
+ type: v1
+ offset: 0x40000000
+ TIM3:
+ type: v1
+ offset: 0x40000400
+ TIM4:
+ type: v1
+ offset: 0x40000800
+ TIM5:
+ type: v1
+ offset: 0x40000c00
+ TIM6:
+ type: v1
+ offset: 0x40001000
+ TIM7:
+ type: v1
+ offset: 0x40001400
+ TIM8:
+ type: v1
+ offset: 0x40013400
diff --git a/platforms/stm32/f3.yaml b/platforms/stm32/f3.yaml
new file mode 100644
index 0000000..8d4962b
--- /dev/null
+++ b/platforms/stm32/f3.yaml
@@ -0,0 +1,27 @@
+# This is incomplete, just preserving register addresses!
+- periph:
+ stm32_timer:
+ TIM1:
+ type: v1
+ offset: 0x40012c00
+ TIM2:
+ type: v1
+ offset: 0x40000000
+ TIM3:
+ type: v1
+ offset: 0x40000400
+ TIM4:
+ type: v1
+ offset: 0x40000800
+ TIM5:
+ type: v1
+ offset: 0x40000c00
+ TIM6:
+ type: v1
+ offset: 0x40001000
+ TIM7:
+ type: v1
+ offset: 0x40001400
+ TIM8:
+ type: v1
+ offset: 0x40013400
diff --git a/platforms/stm32/f4.yaml b/platforms/stm32/f4.yaml
index 72d4505..96731e4 100644
--- a/platforms/stm32/f4.yaml
+++ b/platforms/stm32/f4.yaml
@@ -29,6 +29,33 @@
size: 64k
periph:
+
+ stm32_timer:
+ TIM1:
+ type: v1
+ offset: 0x40010000
+ TIM2:
+ type: v1
+ offset: 0x40000000
+ TIM3:
+ type: v1
+ offset: 0x40000400
+ TIM4:
+ type: v1
+ offset: 0x40000800
+ TIM5:
+ type: v1
+ offset: 0x40000c00
+ TIM6:
+ type: v1
+ offset: 0x40001000
+ TIM7:
+ type: v1
+ offset: 0x40001400
+ TIM8:
+ type: v1
+ offset: 0x40010400
+
stm32_uart:
USART1:
offset: 0x40011000
diff --git a/platforms/stm32/wb.yaml b/platforms/stm32/wb.yaml
index 2214005..65eafea 100644
--- a/platforms/stm32/wb.yaml
+++ b/platforms/stm32/wb.yaml
@@ -28,6 +28,20 @@
size: 10k
periph:
+ stm32_timer:
+ TIM1:
+ type: v1
+ offset: 0x40012C00
+ TIM2:
+ type: v1
+ offset: 0x40000000
+ TIM16:
+ type: v1
+ offset: 0x40014400
+ TIM17:
+ type: v1
+ offset: 0x40014800
+
stm32_uart:
USART1:
type: v2
diff --git a/timer/SConscript b/timer/SConscript
new file mode 100644
index 0000000..7f5afbc
--- /dev/null
+++ b/timer/SConscript
@@ -0,0 +1,21 @@
+Import('env')
+
+headers = []
+instances = []
+sources = []
+aliases = {}
+
+periph = env['PLATFORM_SPEC'].get('periph', {})
+
+if 'stm32_timer' in periph:
+ headers.append('stm32_timer.h')
+ for name, data in periph['stm32_timer'].items():
+ instances.append({
+ 'type': 'STM32_TIMER_t<STM32_TIMER_reg_%s_t>' % data['type'],
+ 'name': name,
+ 'args': [data['offset']],
+ })
+
+env.Jinja2('timer.h', '../templates/periph_instances.h.j2', headers = headers, instances = instances, aliases = aliases)
+
+Return('sources')
diff --git a/timer/stm32_timer.h b/timer/stm32_timer.h
new file mode 100644
index 0000000..cbc966d
--- /dev/null
+++ b/timer/stm32_timer.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <mmio/mmio.h>
+
+struct STM32_TIMER_reg_v1_t {
+ volatile uint32_t CR1;
+ volatile uint32_t CR2;
+ volatile uint32_t SMCR;
+ volatile uint32_t DIER;
+ volatile uint32_t SR;
+ volatile uint32_t EGR;
+ volatile uint32_t CCMR1;
+ volatile uint32_t CCMR2;
+ volatile uint32_t CCER;
+ volatile uint32_t CNT;
+ volatile uint32_t PSC;
+ volatile uint32_t ARR;
+ volatile uint32_t RCR;
+ volatile uint32_t CCR1;
+ volatile uint32_t CCR2;
+ volatile uint32_t CCR3;
+ volatile uint32_t CCR4;
+ volatile uint32_t BDTR;
+ volatile uint32_t DCR;
+ volatile uint32_t DMAR;
+};
+
+template <typename T>
+class STM32_TIMER_t : public mmio_ptr<T> {
+ public:
+ using mmio_ptr<T>::ptr;
+};
+
diff --git a/timer/timer.h b/timer/timer.h
deleted file mode 100644
index 54c0d37..0000000
--- a/timer/timer.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef TIMER_H
-#define TIMER_H
-
-struct TIM_t {
- volatile uint32_t CR1;
- volatile uint32_t CR2;
- volatile uint32_t SMCR;
- volatile uint32_t DIER;
- volatile uint32_t SR;
- volatile uint32_t EGR;
- volatile uint32_t CCMR1;
- volatile uint32_t CCMR2;
- volatile uint32_t CCER;
- volatile uint32_t CNT;
- volatile uint32_t PSC;
- volatile uint32_t ARR;
- volatile uint32_t RCR;
- volatile uint32_t CCR1;
- volatile uint32_t CCR2;
- volatile uint32_t CCR3;
- volatile uint32_t CCR4;
- volatile uint32_t BDTR;
- volatile uint32_t DCR;
- volatile uint32_t DMAR;
-};
-
-#if defined(STM32F1) || defined(STM32F3)
-static TIM_t& TIM1 = *(TIM_t*)0x40012c00;
-static TIM_t& TIM2 = *(TIM_t*)0x40000000;
-static TIM_t& TIM3 = *(TIM_t*)0x40000400;
-static TIM_t& TIM4 = *(TIM_t*)0x40000800;
-static TIM_t& TIM5 = *(TIM_t*)0x40000c00;
-static TIM_t& TIM6 = *(TIM_t*)0x40001000;
-static TIM_t& TIM7 = *(TIM_t*)0x40001400;
-static TIM_t& TIM8 = *(TIM_t*)0x40013400;
-#elif defined(STM32F4)
-static TIM_t& TIM1 = *(TIM_t*)0x40010000;
-static TIM_t& TIM2 = *(TIM_t*)0x40000000;
-static TIM_t& TIM3 = *(TIM_t*)0x40000400;
-static TIM_t& TIM4 = *(TIM_t*)0x40000800;
-static TIM_t& TIM5 = *(TIM_t*)0x40000c00;
-static TIM_t& TIM6 = *(TIM_t*)0x40001000;
-static TIM_t& TIM7 = *(TIM_t*)0x40001400;
-static TIM_t& TIM8 = *(TIM_t*)0x40010400;
-#endif
-
-#endif