Liqun Wu / Mbed 2 deprecated 90418_mbed_controller

Dependencies:   mbed

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?

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