Skip to content

cpu/qn908x: use bitarithm_test_and_clear() & fix cb [backport 2022.10]#18990

Merged
aabadie merged 2 commits intoRIOT-OS:2022.10-branchfrom
maribu:backport/2022.10/cpu/qn908x
Nov 29, 2022
Merged

cpu/qn908x: use bitarithm_test_and_clear() & fix cb [backport 2022.10]#18990
aabadie merged 2 commits intoRIOT-OS:2022.10-branchfrom
maribu:backport/2022.10/cpu/qn908x

Conversation

@maribu
Copy link
Copy Markdown
Member

@maribu maribu commented Nov 28, 2022

Backport of #18989

Contribution description

Previously, the callback was incorrectly passed a channel of zero as argument regardless of the channel that triggered the IRQ. This fixes the issue and also uses bitarithm_test_and_clear() to only iterate over the channels that actually have an IRQ flag set, rather than all channels.

Testing procedure

$ make BOARD=qn9080dk flash test -C tests/periph_timer

for the test application pimped up by #18963

With master

Help: Press s to start test, r to print it is ready
READY
s
START
main(): This is RIOT! (Version: 2023.01-devel-473-g496ab-tests/periph_timer)

Test for peripheral TIMERs

Available timers: 4

Testing TIMER_0:
TIMER_0: initialization successful
TIMER_0: stopped
TIMER_0: set channel 0 to 5000
TIMER_0: set channel 1 to 10000
TIMER_0: set channel 2 to 15000
TIMER_0: set channel 3 to 20000
TIMER_0: starting
TIMER_0: channel 0 fired at SW count    39971 - init:    39971
TIMER_0: ERROR callback argument mismatch


Testing TIMER_1:
TIMER_1: initialization successful
TIMER_1: stopped
TIMER_1: set channel 0 to 5000
TIMER_1: set channel 1 to 10000
TIMER_1: set channel 2 to 15000
TIMER_1: set channel 3 to 20000
TIMER_1: starting
TIMER_1: channel 0 fired at SW count    39970 - init:    39970
TIMER_1: ERROR callback argument mismatch


Testing TIMER_2:
TIMER_2: initialization successful
TIMER_2: stopped
TIMER_2: set channel 0 to 5000
TIMER_2: set channel 1 to 10000
TIMER_2: set channel 2 to 15000
TIMER_2: set channel 3 to 20000
TIMER_2: starting
TIMER_2: channel 0 fired at SW count    39972 - init:    39972
TIMER_2: ERROR callback argument mismatch


Testing TIMER_3:
TIMER_3: initialization successful
TIMER_3: stopped
TIMER_3: set channel 0 to 5000
TIMER_3: set channel 1 to 10000
TIMER_3: set channel 2 to 15000
TIMER_3: set channel 3 to 20000
TIMER_3: starting
TIMER_3: channel 0 fired at SW count    39970 - init:    39970
TIMER_3: ERROR callback argument mismatch


TEST FAILED
{ "threads": [{ "name": "main", "stack_size": 1536, "stack_used": 408 }]}
Timeout in expect script at "child.expect('TEST SUCCEEDED')" (tests/periph_timer/tests/01-run.py:21)

make: *** [/home/maribu/Repos/software/RIOT/makefiles/tests/tests.inc.mk:26: test] Error 1

This PR

READY
s
START
main(): This is RIOT! (Version: 2023.01-devel-474-g1df0f56-cpu/qn908x)

Test for peripheral TIMERs

Available timers: 4

Testing TIMER_0:
TIMER_0: initialization successful
TIMER_0: stopped
TIMER_0: set channel 0 to 5000
TIMER_0: set channel 1 to 10000
TIMER_0: set channel 2 to 15000
TIMER_0: set channel 3 to 20000
TIMER_0: starting
TIMER_0: channel 0 fired at SW count    10000 - init:    10000
TIMER_0: channel 1 fired at SW count    19993 - diff:     9993
TIMER_0: channel 2 fired at SW count    29986 - diff:     9993
TIMER_0: channel 3 fired at SW count    39979 - diff:     9993

