LCD Shield sample

Dependencies:   GR-PEACH_video mbed-rtos mbed

This program displays the NTSC input from NTSC1A of LCD Shield on the screen. Touch coordinates are displayed on the terminal when you touch the screen. You can touch at the same time up to 2 points.

When you connect the "GR-PEACH AUDIO CAMERA Shield", you can display an image of the CMOS Camera(MT9V111).
If you use CMOS Camera, Please change the below in the “main.cpp”.

main.cpp

#define VIDEO_INPUT_METHOD     (VIDEO_CVBS)
->
#define VIDEO_INPUT_METHOD     (VIDEO_CMOS_CAMERA)


Please refer to following link about "GR-PEACH LCD Shield".
https://developer.mbed.org/teams/Renesas/wiki/LCD-shield

Please refer to following link about "GR-PEACH AUDIO CAMERA Shield".
https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield

Committer:
dkato
Date:
Tue Apr 19 02:35:27 2016 +0000
Revision:
1:b5ce15bc386d
Parent:
0:47ea8de0be6c
Supports IAR.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:47ea8de0be6c 1 #include "mbed.h"
dkato 0:47ea8de0be6c 2 #include "DisplayBace.h"
dkato 0:47ea8de0be6c 3 #include "rtos.h"
dkato 0:47ea8de0be6c 4
dkato 0:47ea8de0be6c 5 #define VIDEO_CVBS (0) /* Analog Video Signal */
dkato 0:47ea8de0be6c 6 #define VIDEO_CMOS_CAMERA (1) /* Digital Video Signal */
dkato 0:47ea8de0be6c 7 #define VIDEO_YCBCR422 (0)
dkato 0:47ea8de0be6c 8 #define VIDEO_RGB888 (1)
dkato 0:47ea8de0be6c 9 #define VIDEO_RGB565 (2)
dkato 0:47ea8de0be6c 10
dkato 0:47ea8de0be6c 11 /**** User Selection *********/
dkato 0:47ea8de0be6c 12 #define VIDEO_INPUT_METHOD (VIDEO_CVBS) /* Select VIDEO_CVBS or VIDEO_CMOS_CAMERA */
dkato 0:47ea8de0be6c 13 #define VIDEO_INPUT_FORMAT (VIDEO_YCBCR422) /* Select VIDEO_YCBCR422 or VIDEO_RGB888 or VIDEO_RGB565 */
dkato 0:47ea8de0be6c 14 #define USE_VIDEO_CH (0) /* Select 0 or 1 If selecting VIDEO_CMOS_CAMERA, should be 0.) */
dkato 0:47ea8de0be6c 15 #define VIDEO_PAL (0) /* Select 0(NTSC) or 1(PAL) If selecting VIDEO_CVBS, this parameter is not referenced.) */
dkato 0:47ea8de0be6c 16 /*****************************/
dkato 0:47ea8de0be6c 17
dkato 0:47ea8de0be6c 18 #if USE_VIDEO_CH == (0)
dkato 0:47ea8de0be6c 19 #define VIDEO_INPUT_CH (DisplayBase::VIDEO_INPUT_CHANNEL_0)
dkato 0:47ea8de0be6c 20 #define VIDEO_INT_TYPE (DisplayBase::INT_TYPE_S0_VFIELD)
dkato 0:47ea8de0be6c 21 #else
dkato 0:47ea8de0be6c 22 #define VIDEO_INPUT_CH (DisplayBase::VIDEO_INPUT_CHANNEL_1)
dkato 0:47ea8de0be6c 23 #define VIDEO_INT_TYPE (DisplayBase::INT_TYPE_S1_VFIELD)
dkato 0:47ea8de0be6c 24 #endif
dkato 0:47ea8de0be6c 25
dkato 0:47ea8de0be6c 26 #if ( VIDEO_INPUT_FORMAT == VIDEO_YCBCR422 || VIDEO_INPUT_FORMAT == VIDEO_RGB565 )
dkato 0:47ea8de0be6c 27 #define DATA_SIZE_PER_PIC (2u)
dkato 0:47ea8de0be6c 28 #else
dkato 0:47ea8de0be6c 29 #define DATA_SIZE_PER_PIC (4u)
dkato 0:47ea8de0be6c 30 #endif
dkato 0:47ea8de0be6c 31
dkato 0:47ea8de0be6c 32 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
dkato 0:47ea8de0be6c 33 in accordance with the frame buffer burst transfer mode. */
dkato 0:47ea8de0be6c 34 #if VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
dkato 0:47ea8de0be6c 35 #define PIXEL_HW (640u) /* Camera */
dkato 0:47ea8de0be6c 36 #define PIXEL_VW (468u) /* Camera */
dkato 0:47ea8de0be6c 37 #else
dkato 0:47ea8de0be6c 38 #define PIXEL_HW (800u) /* NTSC */
dkato 0:47ea8de0be6c 39 #define PIXEL_VW (480u) /* NTSC */
dkato 0:47ea8de0be6c 40 #endif
dkato 0:47ea8de0be6c 41
dkato 0:47ea8de0be6c 42 #define VIDEO_BUFFER_STRIDE (((PIXEL_HW * DATA_SIZE_PER_PIC) + 31u) & ~31u)
dkato 0:47ea8de0be6c 43 #define VIDEO_BUFFER_HEIGHT (PIXEL_VW)
dkato 0:47ea8de0be6c 44
dkato 0:47ea8de0be6c 45 DigitalIn button(USER_BUTTON0);
dkato 0:47ea8de0be6c 46 #if(1) //lcd
dkato 0:47ea8de0be6c 47 DigitalOut lcd_pwon(P7_15);
dkato 0:47ea8de0be6c 48 DigitalOut lcd_blon(P8_1);
dkato 0:47ea8de0be6c 49 PwmOut lcd_cntrst(P8_15);
dkato 0:47ea8de0be6c 50 I2C mI2c(I2C_SDA, I2C_SCL);
dkato 0:47ea8de0be6c 51
dkato 0:47ea8de0be6c 52 typedef struct {
dkato 0:47ea8de0be6c 53 uint8_t y_h: 3,
dkato 0:47ea8de0be6c 54 reserved: 1,
dkato 0:47ea8de0be6c 55 x_h: 3,
dkato 0:47ea8de0be6c 56 valid: 1;
dkato 0:47ea8de0be6c 57 uint8_t x_l;
dkato 0:47ea8de0be6c 58 uint8_t y_l;
dkato 0:47ea8de0be6c 59 uint8_t z;
dkato 0:47ea8de0be6c 60 } xyz_data_t;
dkato 0:47ea8de0be6c 61
dkato 0:47ea8de0be6c 62 typedef struct {
dkato 0:47ea8de0be6c 63 uint8_t fingers: 4,
dkato 0:47ea8de0be6c 64 reserved: 4;
dkato 0:47ea8de0be6c 65 uint8_t keys;
dkato 0:47ea8de0be6c 66 xyz_data_t xyz_data[2];
dkato 0:47ea8de0be6c 67 } stx_report_data_t;
dkato 0:47ea8de0be6c 68
dkato 0:47ea8de0be6c 69 static int get_coordinates(uint8_t *count, uint32_t *x0, uint32_t *y0, uint32_t *x1, uint32_t *y1) {
dkato 0:47ea8de0be6c 70 char buf[10];
dkato 0:47ea8de0be6c 71 stx_report_data_t *pdata;
dkato 0:47ea8de0be6c 72 int ret = -1;
dkato 0:47ea8de0be6c 73 *count = 0; // Set point detected count to 0.
dkato 0:47ea8de0be6c 74
dkato 0:47ea8de0be6c 75 if (mI2c.read((0x55 << 1), buf, sizeof(buf)) == 0) {
dkato 0:47ea8de0be6c 76 pdata = (stx_report_data_t *)buf;
dkato 0:47ea8de0be6c 77 if (pdata->fingers) {
dkato 0:47ea8de0be6c 78 if (pdata->xyz_data[0].valid) {
dkato 0:47ea8de0be6c 79 *x0 = (pdata->xyz_data[0].x_h << 8) | pdata->xyz_data[0].x_l;
dkato 0:47ea8de0be6c 80 *y0 = (pdata->xyz_data[0].y_h << 8) | pdata->xyz_data[0].y_l;
dkato 0:47ea8de0be6c 81 (*count)++;
dkato 0:47ea8de0be6c 82 }
dkato 0:47ea8de0be6c 83 }
dkato 0:47ea8de0be6c 84 if (pdata->xyz_data[1].valid) {
dkato 0:47ea8de0be6c 85 *x1 = (pdata->xyz_data[1].x_h << 8) | pdata->xyz_data[1].x_l;
dkato 0:47ea8de0be6c 86 *y1 = (pdata->xyz_data[1].y_h << 8) | pdata->xyz_data[1].y_l;
dkato 0:47ea8de0be6c 87 (*count)++;
dkato 0:47ea8de0be6c 88 }
dkato 0:47ea8de0be6c 89 ret = 0;
dkato 0:47ea8de0be6c 90 }
dkato 0:47ea8de0be6c 91
dkato 0:47ea8de0be6c 92 return ret;
dkato 0:47ea8de0be6c 93 }
dkato 0:47ea8de0be6c 94 #endif
dkato 0:47ea8de0be6c 95
dkato 1:b5ce15bc386d 96 #if defined(__ICCARM__)
dkato 1:b5ce15bc386d 97 #pragma data_alignment=16
dkato 1:b5ce15bc386d 98 static uint8_t FrameBuffer_Video[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]@ ".mirrorram"; //16 bytes aligned!;
dkato 1:b5ce15bc386d 99 #pragma data_alignment=4
dkato 1:b5ce15bc386d 100 #else
dkato 0:47ea8de0be6c 101 static uint8_t FrameBuffer_Video[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned!;
dkato 1:b5ce15bc386d 102 #endif
dkato 0:47ea8de0be6c 103 static volatile int32_t vsync_count = 0;
dkato 0:47ea8de0be6c 104 static volatile int32_t vfield_count = 1;
dkato 0:47ea8de0be6c 105 static int image_change = 0;
dkato 0:47ea8de0be6c 106
dkato 0:47ea8de0be6c 107 static void IntCallbackFunc_Vfield(DisplayBase::int_type_t int_type)
dkato 0:47ea8de0be6c 108 {
dkato 0:47ea8de0be6c 109 //Interrupt callback function
dkato 0:47ea8de0be6c 110 if (vfield_count != 0) {
dkato 0:47ea8de0be6c 111 vfield_count = 0;
dkato 0:47ea8de0be6c 112 } else {
dkato 0:47ea8de0be6c 113 vfield_count = 1;
dkato 0:47ea8de0be6c 114 image_change = 1;
dkato 0:47ea8de0be6c 115 }
dkato 0:47ea8de0be6c 116 }
dkato 0:47ea8de0be6c 117
dkato 0:47ea8de0be6c 118 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type)
dkato 0:47ea8de0be6c 119 {
dkato 0:47ea8de0be6c 120 //Interrupt callback function for Vsync interruption
dkato 0:47ea8de0be6c 121 if (vsync_count > 0) {
dkato 0:47ea8de0be6c 122 vsync_count--;
dkato 0:47ea8de0be6c 123 }
dkato 0:47ea8de0be6c 124 }
dkato 0:47ea8de0be6c 125
dkato 0:47ea8de0be6c 126 static void WaitVsync(const int32_t wait_count)
dkato 0:47ea8de0be6c 127 {
dkato 0:47ea8de0be6c 128 //Wait for the specified number of times Vsync occurs
dkato 0:47ea8de0be6c 129 vsync_count = wait_count;
dkato 0:47ea8de0be6c 130 while (vsync_count > 0) {
dkato 0:47ea8de0be6c 131 /* Do nothing */
dkato 0:47ea8de0be6c 132 }
dkato 0:47ea8de0be6c 133 }
dkato 0:47ea8de0be6c 134
dkato 0:47ea8de0be6c 135 int main(void)
dkato 0:47ea8de0be6c 136 {
dkato 0:47ea8de0be6c 137 /* Create DisplayBase object */
dkato 0:47ea8de0be6c 138 DisplayBase Display;
dkato 0:47ea8de0be6c 139 DisplayBase::graphics_error_t error;
dkato 0:47ea8de0be6c 140
dkato 0:47ea8de0be6c 141 #if VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
dkato 0:47ea8de0be6c 142 DisplayBase::video_ext_in_config_t ext_in_config;
dkato 0:47ea8de0be6c 143 PinName cmos_camera_pin[11] = {
dkato 0:47ea8de0be6c 144 /* data pin */
dkato 0:47ea8de0be6c 145 P2_7, P2_6, P2_5, P2_4, P2_3, P2_2, P2_1, P2_0,
dkato 0:47ea8de0be6c 146 /* control pin */
dkato 0:47ea8de0be6c 147 P10_0, /* DV0_CLK */
dkato 0:47ea8de0be6c 148 P1_0, /* DV0_Vsync */
dkato 0:47ea8de0be6c 149 P1_1 /* DV0_Hsync */
dkato 0:47ea8de0be6c 150 };
dkato 0:47ea8de0be6c 151 #endif
dkato 0:47ea8de0be6c 152 #if(1) //lcd
dkato 0:47ea8de0be6c 153 Thread::wait(500);
dkato 0:47ea8de0be6c 154
dkato 0:47ea8de0be6c 155 lcd_pwon = 1;
dkato 0:47ea8de0be6c 156 lcd_blon = 1;
dkato 0:47ea8de0be6c 157
dkato 0:47ea8de0be6c 158 DisplayBase::lcd_config_t lcd_config;
dkato 0:47ea8de0be6c 159 PinName lvds_pin[8] = {
dkato 0:47ea8de0be6c 160 /* data pin */
dkato 0:47ea8de0be6c 161 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
dkato 0:47ea8de0be6c 162 };
dkato 0:47ea8de0be6c 163 DisplayBase::rect_t rect;
dkato 0:47ea8de0be6c 164
dkato 0:47ea8de0be6c 165 lcd_config.lcd_type = DisplayBase::LCD_TYPE_LVDS;
dkato 0:47ea8de0be6c 166 lcd_config.intputClock = 66.67f;
dkato 0:47ea8de0be6c 167 lcd_config.outputClock = 33.26f;
dkato 0:47ea8de0be6c 168 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
dkato 0:47ea8de0be6c 169 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
dkato 0:47ea8de0be6c 170 lcd_config.h_toatal_period = (800 + 92 + 128 + 36);
dkato 0:47ea8de0be6c 171 lcd_config.v_toatal_period = (480 + 5 + 35 + 5);
dkato 0:47ea8de0be6c 172
dkato 0:47ea8de0be6c 173 lcd_config.h_disp_widht = 800;
dkato 0:47ea8de0be6c 174 lcd_config.v_disp_widht = 480;
dkato 0:47ea8de0be6c 175 lcd_config.h_back_porch = (128 + 36);
dkato 0:47ea8de0be6c 176 lcd_config.v_back_porch = (35 + 5);
dkato 0:47ea8de0be6c 177
dkato 0:47ea8de0be6c 178 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_NON;
dkato 0:47ea8de0be6c 179 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:47ea8de0be6c 180 lcd_config.h_sync_width = 0;
dkato 0:47ea8de0be6c 181
dkato 0:47ea8de0be6c 182 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_NON;
dkato 0:47ea8de0be6c 183 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:47ea8de0be6c 184 lcd_config.v_sync_width = 0;
dkato 0:47ea8de0be6c 185
dkato 0:47ea8de0be6c 186 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
dkato 0:47ea8de0be6c 187 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:47ea8de0be6c 188
dkato 0:47ea8de0be6c 189 /* Graphics initialization process */
dkato 0:47ea8de0be6c 190 error = Display.Graphics_init(&lcd_config);
dkato 0:47ea8de0be6c 191 #else
dkato 0:47ea8de0be6c 192 /* Graphics initialization process */
dkato 0:47ea8de0be6c 193 error = Display.Graphics_init(NULL);
dkato 0:47ea8de0be6c 194 #endif
dkato 0:47ea8de0be6c 195
dkato 0:47ea8de0be6c 196 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 197 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 198 while (1);
dkato 0:47ea8de0be6c 199 }
dkato 0:47ea8de0be6c 200
dkato 0:47ea8de0be6c 201 #if VIDEO_INPUT_METHOD == VIDEO_CVBS
dkato 0:47ea8de0be6c 202 error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_VDEC, NULL);
dkato 0:47ea8de0be6c 203 if( error != DisplayBase::GRAPHICS_OK ) {
dkato 0:47ea8de0be6c 204 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 205 while(1);
dkato 0:47ea8de0be6c 206 }
dkato 0:47ea8de0be6c 207
dkato 0:47ea8de0be6c 208 #elif VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
dkato 0:47ea8de0be6c 209 /* MT9V111 camera input config */
dkato 0:47ea8de0be6c 210 ext_in_config.inp_format = DisplayBase::VIDEO_EXTIN_FORMAT_BT601; /* BT601 8bit YCbCr format */
dkato 0:47ea8de0be6c 211 ext_in_config.inp_pxd_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing data */
dkato 0:47ea8de0be6c 212 ext_in_config.inp_vs_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing Vsync signals */
dkato 0:47ea8de0be6c 213 ext_in_config.inp_hs_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing Hsync signals */
dkato 0:47ea8de0be6c 214 ext_in_config.inp_endian_on = DisplayBase::OFF; /* External input bit endian change on/off */
dkato 0:47ea8de0be6c 215 ext_in_config.inp_swap_on = DisplayBase::OFF; /* External input B/R signal swap on/off */
dkato 0:47ea8de0be6c 216 ext_in_config.inp_vs_inv = DisplayBase::SIG_POL_NOT_INVERTED; /* External input DV_VSYNC inversion control */
dkato 0:47ea8de0be6c 217 ext_in_config.inp_hs_inv = DisplayBase::SIG_POL_INVERTED; /* External input DV_HSYNC inversion control */
dkato 0:47ea8de0be6c 218 ext_in_config.inp_f525_625 = DisplayBase::EXTIN_LINE_525; /* Number of lines for BT.656 external input */
dkato 0:47ea8de0be6c 219 ext_in_config.inp_h_pos = DisplayBase::EXTIN_H_POS_CRYCBY; /* Y/Cb/Y/Cr data string start timing to Hsync reference */
dkato 0:47ea8de0be6c 220 ext_in_config.cap_vs_pos = 6; /* Capture start position from Vsync */
dkato 0:47ea8de0be6c 221 ext_in_config.cap_hs_pos = 150; /* Capture start position form Hsync */
dkato 0:47ea8de0be6c 222 ext_in_config.cap_width = 640; /* Capture width */
dkato 0:47ea8de0be6c 223 ext_in_config.cap_height = 468u; /* Capture height Max 468[line]
dkato 0:47ea8de0be6c 224 Due to CMOS(MT9V111) output signal timing and VDC5 specification */
dkato 0:47ea8de0be6c 225 error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_EXT, &ext_in_config);
dkato 0:47ea8de0be6c 226 if( error != DisplayBase::GRAPHICS_OK ) {
dkato 0:47ea8de0be6c 227 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 228 while(1);
dkato 0:47ea8de0be6c 229 }
dkato 0:47ea8de0be6c 230
dkato 0:47ea8de0be6c 231 /* MT9V111 camera input port setting */
dkato 0:47ea8de0be6c 232 error = Display.Graphics_Dvinput_Port_Init(cmos_camera_pin, 11);
dkato 0:47ea8de0be6c 233 if( error != DisplayBase::GRAPHICS_OK ) {
dkato 0:47ea8de0be6c 234 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 235 while (1);
dkato 0:47ea8de0be6c 236 }
dkato 0:47ea8de0be6c 237 #endif
dkato 0:47ea8de0be6c 238
dkato 0:47ea8de0be6c 239 /* Interrupt callback function setting (Vsync signal input to scaler 0) */
dkato 0:47ea8de0be6c 240 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_VI_VSYNC, 0, IntCallbackFunc_Vsync);
dkato 0:47ea8de0be6c 241 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 242 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 243 while (1);
dkato 0:47ea8de0be6c 244 }
dkato 0:47ea8de0be6c 245 /* Video capture setting (progressive form fixed) */
dkato 0:47ea8de0be6c 246 error = Display.Video_Write_Setting(
dkato 0:47ea8de0be6c 247 VIDEO_INPUT_CH,
dkato 0:47ea8de0be6c 248 #if VIDEO_PAL == 0
dkato 0:47ea8de0be6c 249 DisplayBase::COL_SYS_NTSC_358,
dkato 0:47ea8de0be6c 250 #else
dkato 0:47ea8de0be6c 251 DisplayBase::COL_SYS_PAL_443,
dkato 0:47ea8de0be6c 252 #endif
dkato 0:47ea8de0be6c 253 FrameBuffer_Video,
dkato 0:47ea8de0be6c 254 VIDEO_BUFFER_STRIDE,
dkato 0:47ea8de0be6c 255 #if VIDEO_INPUT_FORMAT == VIDEO_YCBCR422
dkato 0:47ea8de0be6c 256 DisplayBase::VIDEO_FORMAT_YCBCR422,
dkato 0:47ea8de0be6c 257 DisplayBase::WR_RD_WRSWA_NON,
dkato 0:47ea8de0be6c 258 #elif VIDEO_INPUT_FORMAT == VIDEO_RGB565
dkato 0:47ea8de0be6c 259 DisplayBase::VIDEO_FORMAT_RGB565,
dkato 0:47ea8de0be6c 260 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 0:47ea8de0be6c 261 #else
dkato 0:47ea8de0be6c 262 DisplayBase::VIDEO_FORMAT_RGB888,
dkato 0:47ea8de0be6c 263 DisplayBase::WR_RD_WRSWA_32BIT,
dkato 0:47ea8de0be6c 264 #endif
dkato 0:47ea8de0be6c 265 PIXEL_VW,
dkato 0:47ea8de0be6c 266 PIXEL_HW
dkato 0:47ea8de0be6c 267 );
dkato 0:47ea8de0be6c 268 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 269 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 270 while (1);
dkato 0:47ea8de0be6c 271 }
dkato 0:47ea8de0be6c 272
dkato 0:47ea8de0be6c 273 /* Interrupt callback function setting (Field end signal for recording function in scaler 0) */
dkato 0:47ea8de0be6c 274 error = Display.Graphics_Irq_Handler_Set(VIDEO_INT_TYPE, 0, IntCallbackFunc_Vfield);
dkato 0:47ea8de0be6c 275 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 276 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 277 while (1);
dkato 0:47ea8de0be6c 278 }
dkato 0:47ea8de0be6c 279
dkato 0:47ea8de0be6c 280 /* Video write process start */
dkato 0:47ea8de0be6c 281 error = Display.Video_Start (VIDEO_INPUT_CH);
dkato 0:47ea8de0be6c 282 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 283 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 284 while (1);
dkato 0:47ea8de0be6c 285 }
dkato 0:47ea8de0be6c 286
dkato 0:47ea8de0be6c 287 /* Video write process stop */
dkato 0:47ea8de0be6c 288 error = Display.Video_Stop (VIDEO_INPUT_CH);
dkato 0:47ea8de0be6c 289 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 290 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 291 while (1);
dkato 0:47ea8de0be6c 292 }
dkato 0:47ea8de0be6c 293
dkato 0:47ea8de0be6c 294 /* Video write process start */
dkato 0:47ea8de0be6c 295 error = Display.Video_Start (VIDEO_INPUT_CH);
dkato 0:47ea8de0be6c 296 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:47ea8de0be6c 297 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:47ea8de0be6c 298 while (1);
dkato 0:47ea8de0be6c 299 }
dkato 0:47ea8de0be6c 300
dkato 0:47ea8de0be6c 301 /* Wait vsync to update resister */
dkato 0:47ea8de0be6c 302 WaitVsync(1);
dkato 0:47ea8de0be6c 303
dkato 0:47ea8de0be6c 304 #if(1) //lcd
dkato 0:47ea8de0be6c 305 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
dkato 0:47ea8de0be6c 306 rect.vs = 0;
dkato 0:47ea8de0be6c 307 rect.vw = PIXEL_VW;
dkato 0:47ea8de0be6c 308 rect.hs = 0;
dkato 0:47ea8de0be6c 309 rect.hw = PIXEL_HW;
dkato 0:47ea8de0be6c 310
dkato 0:47ea8de0be6c 311 Display.Graphics_Read_Setting(
dkato 0:47ea8de0be6c 312 DisplayBase::GRAPHICS_LAYER_0,
dkato 0:47ea8de0be6c 313 (void *)FrameBuffer_Video,
dkato 0:47ea8de0be6c 314 VIDEO_BUFFER_STRIDE,
dkato 0:47ea8de0be6c 315 DisplayBase::GRAPHICS_FORMAT_YCBCR422,
dkato 0:47ea8de0be6c 316 DisplayBase::WR_RD_WRSWA_NON,
dkato 0:47ea8de0be6c 317 &rect
dkato 0:47ea8de0be6c 318 );
dkato 0:47ea8de0be6c 319 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
dkato 0:47ea8de0be6c 320
dkato 0:47ea8de0be6c 321 lcd_cntrst.write(1.0);
dkato 0:47ea8de0be6c 322
dkato 0:47ea8de0be6c 323 while (1) {
dkato 0:47ea8de0be6c 324 uint8_t count;
dkato 0:47ea8de0be6c 325 uint32_t x0;
dkato 0:47ea8de0be6c 326 uint32_t y0;
dkato 0:47ea8de0be6c 327 uint32_t x1;
dkato 0:47ea8de0be6c 328 uint32_t y1;
dkato 0:47ea8de0be6c 329
dkato 0:47ea8de0be6c 330 count = 0;
dkato 0:47ea8de0be6c 331 x0 = 0;
dkato 0:47ea8de0be6c 332 y0 = 0;
dkato 0:47ea8de0be6c 333 x1 = 0;
dkato 0:47ea8de0be6c 334 y1 = 0;
dkato 0:47ea8de0be6c 335 get_coordinates(&count, &x0, &y0, &x1, &y1);
dkato 0:47ea8de0be6c 336 if (count != 0) {
dkato 0:47ea8de0be6c 337 printf("count=%d, {X=%d,Y=%d}, {X=%d,Y=%d} \n", count, x0, y0, x1, y1);
dkato 0:47ea8de0be6c 338 }
dkato 0:47ea8de0be6c 339 Thread::wait(100);
dkato 0:47ea8de0be6c 340 }
dkato 0:47ea8de0be6c 341 #endif
dkato 0:47ea8de0be6c 342 }