Pulse consistency test using wait_us in a thread

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?

UserRevisionLine numberNew 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 }