Skip to content

Commit 87c3f91

Browse files
committed
drivers: counter: Add SAM0 basic counter support
This adds support for the basic timer counter (TC) found on SAM0 series parts. This driver only supports running the counter in 32 bit wide mode. Since this mode explicitly slaves the odd counters to the even ones, only instances of the even ones are defined. Tested with tests/drivers/counter/counter_basic_api on SAMD21. Signed-off-by: Derek Hageman <[email protected]>
1 parent fad34eb commit 87c3f91

File tree

13 files changed

+632
-0
lines changed

13 files changed

+632
-0
lines changed

drivers/counter/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ zephyr_library_sources_ifdef(CONFIG_COUNTER_NRF_TIMER counter_nrfx_tim
1212
zephyr_library_sources_ifdef(CONFIG_COUNTER_NRF_RTC counter_nrfx_rtc.c)
1313
zephyr_library_sources_ifdef(CONFIG_RTC_QMSI counter_rtc_qmsi.c)
1414
zephyr_library_sources_ifdef(CONFIG_COUNTER_RTC_STM32 counter_ll_stm32_rtc.c)
15+
zephyr_library_sources_ifdef(CONFIG_COUNTER_SAM0_TC32 counter_sam0_tc32.c)
1516

1617
zephyr_library_sources_ifdef(CONFIG_USERSPACE counter_handlers.c)

drivers/counter/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ source "drivers/counter/Kconfig.imx_epit"
3434

3535
source "drivers/counter/Kconfig.stm32_rtc"
3636

37+
source "drivers/counter/Kconfig.sam0"
38+
3739
endif # COUNTER

drivers/counter/Kconfig.sam0

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Copyright (c) 2019 Derek Hageman <[email protected]>
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
#
5+
6+
menuconfig COUNTER_SAM0_TC32
7+
bool "SAM0 series 32-bit basic timer driver"
8+
default y
9+
depends on SOC_FAMILY_SAM0
10+
help
11+
Enable the SAM0 series timer counter (TC) driver in 32-bit wide
12+
mode.
13+
14+
if COUNTER_SAM0_TC32
15+
16+
index = 0
17+
source "drivers/counter/Kconfig.template.sam0_tc32"
18+
19+
index = 2
20+
source "drivers/counter/Kconfig.template.sam0_tc32"
21+
22+
index = 4
23+
source "drivers/counter/Kconfig.template.sam0_tc32"
24+
25+
index = 6
26+
source "drivers/counter/Kconfig.template.sam0_tc32"
27+
28+
endif # COUNTER_SAM0_TC32
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Copyright (c) 2019 Derek Hageman <[email protected]>
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
#
5+
6+
7+
choice
8+
bool "Timer $(index) prescaler"
9+
10+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_1
11+
bool "clock / 1"
12+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_2
13+
bool "clock / 2"
14+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_4
15+
bool "clock / 4"
16+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_8
17+
bool "clock / 8"
18+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_16
19+
bool "clock / 16"
20+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_64
21+
bool "clock / 64"
22+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_256
23+
bool "clock / 256"
24+
config COUNTER_SAM0_TC32_$(index)_PRESCALER_1024
25+
bool "clock / 1024"
26+
27+
endchoice
28+
29+
config COUNTER_SAM0_TC32_$(index)_DIVISOR
30+
int
31+
default 1 if COUNTER_SAM0_TC32_$(index)_PRESCALER_1
32+
default 2 if COUNTER_SAM0_TC32_$(index)_PRESCALER_2
33+
default 4 if COUNTER_SAM0_TC32_$(index)_PRESCALER_4
34+
default 8 if COUNTER_SAM0_TC32_$(index)_PRESCALER_8
35+
default 16 if COUNTER_SAM0_TC32_$(index)_PRESCALER_16
36+
default 64 if COUNTER_SAM0_TC32_$(index)_PRESCALER_64
37+
default 256 if COUNTER_SAM0_TC32_$(index)_PRESCALER_256
38+
default 1024 if COUNTER_SAM0_TC32_$(index)_PRESCALER_1024

0 commit comments

Comments
 (0)