Skip to content

Commit 04223e7

Browse files
committed
add camera ov2640 support
1 parent b4c8531 commit 04223e7

File tree

15 files changed

+2090
-3
lines changed

15 files changed

+2090
-3
lines changed

cores/arduino/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ int main( void )
1818
gpio_init();
1919
sysctl_set_power_mode(SYSCTL_POWER_BANK6,SYSCTL_POWER_V18);
2020
sysctl_set_power_mode(SYSCTL_POWER_BANK7,SYSCTL_POWER_V18);
21+
sysctl_enable_irq();
2122
setup();
2223

2324
do {

libraries/Camera/keywords.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#######################################
2+
# Syntax Coloring Map
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
9+
framesize_t KEYWORD1
10+
pixformat_t KEYWORD1
11+
12+
#######################################
13+
# Methods and Functions (KEYWORD2)
14+
#######################################
15+
begin KEYWORD2
16+
end KEYWORD2
17+
run KEYWORD2
18+
id KEYWORD2
19+
snapshot KEYWORD2
20+
getRGB565 KEYWORD2
21+
getRGB888 KEYWORD2
22+
setRotaion KEYWORD2
23+
setInver KEYWORD2
24+
width KEYWORD2
25+
height KEYWORD2
26+
27+
#######################################
28+
# Constants (LITERAL1)
29+
#######################################
30+
31+
PIXFORMAT_RGB565 LITERAL1
32+
FRAMESIZE_QQVGA LITERAL1
33+
FRAMESIZE_QVGA LITERAL1
34+
FRAMESIZE_VGA LITERAL1
35+
36+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=Camera
2+
version=1.0
3+
author=Neucrack
4+
maintainer=Neucrack<[email protected]>
5+
sentence=Camera interface
6+
paragraph=Camera interface
7+
category=Sensors
8+
url=
9+
architectures=k210

libraries/Camera/src/Camera.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
#include "Camera.h"
3+
4+
5+
6+
static const int resolution[][2] = {
7+
{0, 0 },
8+
// C/SIF Resolutions
9+
{88, 72 }, /* QQCIF */
10+
{176, 144 }, /* QCIF */
11+
{352, 288 }, /* CIF */
12+
{88, 60 }, /* QQSIF */
13+
{176, 120 }, /* QSIF */
14+
{352, 240 }, /* SIF */
15+
// VGA Resolutions
16+
{40, 30 }, /* QQQQVGA */
17+
{80, 60 }, /* QQQVGA */
18+
{160, 120 }, /* QQVGA */
19+
{320, 240 }, /* QVGA */
20+
{640, 480 }, /* VGA */
21+
{60, 40 }, /* HQQQVGA */
22+
{120, 80 }, /* HQQVGA */
23+
{240, 160 }, /* HQVGA */
24+
// FFT Resolutions
25+
{64, 32 }, /* 64x32 */
26+
{64, 64 }, /* 64x64 */
27+
{128, 64 }, /* 128x64 */
28+
{128, 128 }, /* 128x64 */
29+
// Other
30+
{128, 160 }, /* LCD */
31+
{128, 160 }, /* QQVGA2 */
32+
{720, 480 }, /* WVGA */
33+
{752, 480 }, /* WVGA2 */
34+
{800, 600 }, /* SVGA */
35+
{1280, 1024}, /* SXGA */
36+
{1600, 1200}, /* UXGA */
37+
};
38+
39+
Camera::Camera(framesize_t frameSize = FRAMESIZE_QVGA, pixformat_t pixFormat = PIXFORMAT_RGB565)
40+
{
41+
_frameSize = frameSize;
42+
_pixFormat = pixFormat;
43+
_width = resolution[frameSize][0];
44+
_height = resolution[frameSize][1];
45+
}
46+
47+
Camera::~Camera()
48+
{
49+
50+
}
51+

libraries/Camera/src/Camera.h

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#ifndef __CAMERA_H
2+
#define __CAMERA_H
3+
4+
#include <stdint.h>
5+
#include <stdbool.h>
6+
7+
typedef enum {
8+
PIXFORMAT_INVLAID = 0,
9+
PIXFORMAT_BAYER, // RAW
10+
PIXFORMAT_RGB565, // RGB565
11+
PIXFORMAT_YUV422, // YUV422
12+
PIXFORMAT_GRAYSCALE, // GRAYSCALE
13+
PIXFORMAT_JPEG, // JPEG/COMPRESSED
14+
} pixformat_t;
15+
16+
typedef enum {
17+
FRAMESIZE_INVALID = 0,
18+
// C/SIF Resolutions
19+
FRAMESIZE_QQCIF, // 88x72
20+
FRAMESIZE_QCIF, // 176x144
21+
FRAMESIZE_CIF, // 352x288
22+
FRAMESIZE_QQSIF, // 88x60
23+
FRAMESIZE_QSIF, // 176x120
24+
FRAMESIZE_SIF, // 352x240
25+
// VGA Resolutions
26+
FRAMESIZE_QQQQVGA, // 40x30
27+
FRAMESIZE_QQQVGA, // 80x60
28+
FRAMESIZE_QQVGA, // 160x120
29+
FRAMESIZE_QVGA, // 320x240
30+
FRAMESIZE_VGA, // 640x480
31+
FRAMESIZE_HQQQVGA, // 60x40
32+
FRAMESIZE_HQQVGA, // 120x80
33+
FRAMESIZE_HQVGA, // 240x160
34+
// FFT Resolutions
35+
FRAMESIZE_64X32, // 64x32
36+
FRAMESIZE_64X64, // 64x64
37+
FRAMESIZE_128X64, // 128x64
38+
FRAMESIZE_128X128, // 128x128
39+
// Other
40+
FRAMESIZE_LCD, // 128x160
41+
FRAMESIZE_QQVGA2, // 128x160
42+
FRAMESIZE_WVGA, // 720x480
43+
FRAMESIZE_WVGA2, // 752x480
44+
FRAMESIZE_SVGA, // 800x600
45+
FRAMESIZE_SXGA, // 1280x1024
46+
FRAMESIZE_UXGA, // 1600x1200
47+
} framesize_t;
48+
49+
50+
class Camera{
51+
52+
public:
53+
Camera(framesize_t frameSize, pixformat_t pixFormat);
54+
~Camera();
55+
virtual bool begin( ) = 0;
56+
virtual void end() = 0;
57+
// virtual bool reset() = 0;
58+
// virtual bool setPixFormat(int pixFormat) = 0;
59+
// virtual bool setFrameSize(int frameSize) = 0;
60+
virtual bool run(bool run) = 0;
61+
virtual int id() = 0;
62+
/**
63+
* @return pixels
64+
* If pixels format is RGB565: return RGB565 pixels with every uint16_t one pixel, e.g. RED: 0xF800
65+
*/
66+
virtual uint8_t* snapshot() = 0;
67+
virtual uint8_t* getRGB565(){ return 0; };
68+
virtual uint8_t* getRGB888(){ return 0; };
69+
virtual void setRotaion(uint8_t rotation) = 0;
70+
virtual void setInvert(bool invert) = 0;
71+
72+
73+
virtual int width(){ return _width; }
74+
virtual int height(){ return _height; }
75+
76+
protected:
77+
pixformat_t _pixFormat;
78+
framesize_t _frameSize;
79+
int _width;
80+
int _height;
81+
};
82+
83+
84+
85+
#endif
86+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <Sipeed_OV2640.h>
2+
#include <Sipeed_ST7789.h>
3+
#include <stdio.h>
4+
5+
SPIClass spi_(SPI0); // MUST be SPI0 for Maix series on board LCD
6+
Sipeed_ST7789 lcd(320, 240, spi_);
7+
8+
Sipeed_OV2640 camera(FRAMESIZE_QVGA, PIXFORMAT_RGB565);
9+
10+
11+
void setup()
12+
{
13+
lcd.begin(15000000, COLOR_RED);
14+
if(!camera.begin())
15+
printf("camera init fail\n");
16+
else
17+
printf("camera init success\n");
18+
camera.run(true);
19+
}
20+
21+
void loop()
22+
{
23+
uint8_t*img = camera.snapshot();
24+
if(img == nullptr || img==0)
25+
printf("snap fail\n");
26+
else
27+
lcd.drawImage(0, 0, camera.width(), camera.height(), (uint16_t*)img);
28+
}
29+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#######################################
2+
# Syntax Coloring Map
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
9+
10+
#######################################
11+
# Methods and Functions (KEYWORD2)
12+
#######################################
13+
begin KEYWORD2
14+
end KEYWORD2
15+
reset KEYWORD2
16+
setPixFormat KEYWORD2
17+
setFrameSize KEYWORD2
18+
run KEYWORD2
19+
id KEYWORD2
20+
snapshot KEYWORD2
21+
setRotaion KEYWORD2
22+
setInvert KEYWORD2
23+
24+
#######################################
25+
# Constants (LITERAL1)
26+
#######################################
27+
28+
29+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=Sipeed_OV2640
2+
version=1.0
3+
author=Neucrack
4+
maintainer=Neucrack<[email protected]>
5+
sentence=Camera Sipeed_OV2640 driver
6+
paragraph=Camera Sipeed_OV2640 driver
7+
category=Sensors
8+
url=
9+
architectures=k210

0 commit comments

Comments
 (0)