This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vipinranka 12:9a20164dcc47 1
vipinranka 12:9a20164dcc47 2
vipinranka 12:9a20164dcc47 3 #define VIDEO_CVBS (0) /* Analog Video Signal */
vipinranka 12:9a20164dcc47 4 #define VIDEO_CMOS_CAMERA (1) /* Digital Video Signal */
vipinranka 12:9a20164dcc47 5 #define VIDEO_YCBCR422 (0)
vipinranka 12:9a20164dcc47 6 #define VIDEO_RGB888 (1)
vipinranka 12:9a20164dcc47 7 #define VIDEO_RGB565 (2)
vipinranka 12:9a20164dcc47 8
vipinranka 12:9a20164dcc47 9 /**** User Selection *********/
vipinranka 12:9a20164dcc47 10 #define VIDEO_INPUT_METHOD (VIDEO_CVBS) /* Select VIDEO_CVBS or VIDEO_CMOS_CAMERA */
vipinranka 12:9a20164dcc47 11 #define VIDEO_INPUT_FORMAT (VIDEO_YCBCR422) /* Select VIDEO_YCBCR422 or VIDEO_RGB888 or VIDEO_RGB565 */
vipinranka 12:9a20164dcc47 12 #define USE_VIDEO_CH (0) /* Select 0 or 1 If selecting VIDEO_CMOS_CAMERA, should be 0.) */
vipinranka 12:9a20164dcc47 13 #define VIDEO_PAL (1) /* Select 0(NTSC) or 1(PAL) If selecting VIDEO_CVBS, this parameter is not referenced.) */
vipinranka 12:9a20164dcc47 14 /*****************************/
vipinranka 12:9a20164dcc47 15
vipinranka 12:9a20164dcc47 16 #if USE_VIDEO_CH == (0)
vipinranka 12:9a20164dcc47 17 #define VIDEO_INPUT_CH (DisplayBase::VIDEO_INPUT_CHANNEL_0)
vipinranka 12:9a20164dcc47 18 #define VIDEO_INT_TYPE (DisplayBase::INT_TYPE_S0_VFIELD)
vipinranka 12:9a20164dcc47 19 #else
vipinranka 12:9a20164dcc47 20 #define VIDEO_INPUT_CH (DisplayBase::VIDEO_INPUT_CHANNEL_1)
vipinranka 12:9a20164dcc47 21 #define VIDEO_INT_TYPE (DisplayBase::INT_TYPE_S1_VFIELD)
vipinranka 12:9a20164dcc47 22 #endif
vipinranka 12:9a20164dcc47 23
vipinranka 12:9a20164dcc47 24 #if ( VIDEO_INPUT_FORMAT == VIDEO_YCBCR422 || VIDEO_INPUT_FORMAT == VIDEO_RGB565 )
vipinranka 12:9a20164dcc47 25 #define DATA_SIZE_PER_PIC (2u)
vipinranka 12:9a20164dcc47 26 #else
vipinranka 12:9a20164dcc47 27 #define DATA_SIZE_PER_PIC (4u)
vipinranka 12:9a20164dcc47 28 #endif
vipinranka 12:9a20164dcc47 29
vipinranka 12:9a20164dcc47 30 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
vipinranka 12:9a20164dcc47 31 in accordance with the frame buffer burst transfer mode. */
vipinranka 12:9a20164dcc47 32 #define PIXEL_HW (320u) /* QVGA */
vipinranka 12:9a20164dcc47 33 #define PIXEL_VW (480u) /* QVGA */
vipinranka 12:9a20164dcc47 34 #define VIDEO_BUFFER_STRIDE (((PIXEL_HW * DATA_SIZE_PER_PIC) + 31u) & ~31u)
vipinranka 12:9a20164dcc47 35 #define VIDEO_BUFFER_HEIGHT (PIXEL_VW)
vipinranka 12:9a20164dcc47 36
vipinranka 12:9a20164dcc47 37
vipinranka 12:9a20164dcc47 38 DigitalOut led1(LED1);
vipinranka 12:9a20164dcc47 39 DigitalOut led2(LED2);
vipinranka 12:9a20164dcc47 40
vipinranka 12:9a20164dcc47 41
vipinranka 12:9a20164dcc47 42 #if defined(__ICCARM__)
vipinranka 12:9a20164dcc47 43 #pragma data_alignment=16
vipinranka 12:9a20164dcc47 44 static uint8_t FrameBuffer_Video_A[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]@ ".mirrorram"; //16 bytes aligned!;
vipinranka 12:9a20164dcc47 45 static uint8_t FrameBuffer_Video_B[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]@ ".mirrorram"; //16 bytes aligned!;
vipinranka 12:9a20164dcc47 46 #pragma data_alignment=4
vipinranka 12:9a20164dcc47 47 #else
vipinranka 12:9a20164dcc47 48 static uint8_t FrameBuffer_Video_A[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned!;
vipinranka 12:9a20164dcc47 49 static uint8_t FrameBuffer_Video_B[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned!;
vipinranka 12:9a20164dcc47 50 #endif
vipinranka 12:9a20164dcc47 51 static volatile int32_t vsync_count;
vipinranka 12:9a20164dcc47 52 static volatile int32_t vfield_count;
vipinranka 12:9a20164dcc47 53
vipinranka 12:9a20164dcc47 54 /**************************************************************************//**
vipinranka 12:9a20164dcc47 55 * @brief Interrupt callback function
vipinranka 12:9a20164dcc47 56 * @param[in] int_type : VDC5 interrupt type
vipinranka 12:9a20164dcc47 57 * @retval None
vipinranka 12:9a20164dcc47 58 ******************************************************************************/
vipinranka 12:9a20164dcc47 59 static void IntCallbackFunc_Vfield(DisplayBase::int_type_t int_type)
vipinranka 12:9a20164dcc47 60 {
vipinranka 12:9a20164dcc47 61 if (vfield_count > 0) {
vipinranka 12:9a20164dcc47 62 vfield_count--;
vipinranka 12:9a20164dcc47 63 }
vipinranka 12:9a20164dcc47 64 }
vipinranka 12:9a20164dcc47 65
vipinranka 12:9a20164dcc47 66 /**************************************************************************//**
vipinranka 12:9a20164dcc47 67 * @brief Wait for the specified number of times Vsync occurs
vipinranka 12:9a20164dcc47 68 * @param[in] wait_count : Wait count
vipinranka 12:9a20164dcc47 69 * @retval None
vipinranka 12:9a20164dcc47 70 ******************************************************************************/
vipinranka 12:9a20164dcc47 71 static void WaitVfield(const int32_t wait_count)
vipinranka 12:9a20164dcc47 72 {
vipinranka 12:9a20164dcc47 73 vfield_count = wait_count;
vipinranka 12:9a20164dcc47 74 while (vfield_count > 0) {
vipinranka 12:9a20164dcc47 75 /* Do nothing */
vipinranka 12:9a20164dcc47 76 }
vipinranka 12:9a20164dcc47 77 }
vipinranka 12:9a20164dcc47 78
vipinranka 12:9a20164dcc47 79 /**************************************************************************//**
vipinranka 12:9a20164dcc47 80 * @brief Interrupt callback function for Vsync interruption
vipinranka 12:9a20164dcc47 81 * @param[in] int_type : VDC5 interrupt type
vipinranka 12:9a20164dcc47 82 * @retval None
vipinranka 12:9a20164dcc47 83 ******************************************************************************/
vipinranka 12:9a20164dcc47 84 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type)
vipinranka 12:9a20164dcc47 85 {
vipinranka 12:9a20164dcc47 86 if (vsync_count > 0) {
vipinranka 12:9a20164dcc47 87 vsync_count--;
vipinranka 12:9a20164dcc47 88 }
vipinranka 12:9a20164dcc47 89 }
vipinranka 12:9a20164dcc47 90
vipinranka 12:9a20164dcc47 91 /**************************************************************************//**
vipinranka 12:9a20164dcc47 92 * @brief Wait for the specified number of times Vsync occurs
vipinranka 12:9a20164dcc47 93 * @param[in] wait_count : Wait count
vipinranka 12:9a20164dcc47 94 * @retval None
vipinranka 12:9a20164dcc47 95 ******************************************************************************/
vipinranka 12:9a20164dcc47 96 static void WaitVsync(const int32_t wait_count)
vipinranka 12:9a20164dcc47 97 {
vipinranka 12:9a20164dcc47 98 vsync_count = wait_count;
vipinranka 12:9a20164dcc47 99 while (vsync_count > 0) {
vipinranka 12:9a20164dcc47 100 /* Do nothing */
vipinranka 12:9a20164dcc47 101 }
vipinranka 12:9a20164dcc47 102 }
vipinranka 12:9a20164dcc47 103
vipinranka 12:9a20164dcc47 104 uint8_t * write_buff_addr = FrameBuffer_Video_A;
vipinranka 12:9a20164dcc47 105 uint8_t * save_buff_addr = FrameBuffer_Video_B;
vipinranka 12:9a20164dcc47 106
vipinranka 12:9a20164dcc47 107 DisplayBase Display;
vipinranka 12:9a20164dcc47 108
vipinranka 12:9a20164dcc47 109 void init_camera()
vipinranka 12:9a20164dcc47 110 {
vipinranka 12:9a20164dcc47 111 //Camera-in Code
vipinranka 12:9a20164dcc47 112
vipinranka 12:9a20164dcc47 113
vipinranka 12:9a20164dcc47 114 DisplayBase::graphics_error_t error;
vipinranka 12:9a20164dcc47 115
vipinranka 12:9a20164dcc47 116 #if VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
vipinranka 12:9a20164dcc47 117 DisplayBase::video_ext_in_config_t ext_in_config;
vipinranka 12:9a20164dcc47 118 PinName cmos_camera_pin[11] = {
vipinranka 12:9a20164dcc47 119 /* data pin */
vipinranka 12:9a20164dcc47 120 P2_7, P2_6, P2_5, P2_4, P2_3, P2_2, P2_1, P2_0,
vipinranka 12:9a20164dcc47 121 /* control pin */
vipinranka 12:9a20164dcc47 122 P10_0, /* DV0_CLK */
vipinranka 12:9a20164dcc47 123 P1_0, /* DV0_Vsync */
vipinranka 12:9a20164dcc47 124 P1_1 /* DV0_Hsync */
vipinranka 12:9a20164dcc47 125 };
vipinranka 12:9a20164dcc47 126 #endif
vipinranka 12:9a20164dcc47 127
vipinranka 12:9a20164dcc47 128 /* Create DisplayBase object */
vipinranka 12:9a20164dcc47 129
vipinranka 12:9a20164dcc47 130 /* Graphics initialization process */
vipinranka 12:9a20164dcc47 131 error = Display.Graphics_init(NULL);
vipinranka 12:9a20164dcc47 132 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 133 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 134 while (1);
vipinranka 12:9a20164dcc47 135 }
vipinranka 12:9a20164dcc47 136
vipinranka 12:9a20164dcc47 137 #if VIDEO_INPUT_METHOD == VIDEO_CVBS
vipinranka 12:9a20164dcc47 138 error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_VDEC, NULL);
vipinranka 12:9a20164dcc47 139 if( error != DisplayBase::GRAPHICS_OK ) {
vipinranka 12:9a20164dcc47 140 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 141 while(1);
vipinranka 12:9a20164dcc47 142 }
vipinranka 12:9a20164dcc47 143
vipinranka 12:9a20164dcc47 144 #elif VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
vipinranka 12:9a20164dcc47 145 /* MT9V111 camera input config */
vipinranka 12:9a20164dcc47 146 ext_in_config.inp_format = DisplayBase::VIDEO_EXTIN_FORMAT_BT601; /* BT601 8bit YCbCr format */
vipinranka 12:9a20164dcc47 147 ext_in_config.inp_pxd_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing data */
vipinranka 12:9a20164dcc47 148 ext_in_config.inp_vs_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing Vsync signals */
vipinranka 12:9a20164dcc47 149 ext_in_config.inp_hs_edge = DisplayBase::EDGE_RISING; /* Clock edge select for capturing Hsync signals */
vipinranka 12:9a20164dcc47 150 ext_in_config.inp_endian_on = DisplayBase::OFF; /* External input bit endian change on/off */
vipinranka 12:9a20164dcc47 151 ext_in_config.inp_swap_on = DisplayBase::OFF; /* External input B/R signal swap on/off */
vipinranka 12:9a20164dcc47 152 ext_in_config.inp_vs_inv = DisplayBase::SIG_POL_NOT_INVERTED; /* External input DV_VSYNC inversion control */
vipinranka 12:9a20164dcc47 153 ext_in_config.inp_hs_inv = DisplayBase::SIG_POL_INVERTED; /* External input DV_HSYNC inversion control */
vipinranka 12:9a20164dcc47 154 ext_in_config.inp_f525_625 = DisplayBase::EXTIN_LINE_525; /* Number of lines for BT.656 external input */
vipinranka 12:9a20164dcc47 155 ext_in_config.inp_h_pos = DisplayBase::EXTIN_H_POS_CRYCBY; /* Y/Cb/Y/Cr data string start timing to Hsync reference */
vipinranka 12:9a20164dcc47 156 ext_in_config.cap_vs_pos = 6; /* Capture start position from Vsync */
vipinranka 12:9a20164dcc47 157 ext_in_config.cap_hs_pos = 150; /* Capture start position form Hsync */
vipinranka 12:9a20164dcc47 158 ext_in_config.cap_width = 640; /* Capture width */
vipinranka 12:9a20164dcc47 159 ext_in_config.cap_height = 468u; /* Capture height Max 468[line]
vipinranka 12:9a20164dcc47 160 Due to CMOS(MT9V111) output signal timing and VDC5 specification */
vipinranka 12:9a20164dcc47 161 error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_EXT, &ext_in_config);
vipinranka 12:9a20164dcc47 162 if( error != DisplayBase::GRAPHICS_OK ) {
vipinranka 12:9a20164dcc47 163 uart.printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 164 while(1);
vipinranka 12:9a20164dcc47 165 }
vipinranka 12:9a20164dcc47 166
vipinranka 12:9a20164dcc47 167 /* MT9V111 camera input port setting */
vipinranka 12:9a20164dcc47 168 error = Display.Graphics_Dvinput_Port_Init(cmos_camera_pin, 11);
vipinranka 12:9a20164dcc47 169 if( error != DisplayBase::GRAPHICS_OK ) {
vipinranka 12:9a20164dcc47 170 uart.printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 171 while (1);
vipinranka 12:9a20164dcc47 172 }
vipinranka 12:9a20164dcc47 173 #endif
vipinranka 12:9a20164dcc47 174
vipinranka 12:9a20164dcc47 175 /* Interrupt callback function setting (Vsync signal input to scaler 0) */
vipinranka 12:9a20164dcc47 176 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_VI_VSYNC, 0, IntCallbackFunc_Vsync);
vipinranka 12:9a20164dcc47 177 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 178 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 179 while (1);
vipinranka 12:9a20164dcc47 180 }
vipinranka 12:9a20164dcc47 181 /* Video capture setting (progressive form fixed) */
vipinranka 12:9a20164dcc47 182 error = Display.Video_Write_Setting(
vipinranka 12:9a20164dcc47 183 VIDEO_INPUT_CH,
vipinranka 12:9a20164dcc47 184 #if VIDEO_PAL == 0
vipinranka 12:9a20164dcc47 185 DisplayBase::COL_SYS_NTSC_358,
vipinranka 12:9a20164dcc47 186 #else
vipinranka 12:9a20164dcc47 187 DisplayBase::COL_SYS_PAL_443,
vipinranka 12:9a20164dcc47 188 #endif
vipinranka 12:9a20164dcc47 189 write_buff_addr,
vipinranka 12:9a20164dcc47 190 VIDEO_BUFFER_STRIDE,
vipinranka 12:9a20164dcc47 191 #if VIDEO_INPUT_FORMAT == VIDEO_YCBCR422
vipinranka 12:9a20164dcc47 192 DisplayBase::VIDEO_FORMAT_YCBCR422,
vipinranka 12:9a20164dcc47 193 DisplayBase::WR_RD_WRSWA_NON,
vipinranka 12:9a20164dcc47 194 #elif VIDEO_INPUT_FORMAT == VIDEO_RGB565
vipinranka 12:9a20164dcc47 195 DisplayBase::VIDEO_FORMAT_RGB565,
vipinranka 12:9a20164dcc47 196 DisplayBase::WR_RD_WRSWA_32_16BIT,
vipinranka 12:9a20164dcc47 197 #else
vipinranka 12:9a20164dcc47 198 DisplayBase::VIDEO_FORMAT_RGB888,
vipinranka 12:9a20164dcc47 199 DisplayBase::WR_RD_WRSWA_32BIT,
vipinranka 12:9a20164dcc47 200 #endif
vipinranka 12:9a20164dcc47 201 PIXEL_VW,
vipinranka 12:9a20164dcc47 202 PIXEL_HW
vipinranka 12:9a20164dcc47 203 );
vipinranka 12:9a20164dcc47 204 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 205 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 206 while (1);
vipinranka 12:9a20164dcc47 207 }
vipinranka 12:9a20164dcc47 208
vipinranka 12:9a20164dcc47 209 /* Interrupt callback function setting (Field end signal for recording function in scaler 0) */
vipinranka 12:9a20164dcc47 210 error = Display.Graphics_Irq_Handler_Set(VIDEO_INT_TYPE, 0, IntCallbackFunc_Vfield);
vipinranka 12:9a20164dcc47 211 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 212 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 213 while (1);
vipinranka 12:9a20164dcc47 214 }
vipinranka 12:9a20164dcc47 215
vipinranka 12:9a20164dcc47 216 /* Video write process start */
vipinranka 12:9a20164dcc47 217 error = Display.Video_Start (VIDEO_INPUT_CH);
vipinranka 12:9a20164dcc47 218 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 219 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 220 while (1);
vipinranka 12:9a20164dcc47 221 }
vipinranka 12:9a20164dcc47 222
vipinranka 12:9a20164dcc47 223 /* Video write process stop */
vipinranka 12:9a20164dcc47 224 error = Display.Video_Stop (VIDEO_INPUT_CH);
vipinranka 12:9a20164dcc47 225 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 226 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 227 while (1);
vipinranka 12:9a20164dcc47 228 }
vipinranka 12:9a20164dcc47 229
vipinranka 12:9a20164dcc47 230 /* Video write process start */
vipinranka 12:9a20164dcc47 231 error = Display.Video_Start (VIDEO_INPUT_CH);
vipinranka 12:9a20164dcc47 232 if (error != DisplayBase::GRAPHICS_OK) {
vipinranka 12:9a20164dcc47 233 printf("Line %d, error %d\n", __LINE__, error);
vipinranka 12:9a20164dcc47 234 while (1);
vipinranka 12:9a20164dcc47 235 }
vipinranka 12:9a20164dcc47 236
vipinranka 12:9a20164dcc47 237 /* Wait vsync to update resister */
vipinranka 12:9a20164dcc47 238 WaitVsync(1);
vipinranka 12:9a20164dcc47 239
vipinranka 12:9a20164dcc47 240 /* Wait 2 Vfield(Top or bottom field) */
vipinranka 12:9a20164dcc47 241 WaitVfield(2);
vipinranka 12:9a20164dcc47 242
vipinranka 12:9a20164dcc47 243
vipinranka 12:9a20164dcc47 244 }
vipinranka 12:9a20164dcc47 245