Testing TIMER_1:
TIMER_1: initialization successful
TIMER_1: stopped
TIMER_1: set channel 0 to 5000
TIMER_1: set channel 1 to 10000
TIMER_1: set channel 2 to 15000
TIMER_1: set channel 3 to 20000
TIMER_1: starting
TIMER_1: channel 0 fired at SW count     9999 - init:     9999
TIMER_1: channel 1 fired at SW count    19992 - diff:     9993
TIMER_1: channel 2 fired at SW count    29985 - diff:     9993
TIMER_1: channel 3 fired at SW count    39978 - diff:     9993

Testing TIMER_2:
TIMER_2: initialization successful
TIMER_2: stopped
TIMER_2: set channel 0 to 5000
TIMER_2: set channel 1 to 10000
TIMER_2: set channel 2 to 15000
TIMER_2: set channel 3 to 20000
TIMER_2: starting
TIMER_2: channel 0 fired at SW count     9999 - init:     9999
TIMER_2: channel 1 fired at SW count    19992 - diff:     9993
TIMER_2: channel 2 fired at SW count    29985 - diff:     9993
TIMER_2: channel 3 fired at SW count    39978 - diff:     9993

Testing TIMER_3:
TIMER_3: initialization successful
TIMER_3: stopped
TIMER_3: set channel 0 to 5000
TIMER_3: set channel 1 to 10000
TIMER_3: set channel 2 to 15000
TIMER_3: set channel 3 to 20000
TIMER_3: starting
TIMER_3: channel 0 fired at SW count     9999 - init:     9999
TIMER_3: channel 1 fired at SW count    19992 - diff:     9993
TIMER_3: channel 2 fired at SW count    29985 - diff:     9993
TIMER_3: channel 3 fired at SW count    39978 - diff:     9993

TEST SUCCEEDED

Issues/PRs references

Found well testing for #18976

The linter was unhappy that `unsinged long` and `uint32_t` were used
inconsistency (in the `timer_init()` declaration, implementation, as
well as in the `DEBUG()` format specifiers).

(cherry picked from commit c950286)
Previously, the callback was incorrectly passed a channel of zero as
argument regardless of the channel that triggered the IRQ. This fixes
the issue and also uses `bitarithm_test_and_clear()` to only iterate
over the channels that actually have an IRQ flag set, rather than
all channels.

(cherry picked from commit 0d85356)
@maribu maribu added Area: cpu Area: CPU/MCU ports CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Platform: ARM Platform: This PR/issue effects ARM-based platforms Process: release backport Integration Process: The PR is a release backport of a change previously provided to master Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) labels Nov 28, 2022
@maribu maribu added CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Nov 28, 2022
@riot-ci
Copy link
Copy Markdown

riot-ci commented Nov 28, 2022

Murdock results

✔️ PASSED

f0572a5 cpu/qn908x: use bitarithm_test_and_clear() & fix cb

Success Failures Total Runtime
115836 0 115836 01h:52m:36s

Artifacts

This only reflects a subset of all builds from https://ci-prod.riot-os.org. Please refer to https://ci.riot-os.org for a complete build for now.

Copy link
Copy Markdown
Contributor

@aabadie aabadie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK

@aabadie aabadie merged commit e251312 into RIOT-OS:2022.10-branch Nov 29, 2022
@maribu maribu deleted the backport/2022.10/cpu/qn908x branch November 29, 2022 07:44
@maribu
Copy link
Copy Markdown
Member Author

maribu commented Nov 29, 2022

Thx :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: cpu Area: CPU/MCU ports CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Platform: ARM Platform: This PR/issue effects ARM-based platforms Process: release backport Integration Process: The PR is a release backport of a change previously provided to master Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants