Nathan Yonkee
/
Nucleo_sinewave_output_copy
init
main.cpp@10:46a4cf51ee38, 2018-03-02 (annotated)
- Committer:
- Nathan Yonkee
- Date:
- Fri Mar 02 07:16:49 2018 -0700
- Revision:
- 10:46a4cf51ee38
- Parent:
- 8:6c2a12d6b1bf
remove mbed-os
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nathan Yonkee |
8:6c2a12d6b1bf | 1 | #include "mbed.h" |
Nathan Yonkee |
8:6c2a12d6b1bf | 2 | #include "analogout_api.h" |
Nathan Yonkee |
8:6c2a12d6b1bf | 3 | #include "mbed-os/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.h" |
Nathan Yonkee |
8:6c2a12d6b1bf | 4 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 5 | #if !DEVICE_ANALOGOUT |
Nathan Yonkee |
8:6c2a12d6b1bf | 6 | #error You cannot use this example as the AnalogOut is not supported on this device. |
Nathan Yonkee |
8:6c2a12d6b1bf | 7 | #else |
Nathan Yonkee |
8:6c2a12d6b1bf | 8 | AnalogOut sinOut( PA_4 ); // channel 1 |
Nathan Yonkee |
8:6c2a12d6b1bf | 9 | #endif |
Nathan Yonkee |
8:6c2a12d6b1bf | 10 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 11 | #define PI (3.141592653589793238462f) |
Nathan Yonkee |
8:6c2a12d6b1bf | 12 | #define AMPLITUDE (0.3) // x * 3.3V |
Nathan Yonkee |
8:6c2a12d6b1bf | 13 | #define PHASE (PI * 1.0f) // 2*pi is one period |
Nathan Yonkee |
8:6c2a12d6b1bf | 14 | #define OFFSET (0.5f) |
Nathan Yonkee |
8:6c2a12d6b1bf | 15 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 16 | // Configuration for sinewave output |
Nathan Yonkee |
8:6c2a12d6b1bf | 17 | /* #define BUFFER_SIZE (540U) */ |
Nathan Yonkee |
8:6c2a12d6b1bf | 18 | #define BUFFER_SIZE (1024U) |
Nathan Yonkee |
8:6c2a12d6b1bf | 19 | unsigned int buffer[BUFFER_SIZE]; |
Nathan Yonkee |
8:6c2a12d6b1bf | 20 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 21 | void calculate_sinewave( void ); |
Nathan Yonkee |
8:6c2a12d6b1bf | 22 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 23 | int main() |
Nathan Yonkee |
8:6c2a12d6b1bf | 24 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 25 | calculate_sinewave(); |
Nathan Yonkee |
8:6c2a12d6b1bf | 26 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 27 | const int stepBuffN = 12; |
Nathan Yonkee |
8:6c2a12d6b1bf | 28 | float stepBuff[stepBuffN] = {}; |
Nathan Yonkee |
8:6c2a12d6b1bf | 29 | AnalogOut stepOut( PA_5 ); |
Nathan Yonkee |
8:6c2a12d6b1bf | 30 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 31 | for( int i = 0; i < stepBuffN; i += 3 ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 32 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 33 | stepBuff[i] = 3.0f / 3.3f; |
Nathan Yonkee |
8:6c2a12d6b1bf | 34 | stepBuff[i + 1] = 2.0f / 3.3f; |
Nathan Yonkee |
8:6c2a12d6b1bf | 35 | stepBuff[i + 2] = 1.0f / 3.3f; |
Nathan Yonkee |
8:6c2a12d6b1bf | 36 | }; |
Nathan Yonkee |
8:6c2a12d6b1bf | 37 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 38 | stepOut = stepBuff[0]; |
Nathan Yonkee |
8:6c2a12d6b1bf | 39 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 40 | core_util_critical_section_enter(); |
Nathan Yonkee |
8:6c2a12d6b1bf | 41 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 42 | HAL_SuspendTick(); |
Nathan Yonkee |
8:6c2a12d6b1bf | 43 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 44 | core_util_critical_section_exit(); |
Nathan Yonkee |
8:6c2a12d6b1bf | 45 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 46 | dac_t* obj = &sinOut._dac; |
Nathan Yonkee |
8:6c2a12d6b1bf | 47 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 48 | DAC_HandleTypeDef dacHandle = obj->handle; |
Nathan Yonkee |
8:6c2a12d6b1bf | 49 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 50 | uint32_t dacChannel = obj->channel; |
Nathan Yonkee |
8:6c2a12d6b1bf | 51 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 52 | for( unsigned int i = 0; i < BUFFER_SIZE; i++ ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 53 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 54 | buffer[i] *= 0xFFF; |
Nathan Yonkee |
8:6c2a12d6b1bf | 55 | } |
Nathan Yonkee |
8:6c2a12d6b1bf | 56 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 57 | while( 1 ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 58 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 59 | // sinewave output |
Nathan Yonkee |
8:6c2a12d6b1bf | 60 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 61 | for( int i = 0; i < BUFFER_SIZE; ++i ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 62 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 63 | HAL_DAC_SetValue( &dacHandle, dacChannel, DAC_ALIGN_12B_R, buffer[i] ); |
Nathan Yonkee |
8:6c2a12d6b1bf | 64 | HAL_DAC_Start( &dacHandle, dacChannel ); |
Nathan Yonkee |
8:6c2a12d6b1bf | 65 | } |
Nathan Yonkee |
8:6c2a12d6b1bf | 66 | } |
Nathan Yonkee |
8:6c2a12d6b1bf | 67 | } |
Nathan Yonkee |
8:6c2a12d6b1bf | 68 | |
Nathan Yonkee |
8:6c2a12d6b1bf | 69 | // Create the sinewave buffer |
Nathan Yonkee |
8:6c2a12d6b1bf | 70 | void calculate_sinewave( void ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 71 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 72 | for( unsigned int i = 0; i < BUFFER_SIZE; i++ ) |
Nathan Yonkee |
8:6c2a12d6b1bf | 73 | { |
Nathan Yonkee |
8:6c2a12d6b1bf | 74 | float rads = 2.0f * ( PI * i ) / ( ( float )BUFFER_SIZE ); // Convert degree in radian |
Nathan Yonkee |
8:6c2a12d6b1bf | 75 | buffer[i] = ( unsigned int )( 0xFFF * AMPLITUDE * cos( rads + PHASE ) + 0xFFF * OFFSET ); |
Nathan Yonkee |
8:6c2a12d6b1bf | 76 | } |
Nathan Yonkee |
8:6c2a12d6b1bf | 77 | } |