Skip to content

sys/ztimer: add support for timers running at a 500kHz frequency #21553

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 19, 2025

Conversation

aabadie
Copy link
Contributor

@aabadie aabadie commented Jun 17, 2025

Contribution description

I'm working on a port for a custom chip in which the peripheral timer runs at 500kHz. I applied this patch to make ztimer work correctly over it.
Maybe there's a better way, e.g with less code duplication.

Testing procedure

Run tests/sys/ztimer_msg on the custom chip:

With this PR
$ BUILD_IN_DOCKER=1 make BOARD=scum-devkit -C tests/sys/ztimer_msg/ --no-print-directory flash test
Launching build container using image "docker.io/riot/riotbuild@sha256:21c416fbbb94a99c3d9c76341baf5a9740608b1d1af89967127c7a171248fd7b".
docker run --rm --tty --user $(id -u) --platform linux/amd64 -v '/usr/share/zoneinfo/Europe/Paris:/etc/localtime:ro' -v '/work/riot/RIOT:/data/riotbuild/riotbase:delegated' -v '/home/aabadie/.cargo/registry:/data/riotbuild/.cargo/registry:delegated' -v '/home/aabadie/.cargo/git:/data/riotbuild/.cargo/git:delegated' -e 'RIOTBASE=/data/riotbuild/riotbase' -e 'CCACHE_BASEDIR=/data/riotbuild/riotbase' -e 'BUILD_DIR=/data/riotbuild/riotbase/build' -e 'BUILD_IN_DOCKER=/data/riotbuild/riotbase/tests/sys/ztimer_msg/1' -e 'RIOTPROJECT=/data/riotbuild/riotbase' -e 'RIOTCPU=/data/riotbuild/riotbase/cpu' -e 'RIOTBOARD=/data/riotbuild/riotbase/boards' -e 'RIOTMAKE=/data/riotbuild/riotbase/makefiles'      -e 'BOARD=scum-devkit' -e 'DISABLE_MODULE=' -e 'DEFAULT_MODULE=test_utils_interactive_sync test_utils_print_stack_usage' -e 'FEATURES_REQUIRED=' -e 'FEATURES_BLACKLIST=' -e 'FEATURES_OPTIONAL=' -e 'USEMODULE=ztimer_usec' -e 'USEPKG='  -w '/data/riotbuild/riotbase/tests/sys/ztimer_msg/' 'docker.io/riot/riotbuild@sha256:21c416fbbb94a99c3d9c76341baf5a9740608b1d1af89967127c7a171248fd7b' make 'BOARD=scum-devkit'    
Building application "tests_ztimer_msg" for "scum-devkit" with CPU "scum".

"make" -C /data/riotbuild/riotbase/pkg/cmsis/ 
"make" -C /data/riotbuild/riotbase/pkg/scum-sdk/ 
"make" -C /data/riotbuild/riotbase/build/pkg/scum-sdk/sdk/bsp -f /data/riotbuild/riotbase/pkg/scum-sdk/scum-sdk.mk
"make" -C /data/riotbuild/riotbase/boards
"make" -C /data/riotbuild/riotbase/boards/common/init
"make" -C /data/riotbuild/riotbase/boards/scum-devkit
"make" -C /data/riotbuild/riotbase/core
"make" -C /data/riotbuild/riotbase/core/lib
"make" -C /data/riotbuild/riotbase/cpu/scum
"make" -C /data/riotbuild/riotbase/cpu/cortexm_common
"make" -C /data/riotbuild/riotbase/cpu/cortexm_common/periph
"make" -C /data/riotbuild/riotbase/cpu/scum/periph
"make" -C /data/riotbuild/riotbase/drivers
"make" -C /data/riotbuild/riotbase/drivers/periph_common
"make" -C /data/riotbuild/riotbase/sys
"make" -C /data/riotbuild/riotbase/sys/auto_init
"make" -C /data/riotbuild/riotbase/sys/div
"make" -C /data/riotbuild/riotbase/sys/frac
"make" -C /data/riotbuild/riotbase/sys/isrpipe
"make" -C /data/riotbuild/riotbase/sys/libc
"make" -C /data/riotbuild/riotbase/sys/malloc_thread_safe
"make" -C /data/riotbuild/riotbase/sys/newlib_syscalls_default
"make" -C /data/riotbuild/riotbase/sys/preprocessor
"make" -C /data/riotbuild/riotbase/sys/stdio
"make" -C /data/riotbuild/riotbase/sys/stdio_uart
"make" -C /data/riotbuild/riotbase/sys/test_utils/interactive_sync
"make" -C /data/riotbuild/riotbase/sys/test_utils/print_stack_usage
"make" -C /data/riotbuild/riotbase/sys/tsrb
"make" -C /data/riotbuild/riotbase/sys/ztimer
   text	   data	    bss	    dec	    hex	filename
  15452	    232	   4700	  20384	   4fa0	/data/riotbuild/riotbase/tests/sys/ztimer_msg/bin/scum-devkit/tests_ztimer_msg.elf
