Data sample and LCD plot
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG SDRAM_DISCO_F746NG mbed
Diff: main.cpp
- Revision:
- 0:b3e6088c873f
- Child:
- 1:c3c61d08f31b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Feb 10 20:19:36 2018 +0000 @@ -0,0 +1,159 @@ +#include "mbed.h" +#include <string.h> +#include "LCD_DISCO_F746NG.h" +#include "SDRAM_DISCO_F746NG.h" + +LCD_DISCO_F746NG lcd; +SDRAM_DISCO_F746NG sdram; + +#define BUFFER_SIZE ((uint32_t)0x0001) +#define WRITE_READ_ADDR ((uint32_t)0x0800) + +void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Offset); +uint8_t CompareBuffer(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength); + +Ticker ms_tick; +uint32_t idx; +uint32_t WRITE_READ_ADDR; (()0x0800) + +void onTimingEventTicker(void) +{ + // this code will run every timing event + uint32_t result; + uint32_t y_coord; + + AnalogIn ain(A0); + + result = (0x0000 << 16) | ain.read_u16(); + + // Fill the write buffer + FillBuffer(WriteBuffer, BUFFER_SIZE, result); + + // Write buffer + sdram.WriteData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR + idx, WriteBuffer, BUFFER_SIZE); + + idx++; +} + +uint32_t PlotData(void) +{ + // this code will run every timing event + uint32_t result; + uint32_t y_coord; + + AnalogIn ain(A0); + + if (x_coord == 0) { lcd.Clear(LCD_COLOR_BLUE); } + + result = (0x0000 << 16) | ain.read_u16(); + + y_coord=(272.0*result)/16384.0; + + + if (x_coord < 480) { x_coord++; } else { x_coord=0; } + + //snprintf(my_str, 50,"Result = %f\0", result/4096.0); + //snprintf(my_str, 50,"Loops = %i\0", loops); + + //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)my_str, CENTER_MODE); + + // Plot loops,y_coord + lcd.DrawHLine(loops,y_coord,1); + +} + +int main() { + + uint32_t WriteBuffer[BUFFER_SIZE]; + uint32_t ReadBuffer[BUFFER_SIZE]; + FMC_SDRAM_CommandTypeDef SDRAMCommandStructure; + + // # of samples + idx=0; + + // turn on 100 us interrupt + ms_tick.attach_us(onTimingEventTicker,100); + + lcd.Clear(LCD_COLOR_BLUE); + lcd.SetBackColor(LCD_COLOR_BLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + + // Issue self-refresh command to SDRAM device + SDRAMCommandStructure.CommandMode=FMC_SDRAM_CMD_SELFREFRESH_MODE; + SDRAMCommandStructure.CommandTarget=FMC_SDRAM_CMD_TARGET_BANK2; + SDRAMCommandStructure.AutoRefreshNumber=1; + SDRAMCommandStructure.ModeRegisterDefinition = 0; + + while(1) { + + // Measure 19200 values (1.920 s time) + while(idx<19200) { + // Wait while the data is collected + } + + // Read back data from the SDRAM memory + sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR + idx, ReadBuffer, BUFFER_SIZE); + pc.printf("\nRead data DONE\n"); + + + // Read back data from the SDRAM memory +// sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, ReadBuffer, BUFFER_SIZE); +// pc.printf("\nRead data DONE\n"); + + // Checking data integrity +// if (CompareBuffer(WriteBuffer, ReadBuffer, BUFFER_SIZE) != 0) +// { +// led1 = !led1; +// pc.printf("Write/Read buffers are different\n"); +// } +// else +// { +// led1 = !led1; +// pc.printf("Write/Read buffers are identical\n"); +// } + +// wait(1); + + } +} + +/** + * @brief Fills buffer with user predefined data. + * @param pBuffer: pointer on the buffer to fill + * @param BufferLength: size of the buffer to fill + * @param Value: first value to fill on the buffer + * @retval None + */ +void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Value) +{ + uint32_t tmpIndex = 0; + + /* Put in global buffer different values */ + for (tmpIndex = 0; tmpIndex < BufferLength; tmpIndex++ ) + { + pBuffer[tmpIndex] = tmpIndex + Value; + } +} + +/** + * @brief Compares two buffers. + * @param pBuffer1, pBuffer2: buffers to be compared. + * @param BufferLength: buffer's length + * @retval 0: pBuffer2 identical to pBuffer1 + * 1: pBuffer2 differs from pBuffer1 + */ +uint8_t CompareBuffer(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return 1; + } + + pBuffer1++; + pBuffer2++; + } + + return 0; +}