
lab 1 code
Dependencies: CMSIS-DSP_for_STM32F746G BSP_DISCO_F746NG
Diff: main.cpp
- Revision:
- 9:f5b37c71856d
- Parent:
- 8:d1c41eca57f0
- Child:
- 10:a82b64ea1d11
--- a/main.cpp Sat Dec 28 23:26:48 2019 +0000 +++ b/main.cpp Sun Dec 29 04:15:45 2019 +0000 @@ -1,3 +1,18 @@ +/** + ****************************************************************************** + * @file main.c + * @author Brian Mazzeo + * @brief This file provides a set of code for signal processing in 487. + * Parts are taken from example code from STMIcroelectronics + ****************************************************************************** + * @attention + * This code was specifically developed for 487 signal processing. + * + * + ****************************************************************************** + */ + + #include "mbed.h" #include "stm32746g_discovery_audio.h" #include "stm32746g_discovery_sdram.h" @@ -10,13 +25,11 @@ } BUFFER_StateTypeDef; -// #define AUDIO_BLOCK_SIZE ((uint32_t)512) #define AUDIO_BLOCK_SIZE ((uint32_t)256) -//#define SDRAM_DEVICE_ADDR_AUDIO_MEM ((uint32_t)0xC0200000) -#define SDRAM_DEVICE_ADDR_AUDIO_MEM ((uint32_t)0xC0400000) -#define AUDIO_BUFFER_IN SDRAM_DEVICE_ADDR_AUDIO_MEM -#define AUDIO_BUFFER_OUT (AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE * 2)) +#define SDRAM_DEVICE_ADDR_AUDIO_MEM ((uint32_t)0xC0400000) +#define AUDIO_BUFFER_IN SDRAM_DEVICE_ADDR_AUDIO_MEM +#define AUDIO_BUFFER_OUT (AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE * 2)) #define OSC_START_X_POS 20 #define OSC_LINE_SIZE 256 @@ -24,10 +37,16 @@ #define R_CHANNEL_Y_POS 220 #define AUDIO_DRAW_LIMIT 30 +Timer timer; + 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); +uint32_t counter = 0; +char buf[10]; +int first_half_time, second_half_time, total_time; + int main() { @@ -38,20 +57,13 @@ BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - BSP_LCD_SetBackColor(LCD_COLOR_BLACK); BSP_LCD_SetTextColor(LCD_COLOR_ORANGE); BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"487 Mic Audio Test Code", LEFT_MODE); BSP_LCD_DisplayStringAt(0, L_CHANNEL_Y_POS, (uint8_t *)"L", LEFT_MODE); BSP_LCD_DisplayStringAt(0, R_CHANNEL_Y_POS, (uint8_t *)"R", LEFT_MODE); - printf("\n\nAUDIO LOOPBACK EXAMPLE START:\n"); - BSP_AUDIO_IN_OUT_Init(INPUT_DEVICE_DIGITAL_MICROPHONE_2, OUTPUT_DEVICE_HEADPHONE, DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR); - printf("AUDIO loop from digital micro (U20 & U21 components on board) to headphone (CN10 jack connector)\n"); - - // BSP_LCD_DisplayStringAt(10, 20, (uint8_t *)"SDRAM Initialization", LEFT_MODE); - /* Initialize SDRAM buffers */ BSP_SDRAM_Init(); @@ -72,47 +84,60 @@ printf("BSP_AUDIO_OUT_Play error\n"); } - - BSP_LCD_SetTextColor(LCD_COLOR_BLUE); - uint32_t counter; - counter = 0; - - char buf[10]; - + timer.start(); while (1) { /* First Half */ + /* Wait end of half block recording */ + //while (audio_rec_buffer_state == BUFFER_OFFSET_HALF) { + //} + //audio_rec_buffer_state = BUFFER_OFFSET_NONE; - /* Wait end of half block recording */ - while (audio_rec_buffer_state == BUFFER_OFFSET_HALF) { - } - audio_rec_buffer_state = BUFFER_OFFSET_NONE; + while (audio_rec_buffer_state == BUFFER_OFFSET_NONE) {} + + total_time = timer.read_us(); + timer.reset(); /* Copy recorded 1st half block */ memcpy((uint16_t *)(AUDIO_BUFFER_OUT), (uint16_t *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE); /* Plot trace of first half block recording */ - Erase_Trace(OSC_START_X_POS, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, AUDIO_BLOCK_SIZE); - Draw_Trace(OSC_START_X_POS, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, (uint16_t *) AUDIO_BUFFER_IN, AUDIO_BLOCK_SIZE); + Erase_Trace(OSC_START_X_POS, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, 300); + Draw_Trace(OSC_START_X_POS, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, (uint16_t *) AUDIO_BUFFER_IN, 300); + + first_half_time = timer.read_us(); /* Second Half */ /* Wait end of one block recording */ - while (audio_rec_buffer_state == BUFFER_OFFSET_FULL) { - } - audio_rec_buffer_state = BUFFER_OFFSET_NONE; + //while (audio_rec_buffer_state == BUFFER_OFFSET_FULL) { + //} + //audio_rec_buffer_state = BUFFER_OFFSET_NONE; + while (audio_rec_buffer_state == BUFFER_OFFSET_HALF) {} + /* Copy recorded 2nd half block */ memcpy((uint16_t *)(AUDIO_BUFFER_OUT + (AUDIO_BLOCK_SIZE)), (uint16_t *)(AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE)), AUDIO_BLOCK_SIZE); /* Plot second half recording */ - Erase_Trace(OSC_START_X_POS+AUDIO_BLOCK_SIZE, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, 50); - Draw_Trace(OSC_START_X_POS+AUDIO_BLOCK_SIZE, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, (uint16_t *) AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE), 50); + //Erase_Trace(OSC_START_X_POS+OSC_LINE_SIZE, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, 50); + //Draw_Trace(OSC_START_X_POS+OSC_LINE_SIZE, L_CHANNEL_Y_POS, R_CHANNEL_Y_POS, (uint16_t *) AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE), 50); counter++; sprintf(buf, "%d", counter); BSP_LCD_SetTextColor(LCD_COLOR_RED); - BSP_LCD_DisplayStringAt(0, 40, (uint8_t *) buf, LEFT_MODE); + BSP_LCD_DisplayStringAt(0, 46, (uint8_t *) buf, LEFT_MODE); + + second_half_time = timer.read_us(); + + sprintf(buf, "%10d", first_half_time); + BSP_LCD_DisplayStringAt(0, 20, (uint8_t *) buf, LEFT_MODE); + sprintf(buf, "%10d", second_half_time); + BSP_LCD_DisplayStringAt(100, 20, (uint8_t *) buf, LEFT_MODE); + sprintf(buf, "%10d", total_time); + BSP_LCD_DisplayStringAt(200, 20, (uint8_t *) buf, LEFT_MODE); + + audio_rec_buffer_state = BUFFER_OFFSET_NONE; } }