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
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/
main.cpp@1:fa4f4543bcdd, 2016-09-05 (annotated)
- Committer:
- digiponta
- Date:
- Mon Sep 05 11:01:11 2016 +0000
- Revision:
- 1:fa4f4543bcdd
- Parent:
- 0:f8cb87301ad8
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkato | 0:f8cb87301ad8 | 1 | #include "mbed.h" |
dkato | 0:f8cb87301ad8 | 2 | #include "DisplayBace.h" |
dkato | 0:f8cb87301ad8 | 3 | #include "rtos.h" |
dkato | 0:f8cb87301ad8 | 4 | |
dkato | 0:f8cb87301ad8 | 5 | #define VIDEO_YCBCR422 (0) |
dkato | 0:f8cb87301ad8 | 6 | #define VIDEO_RGB888 (1) |
dkato | 0:f8cb87301ad8 | 7 | #define VIDEO_RGB565 (2) |
dkato | 0:f8cb87301ad8 | 8 | |
dkato | 0:f8cb87301ad8 | 9 | /**** User Selection *********/ |
dkato | 0:f8cb87301ad8 | 10 | /** Camera setting **/ |
dkato | 0:f8cb87301ad8 | 11 | #define VIDEO_INPUT_FORMAT (VIDEO_YCBCR422) /* Select VIDEO_YCBCR422 or VIDEO_RGB888 or VIDEO_RGB565 */ |
dkato | 0:f8cb87301ad8 | 12 | #define VIDEO_PAL (0) /* Select 0(NTSC) or 1(PAL) If selecting VIDEO_CVBS, this parameter is not referenced.) */ |
dkato | 0:f8cb87301ad8 | 13 | /** LCD setting **/ |
dkato | 0:f8cb87301ad8 | 14 | #define LCD_TYPE (0) /* Select 0(4.3inch) or 1(7.1inch) */ |
dkato | 0:f8cb87301ad8 | 15 | /*****************************/ |
dkato | 0:f8cb87301ad8 | 16 | |
dkato | 0:f8cb87301ad8 | 17 | /** LCD shield config **/ |
dkato | 0:f8cb87301ad8 | 18 | #if (LCD_TYPE == 0) |
dkato | 0:f8cb87301ad8 | 19 | #include "LCD_shield_config_4_3inch.h" |
dkato | 0:f8cb87301ad8 | 20 | #else |
dkato | 0:f8cb87301ad8 | 21 | #include "LCD_shield_config_7_1inch.h" |
dkato | 0:f8cb87301ad8 | 22 | #endif |
dkato | 0:f8cb87301ad8 | 23 | |
dkato | 0:f8cb87301ad8 | 24 | /** Video and Grapics (GRAPHICS_LAYER_0) parameter **/ |
dkato | 0:f8cb87301ad8 | 25 | /* NTSC or PAL */ |
dkato | 0:f8cb87301ad8 | 26 | #if VIDEO_PAL == 0 |
dkato | 0:f8cb87301ad8 | 27 | #define COL_SYS (DisplayBase::COL_SYS_NTSC_358) |
dkato | 0:f8cb87301ad8 | 28 | #else |
dkato | 0:f8cb87301ad8 | 29 | #define COL_SYS (DisplayBase::COL_SYS_PAL_443) |
dkato | 0:f8cb87301ad8 | 30 | #endif |
dkato | 0:f8cb87301ad8 | 31 | |
dkato | 0:f8cb87301ad8 | 32 | /* Video input and LCD layer 0 output */ |
dkato | 0:f8cb87301ad8 | 33 | #if VIDEO_INPUT_FORMAT == VIDEO_YCBCR422 |
dkato | 0:f8cb87301ad8 | 34 | #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_YCBCR422) |
dkato | 0:f8cb87301ad8 | 35 | #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_YCBCR422) |
dkato | 0:f8cb87301ad8 | 36 | #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_NON) |
dkato | 0:f8cb87301ad8 | 37 | #elif VIDEO_INPUT_FORMAT == VIDEO_RGB565 |
dkato | 0:f8cb87301ad8 | 38 | #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_RGB565) |
dkato | 0:f8cb87301ad8 | 39 | #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB565) |
dkato | 0:f8cb87301ad8 | 40 | #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT) |
dkato | 0:f8cb87301ad8 | 41 | #else |
dkato | 0:f8cb87301ad8 | 42 | #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_RGB888) |
dkato | 0:f8cb87301ad8 | 43 | #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB888) |
dkato | 0:f8cb87301ad8 | 44 | #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32BIT) |
dkato | 0:f8cb87301ad8 | 45 | #endif |
dkato | 0:f8cb87301ad8 | 46 | |
dkato | 0:f8cb87301ad8 | 47 | /* The size of the video input is adjusted to the LCD size. */ |
dkato | 0:f8cb87301ad8 | 48 | #define VIDEO_PIXEL_HW LCD_PIXEL_WIDTH |
dkato | 0:f8cb87301ad8 | 49 | #define VIDEO_PIXEL_VW LCD_PIXEL_HEIGHT |
dkato | 0:f8cb87301ad8 | 50 | |
dkato | 0:f8cb87301ad8 | 51 | /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128 |
dkato | 0:f8cb87301ad8 | 52 | in accordance with the frame buffer burst transfer mode. */ |
dkato | 0:f8cb87301ad8 | 53 | /* FRAME BUFFER Parameter GRAPHICS_LAYER_0 */ |
dkato | 0:f8cb87301ad8 | 54 | #if ( VIDEO_INPUT_FORMAT == VIDEO_YCBCR422 || VIDEO_INPUT_FORMAT == VIDEO_RGB565 ) |
dkato | 0:f8cb87301ad8 | 55 | #define FRAME_BUFFER_BYTE_PER_PIXEL (2u) |
dkato | 0:f8cb87301ad8 | 56 | #else |
dkato | 0:f8cb87301ad8 | 57 | #define FRAME_BUFFER_BYTE_PER_PIXEL (4u) |
dkato | 0:f8cb87301ad8 | 58 | #endif |
dkato | 0:f8cb87301ad8 | 59 | #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u) |
dkato | 0:f8cb87301ad8 | 60 | |
dkato | 0:f8cb87301ad8 | 61 | static DisplayBase Display; |
dkato | 0:f8cb87301ad8 | 62 | static DigitalOut lcd_pwon(P7_15); |
dkato | 0:f8cb87301ad8 | 63 | static DigitalOut lcd_blon(P8_1); |
dkato | 0:f8cb87301ad8 | 64 | static PwmOut lcd_cntrst(P8_15); |
dkato | 0:f8cb87301ad8 | 65 | static DigitalOut led_blue(LED_BLUE); |
dkato | 0:f8cb87301ad8 | 66 | |
dkato | 0:f8cb87301ad8 | 67 | #if defined(__ICCARM__) |
dkato | 0:f8cb87301ad8 | 68 | /* 32 bytes aligned */ |
dkato | 0:f8cb87301ad8 | 69 | #pragma data_alignment=32 |
dkato | 0:f8cb87301ad8 | 70 | static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]; |
dkato | 0:f8cb87301ad8 | 71 | #pragma data_alignment=4 |
dkato | 0:f8cb87301ad8 | 72 | #else |
dkato | 0:f8cb87301ad8 | 73 | /* 32 bytes aligned */ |
dkato | 0:f8cb87301ad8 | 74 | static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); |
dkato | 0:f8cb87301ad8 | 75 | #endif |
dkato | 0:f8cb87301ad8 | 76 | static bool graphics_init_end = false; |
dkato | 0:f8cb87301ad8 | 77 | |
dkato | 0:f8cb87301ad8 | 78 | /****** LCD ******/ |
dkato | 0:f8cb87301ad8 | 79 | static void Init_LCD_Display(void) { |
dkato | 0:f8cb87301ad8 | 80 | DisplayBase::graphics_error_t error; |
dkato | 0:f8cb87301ad8 | 81 | DisplayBase::lcd_config_t lcd_config; |
dkato | 0:f8cb87301ad8 | 82 | PinName lvds_pin[8] = { |
dkato | 0:f8cb87301ad8 | 83 | /* data pin */ |
dkato | 0:f8cb87301ad8 | 84 | P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0 |
dkato | 0:f8cb87301ad8 | 85 | }; |
dkato | 0:f8cb87301ad8 | 86 | |
dkato | 0:f8cb87301ad8 | 87 | lcd_pwon = 0; |
dkato | 0:f8cb87301ad8 | 88 | lcd_blon = 0; |
dkato | 0:f8cb87301ad8 | 89 | Thread::wait(100); |
dkato | 0:f8cb87301ad8 | 90 | lcd_pwon = 1; |
dkato | 0:f8cb87301ad8 | 91 | lcd_blon = 1; |
dkato | 0:f8cb87301ad8 | 92 | |
dkato | 0:f8cb87301ad8 | 93 | Display.Graphics_Lvds_Port_Init(lvds_pin, 8); |
dkato | 0:f8cb87301ad8 | 94 | |
dkato | 0:f8cb87301ad8 | 95 | /* Graphics initialization process */ |
dkato | 0:f8cb87301ad8 | 96 | lcd_config = LcdCfgTbl_LCD_shield; |
dkato | 0:f8cb87301ad8 | 97 | error = Display.Graphics_init(&lcd_config); |
dkato | 0:f8cb87301ad8 | 98 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 99 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 100 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 101 | } |
dkato | 0:f8cb87301ad8 | 102 | graphics_init_end = true; |
dkato | 0:f8cb87301ad8 | 103 | } |
dkato | 0:f8cb87301ad8 | 104 | |
dkato | 0:f8cb87301ad8 | 105 | static void Start_LCD_Display(uint8_t * p_buf) { |
dkato | 0:f8cb87301ad8 | 106 | DisplayBase::rect_t rect; |
dkato | 0:f8cb87301ad8 | 107 | |
dkato | 0:f8cb87301ad8 | 108 | rect.vs = 0; |
dkato | 0:f8cb87301ad8 | 109 | rect.vw = LCD_PIXEL_HEIGHT; |
dkato | 0:f8cb87301ad8 | 110 | rect.hs = 0; |
dkato | 0:f8cb87301ad8 | 111 | rect.hw = LCD_PIXEL_WIDTH; |
dkato | 0:f8cb87301ad8 | 112 | Display.Graphics_Read_Setting( |
dkato | 0:f8cb87301ad8 | 113 | DisplayBase::GRAPHICS_LAYER_0, |
dkato | 0:f8cb87301ad8 | 114 | (void *)p_buf, |
dkato | 0:f8cb87301ad8 | 115 | FRAME_BUFFER_STRIDE, |
dkato | 0:f8cb87301ad8 | 116 | GRAPHICS_FORMAT, |
dkato | 0:f8cb87301ad8 | 117 | WR_RD_WRSWA, |
dkato | 0:f8cb87301ad8 | 118 | &rect |
dkato | 0:f8cb87301ad8 | 119 | ); |
dkato | 0:f8cb87301ad8 | 120 | Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0); |
dkato | 0:f8cb87301ad8 | 121 | } |
dkato | 0:f8cb87301ad8 | 122 | |
dkato | 0:f8cb87301ad8 | 123 | /****** Video ******/ |
dkato | 0:f8cb87301ad8 | 124 | static void Init_Video(void) { |
dkato | 0:f8cb87301ad8 | 125 | DisplayBase::graphics_error_t error; |
dkato | 0:f8cb87301ad8 | 126 | |
dkato | 0:f8cb87301ad8 | 127 | /* Graphics initialization process */ |
dkato | 0:f8cb87301ad8 | 128 | if (graphics_init_end == false) { |
dkato | 0:f8cb87301ad8 | 129 | /* When not initializing LCD, this processing is needed. */ |
dkato | 0:f8cb87301ad8 | 130 | error = Display.Graphics_init(NULL); |
dkato | 0:f8cb87301ad8 | 131 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 132 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 133 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 134 | } |
dkato | 0:f8cb87301ad8 | 135 | graphics_init_end = true; |
dkato | 0:f8cb87301ad8 | 136 | } |
dkato | 0:f8cb87301ad8 | 137 | |
dkato | 0:f8cb87301ad8 | 138 | error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_VDEC, NULL); |
dkato | 0:f8cb87301ad8 | 139 | if( error != DisplayBase::GRAPHICS_OK ) { |
dkato | 0:f8cb87301ad8 | 140 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 141 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 142 | } |
dkato | 0:f8cb87301ad8 | 143 | } |
dkato | 0:f8cb87301ad8 | 144 | |
dkato | 0:f8cb87301ad8 | 145 | static void Start_Video(DisplayBase::video_input_channel_t ch, uint8_t * p_buf) { |
dkato | 0:f8cb87301ad8 | 146 | DisplayBase::graphics_error_t error; |
dkato | 0:f8cb87301ad8 | 147 | |
dkato | 0:f8cb87301ad8 | 148 | /* Video capture setting (progressive form fixed) */ |
dkato | 0:f8cb87301ad8 | 149 | error = Display.Video_Write_Setting( |
dkato | 0:f8cb87301ad8 | 150 | ch, |
dkato | 0:f8cb87301ad8 | 151 | COL_SYS, |
dkato | 0:f8cb87301ad8 | 152 | p_buf, |
dkato | 0:f8cb87301ad8 | 153 | FRAME_BUFFER_STRIDE, |
dkato | 0:f8cb87301ad8 | 154 | VIDEO_FORMAT, |
dkato | 0:f8cb87301ad8 | 155 | WR_RD_WRSWA, |
dkato | 0:f8cb87301ad8 | 156 | VIDEO_PIXEL_VW, |
dkato | 0:f8cb87301ad8 | 157 | VIDEO_PIXEL_HW / 2 |
dkato | 0:f8cb87301ad8 | 158 | ); |
dkato | 0:f8cb87301ad8 | 159 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 160 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 161 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 162 | } |
dkato | 0:f8cb87301ad8 | 163 | |
dkato | 0:f8cb87301ad8 | 164 | /* Video write process start */ |
dkato | 0:f8cb87301ad8 | 165 | error = Display.Video_Start(ch); |
dkato | 0:f8cb87301ad8 | 166 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 167 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 168 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 169 | } |
dkato | 0:f8cb87301ad8 | 170 | |
dkato | 0:f8cb87301ad8 | 171 | /* Video write process stop */ |
dkato | 0:f8cb87301ad8 | 172 | error = Display.Video_Stop(ch); |
dkato | 0:f8cb87301ad8 | 173 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 174 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 175 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 176 | } |
dkato | 0:f8cb87301ad8 | 177 | |
dkato | 0:f8cb87301ad8 | 178 | /* Video write process start */ |
dkato | 0:f8cb87301ad8 | 179 | error = Display.Video_Start(ch); |
dkato | 0:f8cb87301ad8 | 180 | if (error != DisplayBase::GRAPHICS_OK) { |
dkato | 0:f8cb87301ad8 | 181 | printf("Line %d, error %d\n", __LINE__, error); |
dkato | 0:f8cb87301ad8 | 182 | mbed_die(); |
dkato | 0:f8cb87301ad8 | 183 | } |
dkato | 0:f8cb87301ad8 | 184 | } |
dkato | 0:f8cb87301ad8 | 185 | |
dkato | 0:f8cb87301ad8 | 186 | /****** main ******/ |
dkato | 0:f8cb87301ad8 | 187 | int main(void) { |
dkato | 0:f8cb87301ad8 | 188 | /* Initialization of LCD */ |
dkato | 0:f8cb87301ad8 | 189 | Init_LCD_Display(); /* When using LCD, please call before than Init_Video(). */ |
dkato | 0:f8cb87301ad8 | 190 | |
dkato | 0:f8cb87301ad8 | 191 | /* Initialization of Video */ |
dkato | 0:f8cb87301ad8 | 192 | Init_Video(); |
dkato | 0:f8cb87301ad8 | 193 | |
dkato | 0:f8cb87301ad8 | 194 | /* Initialization memory */ |
dkato | 0:f8cb87301ad8 | 195 | memset(user_frame_buffer0, 0, (FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT)); |
dkato | 0:f8cb87301ad8 | 196 | |
dkato | 0:f8cb87301ad8 | 197 | /* Start of Video */ |
dkato | 0:f8cb87301ad8 | 198 | Start_Video(DisplayBase::VIDEO_INPUT_CHANNEL_0, &user_frame_buffer0[0]); |
dkato | 0:f8cb87301ad8 | 199 | Start_Video(DisplayBase::VIDEO_INPUT_CHANNEL_1, &user_frame_buffer0[FRAME_BUFFER_STRIDE / 2]); |
dkato | 0:f8cb87301ad8 | 200 | |
dkato | 0:f8cb87301ad8 | 201 | /* Start of LCD */ |
dkato | 0:f8cb87301ad8 | 202 | Start_LCD_Display(&user_frame_buffer0[0]); |
dkato | 0:f8cb87301ad8 | 203 | |
dkato | 0:f8cb87301ad8 | 204 | /* Backlight on */ |
dkato | 0:f8cb87301ad8 | 205 | Thread::wait(200); |
dkato | 0:f8cb87301ad8 | 206 | lcd_cntrst.write(1.0); |
dkato | 0:f8cb87301ad8 | 207 | |
digiponta | 1:fa4f4543bcdd | 208 | // TEST |
digiponta | 1:fa4f4543bcdd | 209 | FILE *fp = fopen( "/SD/test.txt", "rw" ); |
digiponta | 1:fa4f4543bcdd | 210 | fprintf( fp, "test" ); |
digiponta | 1:fa4f4543bcdd | 211 | fclose( fp ); |
digiponta | 1:fa4f4543bcdd | 212 | |
dkato | 0:f8cb87301ad8 | 213 | while (1) { |
dkato | 0:f8cb87301ad8 | 214 | led_blue = !led_blue; |
dkato | 0:f8cb87301ad8 | 215 | Thread::wait(1000); |
dkato | 0:f8cb87301ad8 | 216 | } |
dkato | 0:f8cb87301ad8 | 217 | } |