MY TRAIAL (1)

Dependencies:   FATFileSystem GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP mbed-rtos mbed

Fork of GR-PEACH_NTSC_in_2ch_MOD_try by Hirofumi Inomata

I put an OVERVIEW in the blow URL. https://developer.mbed.org/users/digiponta/notebook/my-trial-ar--vr-2-eyes-display-goes-by-a-gr-peach/

Revision:
6:3cb7758c3f17
Parent:
5:f6df6a4c32a7
Child:
7:2fb4359e5ea6
--- a/main.cpp	Sun Sep 11 13:38:32 2016 +0000
+++ b/main.cpp	Wed Sep 14 10:53:51 2016 +0000
@@ -1,5 +1,5 @@
 #include "mbed.h"
-#include "SDFileSystem.h"
+#include "SDFileSystem_GR_PEACH.h"
 #include "FATFileSystem.h"
 #include "JPEG_Converter.h"
 #include "DisplayBace.h"
@@ -7,7 +7,9 @@
 
 DigitalOut led1(LED1);
 Serial pc(USBTX, USBRX);
-SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");
+// SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");
+SDFileSystem_GR_PEACH sd( "sd" );
+
 FILE *rd_fp = NULL;
 FILE *wr_fp = NULL;
 long fsize = 0;
@@ -167,7 +169,6 @@
             printf("Line %d, error %d\n", __LINE__, error);
             mbed_die();
         }
-
     } else {
         ;
     }
@@ -189,7 +190,6 @@
     }
 }
 
-
 /****** Video ******/
 static void Init_Video(void) {
     DisplayBase::graphics_error_t error;
@@ -282,12 +282,28 @@
     }
 }
 
+// キャッシュインバリデート関数を追加
+static void dcache_invalid(void * p_buf, uint32_t size){
+    uint32_t start_addr = (uint32_t)p_buf & 0xFFFFFFE0;
+    uint32_t end_addr   = (uint32_t)p_buf + size;
+    uint32_t addr;
+ 
+    /* Data cache invalid */
+    for (addr = start_addr; addr < end_addr; addr += 0x20) {
+        __v7_inv_dcache_mva((void *)addr);
+    }
+}
+
 /****** main ******/
 int main(void) {
     JPEG_Converter  decoder;
     JPEG_Converter::bitmap_buff_info_t  aBitmapData;
     DisplayBase::graphics_error_t error;
     size_t EncodeSize;
+
+    while( !sd.connected() ) {
+         Thread::wait(500);
+    }
     
     /* Initialization of LCD */
     Init_LCD_Display();    /* When using LCD, please call before than Init_Video(). */
@@ -335,6 +351,7 @@
     Thread::wait(200);
     lcd_cntrst.write(1.0);
 
+
     dir = opendir( "/sd" );
     for ( imgCnt=0; ; imgCnt++) {
         dp = readdir( dir );
@@ -353,12 +370,10 @@
 #if 1
             for ( vfield_count_0=0; vfield_count_0 == 0; ) {
             }
+
             for ( vfield_count_1=0; vfield_count_1 == 0; ) {
             }
-          
 #if 1
-            dcache_clean(user_frame_buffer0, sizeof(user_frame_buffer0));
-            dcache_clean(user_frame_buffer1, sizeof(user_frame_buffer1));
 
             Thread::wait(500);
            
@@ -369,7 +384,8 @@
             aBitmapData.buffer_address  = (void *)user_frame_buffer0;
             pc.printf("File encode start\n");
             // JPEG_Converter
-
+            
+            dcache_invalid(user_frame_buffer1, sizeof(user_frame_buffer1));
             if (decoder.encode(&aBitmapData, user_frame_buffer1, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) {
                 pc.printf("File encode done %dbyte, %d\n", EncodeSize, imgCnt );
                                 
@@ -390,7 +406,7 @@
 #endif
 
             Thread::wait(500); 
-            NVIC_SystemReset();          
+            // NVIC_SystemReset();          
         
             /* Video write process start */
             error = Display.Video_Start( DisplayBase::VIDEO_INPUT_CHANNEL_0 );
@@ -423,9 +439,14 @@
                 }
             }
             
+            
             sprintf( fname, "/sd/img_%04d.jpg", viewCnt++ );
             if ( viewCnt >= imgCnt ) viewCnt = 0;
             pc.printf("File read start %s v=%d, i=%d\n", fname, viewCnt, imgCnt );
+
+            // dcache_invalid(user_frame_buffer1, sizeof(user_frame_buffer1));
+            // dcache_invalid(user_frame_buffer0, sizeof(user_frame_buffer0));
+           
             rd_fp = fopen( fname, "r" );
             if (rd_fp == NULL ) {
                 pc.printf("can't open the file\n" ); 
@@ -448,12 +469,13 @@
                 user_frame_buffer1[i] = (unsigned char)cc;
             }
 #else
-            size_t len = fread(user_frame_buffer1, sizeof(char), (LCD_PIXEL_WIDTH * LCD_PIXEL_HEIGHT * 4), rd_fp);  
+            size_t len = fread(user_frame_buffer1, sizeof(char), sizeof(user_frame_buffer1), rd_fp);  
             pc.printf( "len = %d\n", len );
 #endif 
             fclose(rd_fp);
             pc.printf("File read done\n");
 
+
              //YCbCr setting
             aBitmapData.width           = LCD_PIXEL_WIDTH;
             aBitmapData.height          = LCD_PIXEL_HEIGHT;