
lab 1 code
Dependencies: CMSIS-DSP_for_STM32F746G BSP_DISCO_F746NG
Diff: main.cpp
- Revision:
- 15:83e40ccc1b1f
- Parent:
- 14:18f159d48340
- Child:
- 16:b7dca59ab076
--- a/main.cpp Mon Dec 30 18:34:21 2019 +0000 +++ b/main.cpp Mon Dec 30 20:18:17 2019 +0000 @@ -44,7 +44,7 @@ volatile uint32_t audio_rec_buffer_state = BUFFER_OFFSET_NONE; static void Erase_Trace(uint16_t Xpos, uint16_t L_Ypos, uint16_t R_Ypos, uint16_t Length); static void Draw_Trace(uint16_t Xpos, uint16_t L_Ypos, uint16_t R_Ypos, uint16_t* Mem_start, uint16_t Length); -static void Audio_to_Float(uint16_t* buffer_in, uint16_t* L_out, uint16_t * R_out, uint16_t Length); +static void Audio_to_Float(uint32_t* buffer_in, float* L_out, float* R_out, uint16_t Length); static void Float_to_Audio(uint16_t* L_in, uint16_t * R_in, uint16_t* buffer_out, uint16_t Length); /* To do converstion to float */ @@ -112,12 +112,20 @@ Draw_Trace(OSC_START_X_POS, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, (uint16_t *) AUDIO_BUFFER_IN, HALF_AUDIO_BLOCK_SIZE); /* Convert data to floating point representation for processing */ - Audio_to_Float((uint16_t *) AUDIO_BUFFER_IN, (uint16_t *) L_channel_float, (uint16_t *) R_channel_float, HALF_AUDIO_BLOCK_SIZE); + Audio_to_Float((uint32_t *) AUDIO_BUFFER_IN, (float*) &L_channel_float, (float*) &R_channel_float, HALF_AUDIO_BLOCK_SIZE); - Float_to_Audio((uint16_t *) L_channel_float, (uint16_t *) R_channel_float, (uint16_t *) Processed_audio, HALF_AUDIO_BLOCK_SIZE); + Float_to_Audio((uint16_t *) &L_channel_float, (uint16_t *) &R_channel_float, (uint16_t *) Processed_audio, HALF_AUDIO_BLOCK_SIZE); + + uint32_t data_value = *((uint32_t*) AUDIO_BUFFER_IN); + int16_t L_audio_value = (int16_t) ((data_value >> 16) & 0xFFFF); + //L_channel_float[1] = 10; + sprintf(buf, "Lf:%10.2f Li:%6d", L_channel_float[0], L_audio_value); + BSP_LCD_DisplayStringAt(0, 155, (uint8_t *) buf, LEFT_MODE); + /* Copy recorded 1st half block into the audio buffer that goes out */ - memcpy((uint16_t *)(AUDIO_BUFFER_OUT), (uint16_t *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE); + //memcpy((uint16_t *)(AUDIO_BUFFER_OUT), (uint16_t *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE); + memcpy((uint16_t *)(AUDIO_BUFFER_OUT), (uint16_t *)(Processed_audio), AUDIO_BLOCK_SIZE); /* Capture the timing of the first half processing */ first_half_time = timer.read_us(); @@ -245,28 +253,39 @@ * @param Length: length of data to convert * @retval None */ -void Audio_to_Float(uint16_t* buffer_in, uint16_t* L_out, uint16_t * R_out, uint16_t Length) +void Audio_to_Float(uint32_t* buffer_in, float* L_out, float* R_out, uint16_t Length) { uint16_t i; uint32_t data_value; - uint16_t* audio_mem_address; - uint16_t* L_chan_mem_address; - uint16_t* R_chan_mem_address; + uint32_t* audio_mem_address; + float* L_chan_mem_address; + float* R_chan_mem_address; float L_audio_value; float R_audio_value; + int16_t L_audio_value_int; + for (i=0; i<Length; i++) { - audio_mem_address = (uint16_t*) buffer_in + i; - L_chan_mem_address = (uint16_t*) L_out + i; - R_chan_mem_address = (uint16_t*) R_out + i; - data_value = *((uint16_t*) audio_mem_address); + audio_mem_address = (uint32_t*) buffer_in + i; + L_chan_mem_address = (float*) L_out + i; + R_chan_mem_address = (float*) R_out + i; + data_value = *((uint32_t*) audio_mem_address); L_audio_value = (float) ((int16_t) ((data_value >> 16) & 0xFFFF)); + L_audio_value_int = ((int16_t) ((data_value >> 16) & 0xFFFF)); R_audio_value = (float) ((int16_t) (data_value & 0xFFFF)); - *L_chan_mem_address = L_audio_value; + *L_chan_mem_address = 2 * L_audio_value; + //*L_chan_mem_address = 20; *R_chan_mem_address = R_audio_value; } + + //sprintf(buf, "Lf:%10.2f Li:%6d", L_audio_value, data_value); + //L_audio_value_int = ((int16_t) (data_value & 0xFFFF)); + //L_audio_value_int = (int16_t) ((data_value >> 16) & 0xFFFF); + //sprintf(buf, "Lavi:%6d Li:%6d", L_audio_value_int, data_value); + //BSP_LCD_DisplayStringAt(0, 155, (uint8_t *) buf, LEFT_MODE); + } /**