scum-programmer --port /dev/ttyACM0 --calibrate /work/riot/RIOT/tests/sys/ztimer_msg/bin/scum-devkit/tests_ztimer_msg.bin
Starting Scum Programmer
Firmware size:     15684B
Loading firmware to RAM: 100%|██████████████████████████████| 16384/16384 [00:00<00:00, 32868.92B/s]
Booting SCuM...    ✔
Calibrating...     ✔
Done in 1.817s
r
/work/riot/RIOT/dist/tools/pyterm/pyterm -p "/dev/ttyUSB0" -b "19200" -ln "/tmp/pyterm-aabadie" -rn "2025-06-17_13.40.33-tests_ztimer_msg-scum-devkit" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Twisted not available, please install it if you want to use pyterm's JSON capabilities
Connect to serial port /dev/ttyUSB0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2025.07-devel-412-g26d4e-scum_support)
This is thread 2
sending 1st msg
now=3:496168 -> every 2.0s: Hello World
sending 2nd msg
now=3:524840 -> every 5.0s: This is a Test
This is thread 3
sec=4 min=0 hour=0
now=5:516988 -> every 2.0s: Hello World
sec=5 min=0 hour=0
sec=6 min=0 hour=0
now=7:531188 -> every 2.0s: Hello World
sec=7 min=0 hour=0
now=8:547196 -> every 5.0s: This is a Test
sec=8 min=0 hour=0
now=9:545386 -> every 2.0s: Hello World
sec=9 min=0 hour=0
sec=10 min=0 hour=0
now=11:559584 -> every 2.0s: Hello World
sec=11 min=0 hour=0
sec=12 min=0 hour=0
now=13:562968 -> every 5.0s: This is a Test
now=13:579016 -> every 2.0s: Hello World
sec=13 min=0 hour=0
sec=14 min=0 hour=0
now=15:600258 -> every 2.0s: Hello World
sec=15 min=0 hour=0
sec=16 min=0 hour=0
now=17:614986 -> every 2.0s: Hello World
sec=17 min=0 hour=0
now=18:579266 -> every 5.0s: This is a Test
sec=18 min=0 hour=0
now=19:629724 -> every 2.0s: Hello World
sec=19 min=0 hour=0
sec=20 min=0 hour=0
now=21:644462 -> every 2.0s: Hello World
sec=21 min=0 hour=0
sec=22 min=0 hour=0
now=23:595576 -> every 5.0s: This is a Test
now=23:659190 -> every 2.0s: Hello World
sec=23 min=0 hour=0
sec=24 min=0 hour=0
now=25:673938 -> every 2.0s: Hello World
sec=25 min=0 hour=0
sec=26 min=0 hour=0
now=27:688688 -> every 2.0s: Hello World
sec=27 min=0 hour=0
now=28:611890 -> every 5.0s: This is a Test
sec=28 min=0 hour=0
now=29:703436 -> every 2.0s: Hello World
sec=29 min=0 hour=0
sec=30 min=0 hour=0
now=31:718186 -> every 2.0s: Hello World
sec=31 min=0 hour=0
sec=32 min=0 hour=0
now=33:628206 -> every 5.0s: This is a Test
now=33:732926 -> every 2.0s: Hello World
sec=33 min=0 hour=0
sec=34 min=0 hour=0
now=35:747678 -> every 2.0s: Hello World
sec=35 min=0 hour=0
sec=36 min=0 hour=0
now=37:762430 -> every 2.0s: Hello World
sec=37 min=0 hour=0
now=38:644518 -> every 5.0s: This is a Test

