Shane Lobo
/
nRF52_Pulse_Threads
Pulse consistency test using wait_us in a thread
main.cpp@1:4dec185d33e9, 2019-05-10 (annotated)
- Committer:
- punkisnail
- Date:
- Fri May 10 05:45:50 2019 +0000
- Revision:
- 1:4dec185d33e9
- Parent:
- 0:18409537564c
nRF52 Pulse test using threads, commit 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
punkisnail | 0:18409537564c | 1 | /* mbed Microcontroller Library |
punkisnail | 0:18409537564c | 2 | * Copyright (c) 2018 ARM Limited |
punkisnail | 0:18409537564c | 3 | * SPDX-License-Identifier: Apache-2.0 |
punkisnail | 0:18409537564c | 4 | */ |
punkisnail | 0:18409537564c | 5 | |
punkisnail | 0:18409537564c | 6 | #include <mbed.h> |
punkisnail | 0:18409537564c | 7 | |
punkisnail | 1:4dec185d33e9 | 8 | #define CH_INIT 0 |
punkisnail | 1:4dec185d33e9 | 9 | #define CH_BOOST_START 1 |
punkisnail | 1:4dec185d33e9 | 10 | #define CH_BOOSTING 2 |
punkisnail | 1:4dec185d33e9 | 11 | #define CH_POST_BOOST 3 |
punkisnail | 1:4dec185d33e9 | 12 | #define CH_WAIT_200MS 4 |
punkisnail | 1:4dec185d33e9 | 13 | #define CH_WAIT_800MS 5 |
punkisnail | 0:18409537564c | 14 | |
punkisnail | 1:4dec185d33e9 | 15 | #define SAMPLE_FLAG1 (1UL << 0) |
punkisnail | 0:18409537564c | 16 | |
punkisnail | 1:4dec185d33e9 | 17 | Serial pc(p6, p8); |
punkisnail | 0:18409537564c | 18 | |
punkisnail | 1:4dec185d33e9 | 19 | DigitalOut led1(LED1); // Used to indicate boost state to user |
punkisnail | 1:4dec185d33e9 | 20 | DigitalOut led2(LED2); // Used to indicate boost state to user |
punkisnail | 0:18409537564c | 21 | |
punkisnail | 1:4dec185d33e9 | 22 | DigitalOut ch1(LED4); |
punkisnail | 0:18409537564c | 23 | |
punkisnail | 1:4dec185d33e9 | 24 | Timeout chStateTimeout; |
punkisnail | 1:4dec185d33e9 | 25 | |
punkisnail | 1:4dec185d33e9 | 26 | Timer t; |
punkisnail | 0:18409537564c | 27 | |
punkisnail | 1:4dec185d33e9 | 28 | Thread thread; |
punkisnail | 0:18409537564c | 29 | |
punkisnail | 1:4dec185d33e9 | 30 | //Semaphore sem(0); |
punkisnail | 0:18409537564c | 31 | |
punkisnail | 1:4dec185d33e9 | 32 | EventFlags event_flags; |
punkisnail | 0:18409537564c | 33 | |
punkisnail | 1:4dec185d33e9 | 34 | volatile bool ch_progress = false; |
punkisnail | 1:4dec185d33e9 | 35 | volatile bool ch_boost_done = false; |
punkisnail | 0:18409537564c | 36 | |
punkisnail | 1:4dec185d33e9 | 37 | // ----------------------------------------------------------------------------- |
punkisnail | 1:4dec185d33e9 | 38 | void timeoutHandler() { |
punkisnail | 1:4dec185d33e9 | 39 | ch_progress = true; |
punkisnail | 0:18409537564c | 40 | } |
punkisnail | 0:18409537564c | 41 | |
punkisnail | 1:4dec185d33e9 | 42 | // ----------------------------------------------------------------------------- |
punkisnail | 1:4dec185d33e9 | 43 | void chBoostThread() { |
punkisnail | 1:4dec185d33e9 | 44 | while (1) { |
punkisnail | 1:4dec185d33e9 | 45 | //sem.wait(); |
punkisnail | 1:4dec185d33e9 | 46 | //Thread::signal_wait(0x1); |
punkisnail | 1:4dec185d33e9 | 47 | event_flags.wait_any(SAMPLE_FLAG1); |
punkisnail | 1:4dec185d33e9 | 48 | |
punkisnail | 1:4dec185d33e9 | 49 | t.start(); |
punkisnail | 1:4dec185d33e9 | 50 | ch1 = 1; |
punkisnail | 1:4dec185d33e9 | 51 | wait_us(100); |
punkisnail | 1:4dec185d33e9 | 52 | ch1 = 0; |
punkisnail | 1:4dec185d33e9 | 53 | t.stop(); |
punkisnail | 1:4dec185d33e9 | 54 | ch_boost_done = true; |
punkisnail | 0:18409537564c | 55 | } |
punkisnail | 0:18409537564c | 56 | } |
punkisnail | 0:18409537564c | 57 | |
punkisnail | 1:4dec185d33e9 | 58 | // ----------------------------------------------------------------------------- |
punkisnail | 0:18409537564c | 59 | int main() |
punkisnail | 0:18409537564c | 60 | { |
punkisnail | 1:4dec185d33e9 | 61 | uint8_t ch_state = CH_INIT; |
punkisnail | 1:4dec185d33e9 | 62 | unsigned long dummy_count = 0, dummy_count_post = 0; |
punkisnail | 0:18409537564c | 63 | |
punkisnail | 1:4dec185d33e9 | 64 | ch1 = 0; |
punkisnail | 1:4dec185d33e9 | 65 | |
punkisnail | 1:4dec185d33e9 | 66 | thread.start(chBoostThread); |
punkisnail | 0:18409537564c | 67 | |
punkisnail | 1:4dec185d33e9 | 68 | while(1) { |
punkisnail | 1:4dec185d33e9 | 69 | switch (ch_state) { |
punkisnail | 1:4dec185d33e9 | 70 | case CH_INIT: |
punkisnail | 1:4dec185d33e9 | 71 | ch1 = 0; |
punkisnail | 1:4dec185d33e9 | 72 | ch_progress = false; |
punkisnail | 1:4dec185d33e9 | 73 | ch_boost_done = false; |
punkisnail | 1:4dec185d33e9 | 74 | dummy_count = 0; |
punkisnail | 1:4dec185d33e9 | 75 | dummy_count_post = 0; |
punkisnail | 1:4dec185d33e9 | 76 | ch_state = CH_BOOST_START; |
punkisnail | 1:4dec185d33e9 | 77 | break; |
punkisnail | 1:4dec185d33e9 | 78 | case CH_BOOST_START: |
punkisnail | 1:4dec185d33e9 | 79 | ch_state = CH_BOOSTING; |
punkisnail | 1:4dec185d33e9 | 80 | led1 = 1; // Give visual indication at start of boost stage |
punkisnail | 1:4dec185d33e9 | 81 | //sem.release(); |
punkisnail | 1:4dec185d33e9 | 82 | //thread.signal_set(0x1); |
punkisnail | 1:4dec185d33e9 | 83 | event_flags.set(SAMPLE_FLAG1); |
punkisnail | 1:4dec185d33e9 | 84 | case CH_BOOSTING: |
punkisnail | 1:4dec185d33e9 | 85 | dummy_count++; // measure response during 100us boost stage |
punkisnail | 1:4dec185d33e9 | 86 | |
punkisnail | 1:4dec185d33e9 | 87 | if (ch_boost_done) { |
punkisnail | 1:4dec185d33e9 | 88 | ch_state = CH_POST_BOOST; |
punkisnail | 1:4dec185d33e9 | 89 | chStateTimeout.attach_us(&timeoutHandler, 1000); |
punkisnail | 1:4dec185d33e9 | 90 | } |
punkisnail | 1:4dec185d33e9 | 91 | else break; |
punkisnail | 1:4dec185d33e9 | 92 | case CH_POST_BOOST: |
punkisnail | 1:4dec185d33e9 | 93 | dummy_count_post++; // measuring response after boost stage for 1ms |
punkisnail | 1:4dec185d33e9 | 94 | |
punkisnail | 1:4dec185d33e9 | 95 | if (ch_progress) { |
punkisnail | 1:4dec185d33e9 | 96 | ch_progress = false; |
punkisnail | 1:4dec185d33e9 | 97 | ch_state = CH_WAIT_200MS; |
punkisnail | 1:4dec185d33e9 | 98 | chStateTimeout.attach(&timeoutHandler, 0.2f); |
punkisnail | 1:4dec185d33e9 | 99 | } |
punkisnail | 1:4dec185d33e9 | 100 | break; |
punkisnail | 1:4dec185d33e9 | 101 | case CH_WAIT_200MS: |
punkisnail | 1:4dec185d33e9 | 102 | if (ch_progress) { |
punkisnail | 1:4dec185d33e9 | 103 | ch_progress = false; |
punkisnail | 1:4dec185d33e9 | 104 | led1 = 0; // Turn off boost indication |
punkisnail | 1:4dec185d33e9 | 105 | ch_state = CH_WAIT_800MS; |
punkisnail | 1:4dec185d33e9 | 106 | chStateTimeout.attach(&timeoutHandler, 0.8f); |
punkisnail | 1:4dec185d33e9 | 107 | } |
punkisnail | 1:4dec185d33e9 | 108 | break; |
punkisnail | 1:4dec185d33e9 | 109 | case CH_WAIT_800MS: |
punkisnail | 1:4dec185d33e9 | 110 | if (ch_progress) { |
punkisnail | 1:4dec185d33e9 | 111 | ch_progress = false; |
punkisnail | 1:4dec185d33e9 | 112 | ch_state = CH_INIT; |
punkisnail | 1:4dec185d33e9 | 113 | |
punkisnail | 1:4dec185d33e9 | 114 | pc.printf("CH_BOOSTING COUNT: %lu; CH_POST_BOOST COUNT: %lu; TIME TAKEN: %d\r\n", dummy_count, dummy_count_post, t.read_us()); // print measured response; |
punkisnail | 1:4dec185d33e9 | 115 | t.reset(); |
punkisnail | 1:4dec185d33e9 | 116 | } |
punkisnail | 1:4dec185d33e9 | 117 | break; |
punkisnail | 1:4dec185d33e9 | 118 | } |
punkisnail | 0:18409537564c | 119 | |
punkisnail | 1:4dec185d33e9 | 120 | } |
punkisnail | 0:18409537564c | 121 | } |