Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
test_ehp_reg.cpp@0:be95bfb06686, 2022-01-17 (annotated)
- Committer:
- wuliqunyy
- Date:
- Mon Jan 17 13:20:09 2022 +0000
- Revision:
- 0:be95bfb06686
a working non_flat + adc_didt for ehp regulation version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wuliqunyy | 0:be95bfb06686 | 1 | #include "test_ehp_reg.h" |
wuliqunyy | 0:be95bfb06686 | 2 | #include "main_init.h" |
wuliqunyy | 0:be95bfb06686 | 3 | #include "mbed.h" |
wuliqunyy | 0:be95bfb06686 | 4 | |
wuliqunyy | 0:be95bfb06686 | 5 | #define EHP_BUFF_SIZE 1001 |
wuliqunyy | 0:be95bfb06686 | 6 | |
wuliqunyy | 0:be95bfb06686 | 7 | test_ehp_reg::test_ehp_reg(PinName timerCapturePin, PinName adcCapturePin) |
wuliqunyy | 0:be95bfb06686 | 8 | : test_vector(timerCapturePin, rise_fall, EHP_BUFF_SIZE), _interruptTrigger(adcCapturePin) |
wuliqunyy | 0:be95bfb06686 | 9 | {} |
wuliqunyy | 0:be95bfb06686 | 10 | |
wuliqunyy | 0:be95bfb06686 | 11 | void test_ehp_reg::_handleADCTriggerPinRiseIRQ() |
wuliqunyy | 0:be95bfb06686 | 12 | { |
wuliqunyy | 0:be95bfb06686 | 13 | |
wuliqunyy | 0:be95bfb06686 | 14 | _ADC_temp = _readADC(); /* sample ADC as quick as possible*/ |
wuliqunyy | 0:be95bfb06686 | 15 | if(_ADC_idx <= EHP_BUFF_SIZE && !_ADCBufferFull) |
wuliqunyy | 0:be95bfb06686 | 16 | { |
wuliqunyy | 0:be95bfb06686 | 17 | startTimer(); /*important! timer starts only the ADC trigger starts!!!!!! */ |
wuliqunyy | 0:be95bfb06686 | 18 | if(_ADC_idx == getPeriodIdx()) |
wuliqunyy | 0:be95bfb06686 | 19 | { |
wuliqunyy | 0:be95bfb06686 | 20 | _ADCperiodInSync = true; |
wuliqunyy | 0:be95bfb06686 | 21 | led4 = 1; |
wuliqunyy | 0:be95bfb06686 | 22 | _ptr_ADC_arr[_ADC_idx] = _ADC_temp; |
wuliqunyy | 0:be95bfb06686 | 23 | /* re-assemble last result together with last captured non-flat+period*/ |
wuliqunyy | 0:be95bfb06686 | 24 | _ptr_ADC_arr[_ADC_idx-1] = _ptr_ADC_arr[_ADC_idx-1] + (getCurrentTimerBufferValue() << 16); /* test */ |
wuliqunyy | 0:be95bfb06686 | 25 | } |
wuliqunyy | 0:be95bfb06686 | 26 | else |
wuliqunyy | 0:be95bfb06686 | 27 | { |
wuliqunyy | 0:be95bfb06686 | 28 | _ADCperiodInSync = false; |
wuliqunyy | 0:be95bfb06686 | 29 | led4 = 0; |
wuliqunyy | 0:be95bfb06686 | 30 | } |
wuliqunyy | 0:be95bfb06686 | 31 | _ADC_idx++; |
wuliqunyy | 0:be95bfb06686 | 32 | _ADCBufferFull = false; |
wuliqunyy | 0:be95bfb06686 | 33 | |
wuliqunyy | 0:be95bfb06686 | 34 | } |
wuliqunyy | 0:be95bfb06686 | 35 | else |
wuliqunyy | 0:be95bfb06686 | 36 | { |
wuliqunyy | 0:be95bfb06686 | 37 | _ADCBufferFull = true; |
wuliqunyy | 0:be95bfb06686 | 38 | led4 = 0; |
wuliqunyy | 0:be95bfb06686 | 39 | } |
wuliqunyy | 0:be95bfb06686 | 40 | } |
wuliqunyy | 0:be95bfb06686 | 41 | |
wuliqunyy | 0:be95bfb06686 | 42 | bool test_ehp_reg::_getADCBufferFull() |
wuliqunyy | 0:be95bfb06686 | 43 | { |
wuliqunyy | 0:be95bfb06686 | 44 | return _ADCBufferFull; |
wuliqunyy | 0:be95bfb06686 | 45 | } |
wuliqunyy | 0:be95bfb06686 | 46 | |
wuliqunyy | 0:be95bfb06686 | 47 | |
wuliqunyy | 0:be95bfb06686 | 48 | void test_ehp_reg::configure() |
wuliqunyy | 0:be95bfb06686 | 49 | { |
wuliqunyy | 0:be95bfb06686 | 50 | /****************** |
wuliqunyy | 0:be95bfb06686 | 51 | GPIO input to capture ADC. |
wuliqunyy | 0:be95bfb06686 | 52 | IO arrangement |
wuliqunyy | 0:be95bfb06686 | 53 | |
wuliqunyy | 0:be95bfb06686 | 54 | mbed_pin30 -> p0.4 -> ADC_OUT[0] |
wuliqunyy | 0:be95bfb06686 | 55 | mbed_pin29 -> p0.5 -> ADC_OUT[1] |
wuliqunyy | 0:be95bfb06686 | 56 | mbed_pin8 -> p0.6 -> ADC_OUT[2] |
wuliqunyy | 0:be95bfb06686 | 57 | mbed_pin7 -> p0.7 -> ADC_OUT[3] |
wuliqunyy | 0:be95bfb06686 | 58 | mbed_pin6 -> p0.8 -> ADC_OUT[4] |
wuliqunyy | 0:be95bfb06686 | 59 | mbed_pin5 -> p0.9 -> ADC_OUT[5] |
wuliqunyy | 0:be95bfb06686 | 60 | mbed_pin13 -> p0.15 -> ADC_OUT[6] |
wuliqunyy | 0:be95bfb06686 | 61 | mbed_pin14 -> p0.16 -> ADC_OUT[7] |
wuliqunyy | 0:be95bfb06686 | 62 | mbed_pin12 -> p0.17 -> ADC_OUT[8] |
wuliqunyy | 0:be95bfb06686 | 63 | mbed_pin11 -> p0.18 -> ADC_OUT[9] |
wuliqunyy | 0:be95bfb06686 | 64 | mbed_pin17 -> p0.25 -> ADC_OUT[10] |
wuliqunyy | 0:be95bfb06686 | 65 | mbed_pin18 -> p0.26 -> ADC_OUT[11] |
wuliqunyy | 0:be95bfb06686 | 66 | *******************/ |
wuliqunyy | 0:be95bfb06686 | 67 | |
wuliqunyy | 0:be95bfb06686 | 68 | /****Set the port to GPIO***/ |
wuliqunyy | 0:be95bfb06686 | 69 | /*p0.4 p0.5 p0.6 p0.7 p0.8 p0.9 p0.15*/ |
wuliqunyy | 0:be95bfb06686 | 70 | LPC_PINCON->PINSEL0 &= ~( (3UL << 8 ) | (3UL << 10) | (3UL << 12) | (3UL << 14) | |
wuliqunyy | 0:be95bfb06686 | 71 | (3UL << 16) | (3UL << 18) | (3UL << 30) ); |
wuliqunyy | 0:be95bfb06686 | 72 | /*p0.16 p0.17 p0.18 p0.25 p0.26*/ |
wuliqunyy | 0:be95bfb06686 | 73 | LPC_PINCON->PINSEL1 &= ~( (3UL << 0) | (3UL << 2) | (3UL << 4) | (3UL << 18) | (3UL << 20) ); |
wuliqunyy | 0:be95bfb06686 | 74 | |
wuliqunyy | 0:be95bfb06686 | 75 | /****Set the GPIO as input***/ |
wuliqunyy | 0:be95bfb06686 | 76 | LPC_GPIO0->FIODIR &= ~( (1UL << 4) | (1UL << 5) | (1UL << 6) | (1UL << 7) | |
wuliqunyy | 0:be95bfb06686 | 77 | (1UL << 8) | (1UL << 9) | (1UL << 15) | (1UL << 16) | |
wuliqunyy | 0:be95bfb06686 | 78 | (1UL << 17) | (1UL << 18) | (1UL << 25) | (1UL << 26) ); |
wuliqunyy | 0:be95bfb06686 | 79 | |
wuliqunyy | 0:be95bfb06686 | 80 | _ptr_ADC_arr = new uint32_t[EHP_BUFF_SIZE]; |
wuliqunyy | 0:be95bfb06686 | 81 | _ADC_idx = 0; |
wuliqunyy | 0:be95bfb06686 | 82 | _ADCBufferFull = false; |
wuliqunyy | 0:be95bfb06686 | 83 | _ADCperiodInSync = false; |
wuliqunyy | 0:be95bfb06686 | 84 | |
wuliqunyy | 0:be95bfb06686 | 85 | setUpTimerBuffer(); |
wuliqunyy | 0:be95bfb06686 | 86 | configureTimer(); |
wuliqunyy | 0:be95bfb06686 | 87 | |
wuliqunyy | 0:be95bfb06686 | 88 | } |
wuliqunyy | 0:be95bfb06686 | 89 | |
wuliqunyy | 0:be95bfb06686 | 90 | |
wuliqunyy | 0:be95bfb06686 | 91 | uint32_t test_ehp_reg::_readADC() |
wuliqunyy | 0:be95bfb06686 | 92 | { |
wuliqunyy | 0:be95bfb06686 | 93 | |
wuliqunyy | 0:be95bfb06686 | 94 | uint32_t ioRead; |
wuliqunyy | 0:be95bfb06686 | 95 | uint32_t adcRead; |
wuliqunyy | 0:be95bfb06686 | 96 | ioRead = LPC_GPIO0->FIOPIN; |
wuliqunyy | 0:be95bfb06686 | 97 | adcRead = ( ( ioRead & (1 << 4 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 98 | ( ( ioRead & (1 << 5 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 99 | ( ( ioRead & (1 << 6 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 100 | ( ( ioRead & (1 << 7 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 101 | ( ( ioRead & (1 << 8 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 102 | ( ( ioRead & (1 << 9 ) ) >> 4 ) | |
wuliqunyy | 0:be95bfb06686 | 103 | ( ( ioRead & (1 << 15 ) ) >> 9 ) | |
wuliqunyy | 0:be95bfb06686 | 104 | ( ( ioRead & (1 << 16 ) ) >> 9 ) | |
wuliqunyy | 0:be95bfb06686 | 105 | ( ( ioRead & (1 << 17 ) ) >> 9 ) | |
wuliqunyy | 0:be95bfb06686 | 106 | ( ( ioRead & (1 << 18 ) ) >> 9 ) | |
wuliqunyy | 0:be95bfb06686 | 107 | ( ( ioRead & (1 << 25 ) ) >> 15 ) | |
wuliqunyy | 0:be95bfb06686 | 108 | ( ( ioRead & (1 << 26 ) ) >> 15 ) ; |
wuliqunyy | 0:be95bfb06686 | 109 | return adcRead; |
wuliqunyy | 0:be95bfb06686 | 110 | } |
wuliqunyy | 0:be95bfb06686 | 111 | |
wuliqunyy | 0:be95bfb06686 | 112 | void test_ehp_reg::run() |
wuliqunyy | 0:be95bfb06686 | 113 | { |
wuliqunyy | 0:be95bfb06686 | 114 | _interruptTrigger.rise(callback(this, &test_ehp_reg::_handleADCTriggerPinRiseIRQ)); /* rising edge IRQ routine enbale*/ |
wuliqunyy | 0:be95bfb06686 | 115 | while( (!_getADCBufferFull()) || (!getTimerBufferFull())) |
wuliqunyy | 0:be95bfb06686 | 116 | { |
wuliqunyy | 0:be95bfb06686 | 117 | ; |
wuliqunyy | 0:be95bfb06686 | 118 | } |
wuliqunyy | 0:be95bfb06686 | 119 | } |
wuliqunyy | 0:be95bfb06686 | 120 | |
wuliqunyy | 0:be95bfb06686 | 121 | void test_ehp_reg::stop() |
wuliqunyy | 0:be95bfb06686 | 122 | { |
wuliqunyy | 0:be95bfb06686 | 123 | stopTimer(); |
wuliqunyy | 0:be95bfb06686 | 124 | _interruptTrigger.rise(NULL); /*disable pin interrupt*/ |
wuliqunyy | 0:be95bfb06686 | 125 | // led4 = 0; |
wuliqunyy | 0:be95bfb06686 | 126 | } |
wuliqunyy | 0:be95bfb06686 | 127 | |
wuliqunyy | 0:be95bfb06686 | 128 | void test_ehp_reg::release() |
wuliqunyy | 0:be95bfb06686 | 129 | { |
wuliqunyy | 0:be95bfb06686 | 130 | releaseTimerBuffer(); |
wuliqunyy | 0:be95bfb06686 | 131 | if( _ptr_ADC_arr != NULL) |
wuliqunyy | 0:be95bfb06686 | 132 | { |
wuliqunyy | 0:be95bfb06686 | 133 | delete []_ptr_ADC_arr; |
wuliqunyy | 0:be95bfb06686 | 134 | _ptr_ADC_arr = NULL; |
wuliqunyy | 0:be95bfb06686 | 135 | } |
wuliqunyy | 0:be95bfb06686 | 136 | } |
wuliqunyy | 0:be95bfb06686 | 137 | |
wuliqunyy | 0:be95bfb06686 | 138 | uint32_t* test_ehp_reg::getResult() |
wuliqunyy | 0:be95bfb06686 | 139 | { |
wuliqunyy | 0:be95bfb06686 | 140 | // return getTimerBufferPointer(); |
wuliqunyy | 0:be95bfb06686 | 141 | return _ptr_ADC_arr; |
wuliqunyy | 0:be95bfb06686 | 142 | |
wuliqunyy | 0:be95bfb06686 | 143 | } |
wuliqunyy | 0:be95bfb06686 | 144 | |
wuliqunyy | 0:be95bfb06686 | 145 | uint32_t test_ehp_reg::getBufferSize() |
wuliqunyy | 0:be95bfb06686 | 146 | { |
wuliqunyy | 0:be95bfb06686 | 147 | return EHP_BUFF_SIZE; |
wuliqunyy | 0:be95bfb06686 | 148 | } |
wuliqunyy | 0:be95bfb06686 | 149 | |
wuliqunyy | 0:be95bfb06686 | 150 | char* test_ehp_reg::getResultStatus() |
wuliqunyy | 0:be95bfb06686 | 151 | { |
wuliqunyy | 0:be95bfb06686 | 152 | return "Test PASS!!!"; |
wuliqunyy | 0:be95bfb06686 | 153 | } |