Without this PR
$ BUILD_IN_DOCKER=1 make BOARD=scum-devkit -C tests/sys/ztimer_msg/ --no-print-directory flash test
Launching build container using image "docker.io/riot/riotbuild@sha256:21c416fbbb94a99c3d9c76341baf5a9740608b1d1af89967127c7a171248fd7b".
docker run --rm --tty --user $(id -u) --platform linux/amd64 -v '/usr/share/zoneinfo/Europe/Paris:/etc/localtime:ro' -v '/work/riot/RIOT:/data/riotbuild/riotbase:delegated' -v '/home/aabadie/.cargo/registry:/data/riotbuild/.cargo/registry:delegated' -v '/home/aabadie/.cargo/git:/data/riotbuild/.cargo/git:delegated' -e 'RIOTBASE=/data/riotbuild/riotbase' -e 'CCACHE_BASEDIR=/data/riotbuild/riotbase' -e 'BUILD_DIR=/data/riotbuild/riotbase/build' -e 'BUILD_IN_DOCKER=/data/riotbuild/riotbase/tests/sys/ztimer_msg/1' -e 'RIOTPROJECT=/data/riotbuild/riotbase' -e 'RIOTCPU=/data/riotbuild/riotbase/cpu' -e 'RIOTBOARD=/data/riotbuild/riotbase/boards' -e 'RIOTMAKE=/data/riotbuild/riotbase/makefiles'      -e 'BOARD=scum-devkit' -e 'DISABLE_MODULE=' -e 'DEFAULT_MODULE=test_utils_interactive_sync test_utils_print_stack_usage' -e 'FEATURES_REQUIRED=' -e 'FEATURES_BLACKLIST=' -e 'FEATURES_OPTIONAL=' -e 'USEMODULE=ztimer_usec' -e 'USEPKG='  -w '/data/riotbuild/riotbase/tests/sys/ztimer_msg/' 'docker.io/riot/riotbuild@sha256:21c416fbbb94a99c3d9c76341baf5a9740608b1d1af89967127c7a171248fd7b' make 'BOARD=scum-devkit'    
Building application "tests_ztimer_msg" for "scum-devkit" with CPU "scum".

"make" -C /data/riotbuild/riotbase/pkg/cmsis/ 
"make" -C /data/riotbuild/riotbase/pkg/scum-sdk/ 
"make" -C /data/riotbuild/riotbase/build/pkg/scum-sdk/sdk/bsp -f /data/riotbuild/riotbase/pkg/scum-sdk/scum-sdk.mk
"make" -C /data/riotbuild/riotbase/boards
"make" -C /data/riotbuild/riotbase/boards/common/init
"make" -C /data/riotbuild/riotbase/boards/scum-devkit
"make" -C /data/riotbuild/riotbase/core
"make" -C /data/riotbuild/riotbase/core/lib
"make" -C /data/riotbuild/riotbase/cpu/scum
"make" -C /data/riotbuild/riotbase/cpu/cortexm_common
"make" -C /data/riotbuild/riotbase/cpu/cortexm_common/periph
"make" -C /data/riotbuild/riotbase/cpu/scum/periph
"make" -C /data/riotbuild/riotbase/drivers
"make" -C /data/riotbuild/riotbase/drivers/periph_common
"make" -C /data/riotbuild/riotbase/sys
"make" -C /data/riotbuild/riotbase/sys/auto_init
"make" -C /data/riotbuild/riotbase/sys/div
"make" -C /data/riotbuild/riotbase/sys/frac
"make" -C /data/riotbuild/riotbase/sys/isrpipe
"make" -C /data/riotbuild/riotbase/sys/libc
"make" -C /data/riotbuild/riotbase/sys/malloc_thread_safe
"make" -C /data/riotbuild/riotbase/sys/newlib_syscalls_default
"make" -C /data/riotbuild/riotbase/sys/preprocessor
"make" -C /data/riotbuild/riotbase/sys/stdio
"make" -C /data/riotbuild/riotbase/sys/stdio_uart
"make" -C /data/riotbuild/riotbase/sys/test_utils/interactive_sync
"make" -C /data/riotbuild/riotbase/sys/test_utils/print_stack_usage
"make" -C /data/riotbuild/riotbase/sys/tsrb
"make" -C /data/riotbuild/riotbase/sys/ztimer
   text	   data	    bss	    dec	    hex	filename
  15892	    232	   4716	  20840	   5168	/data/riotbuild/riotbase/tests/sys/ztimer_msg/bin/scum-devkit/tests_ztimer_msg.elf
