Data sample and LCD plot

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG SDRAM_DISCO_F746NG mbed

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;
+}