scum-programmer --port /dev/ttyACM0 --calibrate /work/riot/RIOT/tests/sys/ztimer_msg/bin/scum-devkit/tests_ztimer_msg.bin
Starting Scum Programmer
Firmware size:     16124B
Loading firmware to RAM: 100%|██████████████████████████████| 16384/16384 [00:00<00:00, 33208.26B/s]
Booting SCuM...    ✔
Calibrating...     ✔
Done in 1.813s
r
/work/riot/RIOT/dist/tools/pyterm/pyterm -p "/dev/ttyUSB0" -b "19200" -ln "/tmp/pyterm-aabadie" -rn "2025-06-17_13.44.35-tests_ztimer_msg-scum-devkit" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Twisted not available, please install it if you want to use pyterm's JSON capabilities
Connect to serial port /dev/ttyUSB0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2025.07-devel-411-g919bab-scum_support)
This is thread 2
sending 1st msg
now=3:523096 -> every 2.0s: Hello World
sending 2nd msg
now=3:551768 -> every 5.0s: This is a Test
This is thread 3
sec=4 min=0 hour=0
now=5:544140 -> every 2.0s: Hello World
sec=5 min=0 hour=0
sec=6 min=0 hour=0
now=7:558618 -> every 2.0s: Hello World
sec=7 min=0 hour=0
now=8:574346 -> every 5.0s: This is a Test
sec=8 min=0 hour=0
now=9:573092 -> every 2.0s: Hello World
sec=9 min=0 hour=0
sec=10 min=0 hour=0
now=11:587568 -> every 2.0s: Hello World
sec=11 min=0 hour=0
sec=12 min=0 hour=0
now=13:590394 -> every 5.0s: This is a Test
now=13:606608 -> every 2.0s: Hello World
sec=13 min=0 hour=0
sec=14 min=0 hour=0
now=15:627962 -> every 2.0s: Hello World
sec=15 min=0 hour=0
sec=16 min=0 hour=0
now=17:642968 -> every 2.0s: Hello World
sec=17 min=0 hour=0
now=18:606970 -> every 5.0s: This is a Test
sec=18 min=0 hour=0
now=19:657982 -> every 2.0s: Hello World
sec=19 min=0 hour=0
sec=20 min=0 hour=0
now=21:673006 -> every 2.0s: Hello World
sec=21 min=0 hour=0
sec=22 min=0 hour=0
now=23:623558 -> every 5.0s: This is a Test
now=23:688020 -> every 2.0s: Hello World
sec=23 min=0 hour=0
sec=24 min=0 hour=0
now=25:703050 -> every 2.0s: Hello World
sec=25 min=0 hour=0
sec=26 min=0 hour=0
now=27:718078 -> every 2.0s: Hello World
sec=27 min=0 hour=0
Timeout in expect script at "child.expect(r"now=\d+:\d+ -> every 5.0s: This is a Test")" (tests/sys/ztimer_msg/tests/01-run.py:26)

Issues/PRs references

None

@github-actions github-actions bot added Area: timers Area: timer subsystems Area: sys Area: System labels Jun 17, 2025
@crasbe crasbe added Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Jun 17, 2025
@riot-ci
Copy link

riot-ci commented Jun 17, 2025

Murdock results

✔️ PASSED

bc24172 sys/ztimer: add support for 500kHz timer frequency

Success Failures Total Runtime
10379 0 10379 09m:14s

Artifacts

@aabadie aabadie added this pull request to the merge queue Jun 19, 2025
Merged via the queue into RIOT-OS:master with commit 4db7d01 Jun 19, 2025
28 checks passed
@Teufelchen1 Teufelchen1 added this to the Release 2025.07 milestone Jul 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: sys Area: System Area: timers Area: timer subsystems CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants