From 28eb8bcf1d5c7396a0ae02b20d14652f2e525753 Mon Sep 17 00:00:00 2001 From: Sven Steudte Date: Wed, 13 Sep 2017 06:25:06 +0200 Subject: [PATCH] Fixed syntax bug in OV5640 Implemented OV5640 configurations which work for sure without HREF (tested on PP7 with DCMI) Adjusted clocking for camera --- tracker/software/config.c | 2 +- tracker/software/drivers/ov5640.c | 793 +++++++++++++--------------- tracker/software/drivers/ov5640.h | 2 +- tracker/software/drivers/pac1720.c | 2 +- tracker/software/mcuconf.h | 2 +- tracker/software/threads/position.c | 2 +- 6 files changed, 366 insertions(+), 437 deletions(-) diff --git a/tracker/software/config.c b/tracker/software/config.c index 069f502..e93e907 100644 --- a/tracker/software/config.c +++ b/tracker/software/config.c @@ -463,7 +463,7 @@ void start_user_modules(void) config[4].ssdv_conf.ram_size = sizeof(ssdv_buffer); // Buffer size config[4].ssdv_conf.res = RES_VGA; // Resolution VGA config[4].ssdv_conf.quality = 4; // Image quality - start_image_thread(&config[4]); + //start_image_thread(&config[4]); // Module IMAGE, SSDV 2m 2FSK config[5].power = 127; // Transmission Power diff --git a/tracker/software/drivers/ov5640.c b/tracker/software/drivers/ov5640.c index b7f9ee7..dfe9cb0 100644 --- a/tracker/software/drivers/ov5640.c +++ b/tracker/software/drivers/ov5640.c @@ -21,418 +21,347 @@ struct regval_list { static const struct regval_list OV5640YUV_Sensor_Dvp_Init[] = { - { 0x4740, 0x04 }, + { 0x4740, 0x24 }, + + { 0x4050, 0x6e }, + { 0x4051, 0x8f }, + + { 0x3008, 0x42 }, + { 0x3103, 0x03 }, + { 0x3017, 0x7f }, + { 0x3018, 0xff }, + { 0x302c, 0x02 }, + { 0x3108, 0x31 }, + { 0x3630, 0x2e },//2e + { 0x3632, 0xe2 }, + { 0x3633, 0x23 },//23 + { 0x3621, 0xe0 }, + { 0x3704, 0xa0 }, + { 0x3703, 0x5a }, + { 0x3715, 0x78 }, + { 0x3717, 0x01 }, + { 0x370b, 0x60 }, + { 0x3705, 0x1a }, + { 0x3905, 0x02 }, + { 0x3906, 0x10 }, + { 0x3901, 0x0a }, + { 0x3731, 0x12 }, + { 0x3600, 0x08 }, + { 0x3601, 0x33 }, + { 0x302d, 0x60 }, + { 0x3620, 0x52 }, + { 0x371b, 0x20 }, + { 0x471c, 0x50 }, + + { 0x3a18, 0x00 }, + { 0x3a19, 0xf8 }, + + { 0x3635, 0x1c },//1c + { 0x3634, 0x40 }, + { 0x3622, 0x01 }, + + { 0x3c04, 0x28 }, + { 0x3c05, 0x98 }, + { 0x3c06, 0x00 }, + { 0x3c07, 0x08 }, + { 0x3c08, 0x00 }, + { 0x3c09, 0x1c }, + { 0x3c0a, 0x9c }, + { 0x3c0b, 0x40 }, - { 0x4050, 0x6e }, - { 0x4051, 0x8f }, + { 0x3820, 0x41 }, + { 0x3821, 0x01 }, //07 - { 0x3008, 0x42 }, - { 0x3103, 0x03 }, - { 0x3017, 0x7f }, - { 0x3018, 0xff }, - { 0x302c, 0x02 }, - { 0x3108, 0x21 }, // PCLK root divider [5:4] - { 0x3630, 0x2e },//2e - { 0x3632, 0xe2 }, - { 0x3633, 0x23 },//23 - { 0x3621, 0xe0 }, - { 0x3704, 0xa0 }, - { 0x3703, 0x5a }, - { 0x3715, 0x78 }, - { 0x3717, 0x01 }, - { 0x370b, 0x60 }, - { 0x3705, 0x1a }, - { 0x3905, 0x02 }, - { 0x3906, 0x10 }, - { 0x3901, 0x0a }, - { 0x3731, 0x12 }, - { 0x3600, 0x08 }, - { 0x3601, 0x33 }, - { 0x302d, 0x60 }, - { 0x3620, 0x52 }, - { 0x371b, 0x20 }, - { 0x471c, 0x50 }, - - { 0x3a18, 0x00 }, - { 0x3a19, 0xf8 }, - - { 0x3635, 0x1c },//1c - { 0x3634, 0x40 }, - { 0x3622, 0x01 }, - - { 0x3c04, 0x28 }, - { 0x3c05, 0x98 }, - { 0x3c06, 0x00 }, - { 0x3c07, 0x08 }, - { 0x3c08, 0x00 }, - { 0x3c09, 0x1c }, - { 0x3c0a, 0x9c }, - { 0x3c0b, 0x40 }, - - { 0x3820, 0x46 }, - { 0x3821, 0x01 }, //07 - - //windows setup - { 0x3800, 0x00 }, - { 0x3801, 0x00 }, - { 0x3802, 0x00 }, - { 0x3803, 0x04 }, - { 0x3804, 0x0a }, - { 0x3805, 0x3f }, - { 0x3806, 0x07 }, - { 0x3807, 0x9b }, - { 0x3808, 0x05 }, - { 0x3809, 0x00 }, - { 0x380a, 0x03 }, - { 0x380b, 0xc0 }, - { 0x3810, 0x00 }, - { 0x3811, 0x10 }, - { 0x3812, 0x00 }, - { 0x3813, 0x06 }, - { 0x3814, 0x31 }, - { 0x3815, 0x31 }, - - { 0x3034, 0x1a }, // PLL charge pump control [7:4] - { 0x3035, 0x11 }, // System clock divider [7:4] - { 0x3036, 0x46 }, // PLL multiplier [7:0] - { 0x3037, 0x14 }, // PLL root divider [4], PLL pre-divider [3:0] - { 0x3038, 0x00 }, // System control registers (changing not recommended) - { 0x3039, 0x00 }, // PLL bypass [7] - - { 0x380c, 0x07 }, - { 0x380d, 0x68 }, - { 0x380e, 0x03 }, //03 - { 0x380f, 0xd8 }, //d8 - - { 0x3c01, 0xb4 }, - { 0x3c00, 0x04 }, - { 0x3a08, 0x00 }, - { 0x3a09, 0x93 }, - { 0x3a0e, 0x06 }, - { 0x3a0a, 0x00 }, - { 0x3a0b, 0x7b }, - { 0x3a0d, 0x08 }, - - { 0x3a00, 0x3c }, //15fps-10fps - { 0x3a02, 0x05 }, - { 0x3a03, 0xc4 }, - { 0x3a14, 0x05 }, - { 0x3a15, 0xc4 }, - - { 0x3618, 0x00 }, - { 0x3612, 0x29 }, - { 0x3708, 0x64 }, - { 0x3709, 0x52 }, - { 0x370c, 0x03 }, - - { 0x4001, 0x02 }, - { 0x4004, 0x02 }, - { 0x3000, 0x00 }, - { 0x3002, 0x1c }, - { 0x3004, 0xff }, - { 0x3006, 0xc3 }, - { 0x300e, 0x58 }, - { 0x302e, 0x00 }, - { 0x4300, 0x30 }, - { 0x501f, 0x00 }, - { 0x4713, 0x03 }, - { 0x4404, 0x34 }, - { 0x4407, 0x04 }, - { 0x460b, 0x35 }, - { 0x460c, 0x22 },//add by bright - { 0x3824, 0x01 },//add by bright - { 0x5001, 0xa3 }, - - { 0x3406, 0x01 },//awbinit - { 0x3400, 0x06 }, - { 0x3401, 0x80 }, - { 0x3402, 0x04 }, - { 0x3403, 0x00 }, - { 0x3404, 0x06 }, - { 0x3405, 0x00 }, - //awb - { 0x5180, 0xff }, - { 0x5181, 0xf2 }, - { 0x5182, 0x00 }, - { 0x5183, 0x14 }, - { 0x5184, 0x25 }, - { 0x5185, 0x24 }, - { 0x5186, 0x16 }, - { 0x5187, 0x16 }, - { 0x5188, 0x16 }, - { 0x5189, 0x62 }, - { 0x518a, 0x62 }, - { 0x518b, 0xf0 }, - { 0x518c, 0xb2 }, - { 0x518d, 0x50 }, - { 0x518e, 0x30 }, - { 0x518f, 0x30 }, - { 0x5190, 0x50 }, - { 0x5191, 0xf8 }, - { 0x5192, 0x04 }, - { 0x5193, 0x70 }, - { 0x5194, 0xf0 }, - { 0x5195, 0xf0 }, - { 0x5196, 0x03 }, - { 0x5197, 0x01 }, - { 0x5198, 0x04 }, - { 0x5199, 0x12 }, - { 0x519a, 0x04 }, - { 0x519b, 0x00 }, - { 0x519c, 0x06 }, - { 0x519d, 0x82 }, - { 0x519e, 0x38 }, - //color matrix - { 0x5381, 0x1e }, - { 0x5382, 0x5b }, - { 0x5383, 0x14 }, - { 0x5384, 0x06 }, - { 0x5385, 0x82 }, - { 0x5386, 0x88 }, - { 0x5387, 0x7c }, - { 0x5388, 0x60 }, - { 0x5389, 0x1c }, - { 0x538a, 0x01 }, - { 0x538b, 0x98 }, - //sharp&noise - { 0x5300, 0x08 }, - { 0x5301, 0x30 }, - { 0x5302, 0x3f }, - { 0x5303, 0x10 }, - { 0x5304, 0x08 }, - { 0x5305, 0x30 }, - { 0x5306, 0x18 }, - { 0x5307, 0x28 }, - { 0x5309, 0x08 }, - { 0x530a, 0x30 }, - { 0x530b, 0x04 }, - { 0x530c, 0x06 }, - //gamma - { 0x5480, 0x01 }, - { 0x5481, 0x06 }, - { 0x5482, 0x12 }, - { 0x5483, 0x24 }, - { 0x5484, 0x4a }, - { 0x5485, 0x58 }, - { 0x5486, 0x65 }, - { 0x5487, 0x72 }, - { 0x5488, 0x7d }, - { 0x5489, 0x88 }, - { 0x548a, 0x92 }, - { 0x548b, 0xa3 }, - { 0x548c, 0xb2 }, - { 0x548d, 0xc8 }, - { 0x548e, 0xdd }, - { 0x548f, 0xf0 }, - { 0x5490, 0x15 }, - //UV adjust - { 0x5580, 0x06 }, - { 0x5583, 0x40 }, - { 0x5584, 0x20 }, - { 0x5589, 0x10 }, - { 0x558a, 0x00 }, - { 0x558b, 0xf8 }, - //lens shading - { 0x5000, 0xa7 }, - { 0x5800, 0x20 }, - { 0x5801, 0x19 }, - { 0x5802, 0x17 }, - { 0x5803, 0x16 }, - { 0x5804, 0x18 }, - { 0x5805, 0x21 }, - { 0x5806, 0x0F }, - { 0x5807, 0x0A }, - { 0x5808, 0x07 }, - { 0x5809, 0x07 }, - { 0x580a, 0x0A }, - { 0x580b, 0x0C }, - { 0x580c, 0x0A }, - { 0x580d, 0x03 }, - { 0x580e, 0x01 }, - { 0x580f, 0x01 }, - { 0x5810, 0x03 }, - { 0x5811, 0x09 }, - { 0x5812, 0x0A }, - { 0x5813, 0x03 }, - { 0x5814, 0x01 }, - { 0x5815, 0x01 }, - { 0x5816, 0x03 }, - { 0x5817, 0x08 }, - { 0x5818, 0x10 }, - { 0x5819, 0x0A }, - { 0x581a, 0x06 }, - { 0x581b, 0x06 }, - { 0x581c, 0x08 }, - { 0x581d, 0x0E }, - { 0x581e, 0x22 }, - { 0x581f, 0x18 }, - { 0x5820, 0x13 }, - { 0x5821, 0x12 }, - { 0x5822, 0x16 }, - { 0x5823, 0x1E }, - { 0x5824, 0x64 }, - { 0x5825, 0x2A }, - { 0x5826, 0x2C }, - { 0x5827, 0x2A }, - { 0x5828, 0x46 }, - { 0x5829, 0x2A }, - { 0x582a, 0x26 }, - { 0x582b, 0x24 }, - { 0x582c, 0x26 }, - { 0x582d, 0x2A }, - { 0x582e, 0x28 }, - { 0x582f, 0x42 }, - { 0x5830, 0x40 }, - { 0x5831, 0x42 }, - { 0x5832, 0x08 }, - { 0x5833, 0x28 }, - { 0x5834, 0x26 }, - { 0x5835, 0x24 }, - { 0x5836, 0x26 }, - { 0x5837, 0x2A }, - { 0x5838, 0x44 }, - { 0x5839, 0x4A }, - { 0x583a, 0x2C }, - { 0x583b, 0x2a }, - { 0x583c, 0x46 }, - { 0x583d, 0xCE }, - - { 0x5688, 0x22 }, - { 0x5689, 0x22 }, - { 0x568a, 0x42 }, - { 0x568b, 0x24 }, - { 0x568c, 0x42 }, - { 0x568d, 0x24 }, - { 0x568e, 0x22 }, - { 0x568f, 0x22 }, - - { 0x5025, 0x00 }, - - { 0x3a0f, 0x30 }, - { 0x3a10, 0x28 }, - { 0x3a1b, 0x30 }, - { 0x3a1e, 0x28 }, - { 0x3a11, 0x61 }, - { 0x3a1f, 0x10 }, - - { 0x4005, 0x1a }, - { 0x3406, 0x00 },//awbinit - { 0x3503, 0x00 },//awbinit - { 0x3008, 0x02 }, - { 0xffff, 0xff }, + //windows setup + { 0x3800, 0x00 }, + { 0x3801, 0x00 }, + { 0x3802, 0x00 }, + { 0x3803, 0x04 }, + { 0x3804, 0x0a }, + { 0x3805, 0x3f }, + { 0x3806, 0x07 }, + { 0x3807, 0x9b }, + { 0x3808, 0x05 }, + { 0x3809, 0x00 }, + { 0x380a, 0x03 }, + { 0x380b, 0xc0 }, + { 0x3810, 0x00 }, + { 0x3811, 0x10 }, + { 0x3812, 0x00 }, + { 0x3813, 0x06 }, + { 0x3814, 0x31 }, + { 0x3815, 0x31 }, + + { 0x3034, 0x1a }, + { 0x3035, 0x21 }, //15fps + { 0x3036, 0x46 }, + { 0x3037, 0x03 }, + { 0x3038, 0x00 }, + { 0x3039, 0x00 }, + + { 0x380c, 0x07 }, + { 0x380d, 0x68 }, + { 0x380e, 0x03 }, //03 + { 0x380f, 0xd8 }, //d8 + + { 0x3c01, 0xb4 }, + { 0x3c00, 0x04 }, + { 0x3a08, 0x00 }, + { 0x3a09, 0x93 }, + { 0x3a0e, 0x06 }, + { 0x3a0a, 0x00 }, + { 0x3a0b, 0x7b }, + { 0x3a0d, 0x08 }, + + { 0x3a00, 0x3c }, //15fps-10fps + { 0x3a02, 0x05 }, + { 0x3a03, 0xc4 }, + { 0x3a14, 0x05 }, + { 0x3a15, 0xc4 }, + + { 0x3618, 0x00 }, + { 0x3612, 0x29 }, + { 0x3708, 0x64 }, + { 0x3709, 0x52 }, + { 0x370c, 0x03 }, + + { 0x4001, 0x02 }, + { 0x4004, 0x02 }, + { 0x3000, 0x00 }, + { 0x3002, 0x1c }, + { 0x3004, 0xff }, + { 0x3006, 0xc3 }, + { 0x300e, 0x58 }, + { 0x302e, 0x00 }, + { 0x4300, 0x30 }, + { 0x501f, 0x00 }, + { 0x4713, 0x03 }, + { 0x4407, 0x04 }, + { 0x460b, 0x35 }, + { 0x460c, 0x22 },//add by bright + { 0x3824, 0x01 },//add by bright + { 0x5001, 0xa3 }, + + { 0x3406, 0x01 },//awbinit + { 0x3400, 0x06 }, + { 0x3401, 0x80 }, + { 0x3402, 0x04 }, + { 0x3403, 0x00 }, + { 0x3404, 0x06 }, + { 0x3405, 0x00 }, + //awb + { 0x5180, 0xff }, + { 0x5181, 0xf2 }, + { 0x5182, 0x00 }, + { 0x5183, 0x14 }, + { 0x5184, 0x25 }, + { 0x5185, 0x24 }, + { 0x5186, 0x16 }, + { 0x5187, 0x16 }, + { 0x5188, 0x16 }, + { 0x5189, 0x62 }, + { 0x518a, 0x62 }, + { 0x518b, 0xf0 }, + { 0x518c, 0xb2 }, + { 0x518d, 0x50 }, + { 0x518e, 0x30 }, + { 0x518f, 0x30 }, + { 0x5190, 0x50 }, + { 0x5191, 0xf8 }, + { 0x5192, 0x04 }, + { 0x5193, 0x70 }, + { 0x5194, 0xf0 }, + { 0x5195, 0xf0 }, + { 0x5196, 0x03 }, + { 0x5197, 0x01 }, + { 0x5198, 0x04 }, + { 0x5199, 0x12 }, + { 0x519a, 0x04 }, + { 0x519b, 0x00 }, + { 0x519c, 0x06 }, + { 0x519d, 0x82 }, + { 0x519e, 0x38 }, + //color matrix + { 0x5381, 0x1e }, + { 0x5382, 0x5b }, + { 0x5383, 0x14 }, + { 0x5384, 0x06 }, + { 0x5385, 0x82 }, + { 0x5386, 0x88 }, + { 0x5387, 0x7c }, + { 0x5388, 0x60 }, + { 0x5389, 0x1c }, + { 0x538a, 0x01 }, + { 0x538b, 0x98 }, + //sharp&noise + { 0x5300, 0x08 }, + { 0x5301, 0x30 }, + { 0x5302, 0x3f }, + { 0x5303, 0x10 }, + { 0x5304, 0x08 }, + { 0x5305, 0x30 }, + { 0x5306, 0x18 }, + { 0x5307, 0x28 }, + { 0x5309, 0x08 }, + { 0x530a, 0x30 }, + { 0x530b, 0x04 }, + { 0x530c, 0x06 }, + //gamma + { 0x5480, 0x01 }, + { 0x5481, 0x06 }, + { 0x5482, 0x12 }, + { 0x5483, 0x24 }, + { 0x5484, 0x4a }, + { 0x5485, 0x58 }, + { 0x5486, 0x65 }, + { 0x5487, 0x72 }, + { 0x5488, 0x7d }, + { 0x5489, 0x88 }, + { 0x548a, 0x92 }, + { 0x548b, 0xa3 }, + { 0x548c, 0xb2 }, + { 0x548d, 0xc8 }, + { 0x548e, 0xdd }, + { 0x548f, 0xf0 }, + { 0x5490, 0x15 }, + //UV adjust + { 0x5580, 0x06 }, + { 0x5583, 0x40 }, + { 0x5584, 0x20 }, + { 0x5589, 0x10 }, + { 0x558a, 0x00 }, + { 0x558b, 0xf8 }, + //lens shading + { 0x5000, 0xa7 }, + { 0x5800, 0x20 }, + { 0x5801, 0x19 }, + { 0x5802, 0x17 }, + { 0x5803, 0x16 }, + { 0x5804, 0x18 }, + { 0x5805, 0x21 }, + { 0x5806, 0x0F }, + { 0x5807, 0x0A }, + { 0x5808, 0x07 }, + { 0x5809, 0x07 }, + { 0x580a, 0x0A }, + { 0x580b, 0x0C }, + { 0x580c, 0x0A }, + { 0x580d, 0x03 }, + { 0x580e, 0x01 }, + { 0x580f, 0x01 }, + { 0x5810, 0x03 }, + { 0x5811, 0x09 }, + { 0x5812, 0x0A }, + { 0x5813, 0x03 }, + { 0x5814, 0x01 }, + { 0x5815, 0x01 }, + { 0x5816, 0x03 }, + { 0x5817, 0x08 }, + { 0x5818, 0x10 }, + { 0x5819, 0x0A }, + { 0x581a, 0x06 }, + { 0x581b, 0x06 }, + { 0x581c, 0x08 }, + { 0x581d, 0x0E }, + { 0x581e, 0x22 }, + { 0x581f, 0x18 }, + { 0x5820, 0x13 }, + { 0x5821, 0x12 }, + { 0x5822, 0x16 }, + { 0x5823, 0x1E }, + { 0x5824, 0x64 }, + { 0x5825, 0x2A }, + { 0x5826, 0x2C }, + { 0x5827, 0x2A }, + { 0x5828, 0x46 }, + { 0x5829, 0x2A }, + { 0x582a, 0x26 }, + { 0x582b, 0x24 }, + { 0x582c, 0x26 }, + { 0x582d, 0x2A }, + { 0x582e, 0x28 }, + { 0x582f, 0x42 }, + { 0x5830, 0x40 }, + { 0x5831, 0x42 }, + { 0x5832, 0x08 }, + { 0x5833, 0x28 }, + { 0x5834, 0x26 }, + { 0x5835, 0x24 }, + { 0x5836, 0x26 }, + { 0x5837, 0x2A }, + { 0x5838, 0x44 }, + { 0x5839, 0x4A }, + { 0x583a, 0x2C }, + { 0x583b, 0x2a }, + { 0x583c, 0x46 }, + { 0x583d, 0xCE }, + + { 0x5688, 0x22 }, + { 0x5689, 0x22 }, + { 0x568a, 0x42 }, + { 0x568b, 0x24 }, + { 0x568c, 0x42 }, + { 0x568d, 0x24 }, + { 0x568e, 0x22 }, + { 0x568f, 0x22 }, + + { 0x5025, 0x00 }, + + { 0x3a0f, 0x30 }, + { 0x3a10, 0x28 }, + { 0x3a1b, 0x30 }, + { 0x3a1e, 0x28 }, + { 0x3a11, 0x61 }, + { 0x3a1f, 0x10 }, + + { 0x4005, 0x1a }, + { 0x3406, 0x00 },//awbinit + { 0x3503, 0x00 },//awbinit + { 0x3008, 0x02 }, +{ 0xffff, 0xff }, }; -static const struct regval_list ov5640_vga_preview[] = -{ - // YUV VGA 30fps, night mode 5fps - // Input Clock = 24Mhz, PCLK = 56MHz - { 0x3035, 0x11 }, // PLL - { 0x3036, 0x46 }, // PLL - { 0x3c07, 0x08 }, // light meter 1 threshold [7:0] - { 0x3820, 0x46 }, // Sensor flip off, ISP flip on - { 0x3821, 0x01 }, // Sensor mirror on, ISP mirror on, H binning on - { 0x3814, 0x31 }, // X INC - { 0x3815, 0x31 }, // Y INC - { 0x3800, 0x00 }, // HS - { 0x3801, 0x00 }, // HS - { 0x3802, 0x00 }, // VS - { 0x3803, 0x04 }, // VS - { 0x3804, 0x0a }, // HW (HE) - { 0x3805, 0x3f }, // HW (HE) - { 0x3806, 0x07 }, // VH (VE) - { 0x3807, 0x9b }, // VH (VE) - { 0x3808, 0x02 }, // DVPHO - { 0x3809, 0x80 }, // DVPHO - { 0x380a, 0x01 }, // DVPVO - { 0x380b, 0xe0 }, // DVPVO - { 0x380c, 0x07 }, // HTS - { 0x380d, 0x68 }, // HTS - { 0x380e, 0x03 }, // VTS - { 0x380f, 0xd8 }, // VTS - { 0x3813, 0x06 }, // Timing Voffset - { 0x3618, 0x00 }, - { 0x3612, 0x29 }, - { 0x3709, 0x52 }, - { 0x370c, 0x03 }, - { 0x3a02, 0x17 }, // 60Hz max exposure, night mode 5fps - { 0x3a03, 0x10 }, // 60Hz max exposure - // banding filters are calculated automatically in camera driver - //{ 0x3a08, 0x01 }, // B50 step - //{ 0x3a09, 0x27 }, // B50 step - //{ 0x3a0a, 0x00 }, // B60 step - //{ 0x3a0b, 0xf6 }, // B60 step - //{ 0x3a0e, 0x03 }, // 50Hz max band - //{ 0x3a0d, 0x04 }, // 60Hz max band - { 0x3a14, 0x17 }, // 50Hz max exposure, night mode 5fps - { 0x3a15, 0x10 }, // 50Hz max exposure - { 0x4004, 0x02 }, // BLC 2 lines - { 0x3002, 0x1c }, // reset JFIFO, SFIFO, JPEG - { 0x3006, 0xc3 }, // disable clock of JPEG2x, JPEG - { 0x4713, 0x03 }, // JPEG mode 3 - { 0x4407, 0x04 }, // Quantization scale - { 0x460b, 0x35 }, - { 0x460c, 0x22 }, - { 0x4837, 0x22 }, // DVP CLK divider - { 0x3824, 0x02 }, // DVP CLK divider - { 0x5001, 0xa3 }, // SDE on, scale on, UV average off, color matrix on, AWB on - { 0x3503, 0x00 }, // AEC/AGC on -}; - -static const struct regval_list OV5640_RGB_QVGA[] = -{ - {0x3008, 0x02}, - {0x3035, 0x11}, - {0x4740, 0x21}, - {0x4300, 0x61}, - {0x3808, 0x01}, - {0x3809, 0x40}, - {0x380a, 0x00}, - {0x380b, 0xf0}, - {0x501f, 0x01}, - {0xffff, 0xff}, -}; - //2592x1944 QSXGA static const struct regval_list OV5640_JPEG_QSXGA[] = { - {0x3820 ,0x46}, - {0x3821 ,0x20}, - {0x3814 ,0x11}, - {0x3815 ,0x11}, - {0x3803 ,0x00}, - {0x3807 ,0x9f}, - {0x3808 ,0x0a}, - {0x3809 ,0x20}, - {0x380a ,0x07}, - {0x380b ,0x98}, - {0x380c ,0x0b}, - {0x380d ,0x1c}, - {0x380e ,0x07}, - {0x380f ,0xb0}, - {0x3813 ,0x04}, - {0x3618 ,0x04}, - {0x3612 ,0x4b}, - {0x3708 ,0x64}, - {0x3709 ,0x12}, - {0x370c ,0x00}, - {0x3a02 ,0x07}, - {0x3a03 ,0xb0}, - {0x3a0e ,0x06}, - {0x3a0d ,0x08}, - {0x3a14 ,0x07}, - {0x3a15 ,0xb0}, - {0x4001 ,0x02}, - {0x4004 ,0x06}, - {0x3002 ,0x00}, - {0x3006 ,0xff}, - {0x3824 ,0x04}, - {0x5001 ,0x83}, - {0x3036 ,0x69}, - {0x3035 ,0x12}, - {0x4005 ,0x1A}, - {0xffff, 0xff}, + {0x3820 ,0x40}, + {0x3821 ,0x26}, + {0x3814 ,0x11}, + {0x3815 ,0x11}, + {0x3803 ,0x00}, + {0x3807 ,0x9f}, + {0x3808 ,0x0a}, + {0x3809 ,0x20}, + {0x380a ,0x07}, + {0x380b ,0x98}, + {0x380c ,0x0b}, + {0x380d ,0x1c}, + {0x380e ,0x07}, + {0x380f ,0xb0}, + {0x3813 ,0x04}, + {0x3618 ,0x04}, + {0x3612 ,0x4b}, + {0x3708 ,0x64}, + {0x3709 ,0x12}, + {0x370c ,0x00}, + {0x3a02 ,0x07}, + {0x3a03 ,0xb0}, + {0x3a0e ,0x06}, + {0x3a0d ,0x08}, + {0x3a14 ,0x07}, + {0x3a15 ,0xb0}, + {0x4001 ,0x02}, + {0x4004 ,0x06}, + {0x3002 ,0x00}, + {0x3006 ,0xff}, + {0x3824 ,0x04}, + {0x5001 ,0x83}, + {0x3036 ,0x69}, + {0x3035 ,0x31}, + {0x4005 ,0x1A}, +{0xffff, 0xff}, }; //5MP @@ -531,32 +460,32 @@ static const struct regval_list OV5640_QSXGA2QQVGA[] = //640x480 VGA static const struct regval_list OV5640_QSXGA2VGA[] = { - {0x3800 ,0x00}, - {0x3801 ,0x00}, - {0x3802 ,0x00}, - {0x3803 ,0x00}, - {0x3804 ,0xA }, - {0x3805 ,0x3f}, - {0x3806 ,0x7 }, - {0x3807 ,0x9f}, - {0x3808 ,0x2 }, - {0x3809 ,0x80}, - {0x380a ,0x1 }, - {0x380b ,0xe0}, - {0x380c ,0xc }, - {0x380d ,0x80}, - {0x380e ,0x7 }, - {0x380f ,0xd0}, - {0x5001 ,0xa3}, - {0x5680 ,0x0 }, - {0x5681 ,0x0 }, - {0x5682 ,0xA }, - {0x5683 ,0x20}, - {0x5684 ,0x0 }, - {0x5685 ,0x0 }, - {0x5686 ,0x7 }, - {0x5687 ,0x98}, - {0xffff, 0xff}, + {0x3800 ,0x00}, + {0x3801 ,0x00}, + {0x3802 ,0x00}, + {0x3803 ,0x00}, + {0x3804 ,0xA }, + {0x3805 ,0x3f}, + {0x3806 ,0x7 }, + {0x3807 ,0x9f}, + {0x3808 ,0x2 }, + {0x3809 ,0x80}, + {0x380a ,0x1 }, + {0x380b ,0xe0}, + {0x380c ,0xc }, + {0x380d ,0x80}, + {0x380e ,0x7 }, + {0x380f ,0xd0}, + {0x5001 ,0xa3}, + {0x5680 ,0x0 }, + {0x5681 ,0x0 }, + {0x5682 ,0xA }, + {0x5683 ,0x20}, + {0x5684 ,0x0 }, + {0x5685 ,0x0 }, + {0x5686 ,0x7 }, + {0x5687 ,0x98}, +{0xffff, 0xff}, }; //800x480 WVGA @@ -1015,7 +944,7 @@ static void dma_interrupt(void *p, uint32_t flags) { dma_flags = flags; dmaStreamClearInterrupt(dmastp); - if (flags & (STM32_DMA_ISR_FEIF | STM32_DMA_ISR_TEIF } STM32_DMA_ISR_DMEIF)) { + if (flags & (STM32_DMA_ISR_FEIF | STM32_DMA_ISR_TEIF | STM32_DMA_ISR_DMEIF)) { /* * DMA transfer error, FIFO error or Direct mode error. * See 9.34.19 of RM0430. @@ -1144,7 +1073,7 @@ bool OV5640_Capture(uint8_t* buffer, uint32_t size) /* Setup DMA for transfer on TIM1_TRIG - DMA2 stream 0, channel 6 */ dmastp = STM32_DMA_STREAM(STM32_DMA_STREAM_ID(2, 0)); uint32_t dmamode = STM32_DMA_CR_CHSEL(6) | - STM32_DMA_CR_PL(3) | + STM32_DMA_CR_PL(1) | STM32_DMA_CR_DIR_P2M | STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_MBURST_INCR4 | @@ -1158,7 +1087,7 @@ bool OV5640_Capture(uint8_t* buffer, uint32_t size) #endif STM32_DMA_CR_TCIE; - dmaStreamAllocate(dmastp, 2, (stm32_dmaisr_t)dma_interrupt, NULL); + dmaStreamAllocate(dmastp, 1, (stm32_dmaisr_t)dma_interrupt, NULL); dmaStreamSetPeripheral(dmastp, &GPIOA->IDR); // We want to read the data from here diff --git a/tracker/software/drivers/ov5640.h b/tracker/software/drivers/ov5640.h index f729942..52b90db 100644 --- a/tracker/software/drivers/ov5640.h +++ b/tracker/software/drivers/ov5640.h @@ -9,7 +9,7 @@ #include "hal.h" #include "types.h" -#define OV5640_USE_DMA_DBM TRUE +#define OV5640_USE_DMA_DBM FALSE uint32_t OV5640_Snapshot2RAM(uint8_t* buffer, uint32_t size, resolution_t resolution, bool enableJpegValidation); bool OV5640_Capture(uint8_t* buffer, uint32_t size); diff --git a/tracker/software/drivers/pac1720.c b/tracker/software/drivers/pac1720.c index ad34742..1353aaa 100644 --- a/tracker/software/drivers/pac1720.c +++ b/tracker/software/drivers/pac1720.c @@ -152,7 +152,7 @@ void pac1720_init(void) I2C_write8(PAC1720_ADDRESS, PAC1720_CH2_VSENSE_SAMP_CONFIG, 0x5F); I2C_write8(PAC1720_ADDRESS, PAC1720_V_SOURCE_SAMP_CONFIG, 0xFF); - //TRACE_INFO("PAC > Init PAC1720 continuous measurement"); + TRACE_INFO("PAC > Init PAC1720 continuous measurement"); chThdCreateFromHeap(NULL, THD_WORKING_AREA_SIZE(512), "PAC1720", NORMALPRIO, pac1720_thd, NULL); } diff --git a/tracker/software/mcuconf.h b/tracker/software/mcuconf.h index de95b66..577c984 100644 --- a/tracker/software/mcuconf.h +++ b/tracker/software/mcuconf.h @@ -60,7 +60,7 @@ #define STM32_RTCSEL STM32_RTCSEL_LSI #define STM32_RTCPRE_VALUE 8 #define STM32_MCO1SEL STM32_MCO1SEL_PLL -#define STM32_MCO1PRE STM32_MCO1PRE_DIV4 +#define STM32_MCO1PRE STM32_MCO1PRE_DIV2 #define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK #define STM32_MCO2PRE STM32_MCO2PRE_DIV5 #define STM32_I2SSRC STM32_I2SSRC_CKIN diff --git a/tracker/software/threads/position.c b/tracker/software/threads/position.c index 7ff285d..0202ac2 100644 --- a/tracker/software/threads/position.c +++ b/tracker/software/threads/position.c @@ -218,7 +218,7 @@ void start_position_thread(module_conf_t *conf) // Start position thread TRACE_INFO("POS > Startup position thread"); chsnprintf(conf->name, sizeof(conf->name), "POS"); - thread_t *th = chThdCreateFromHeap(NULL, THD_WORKING_AREA_SIZE(10*1024), "POS", NORMALPRIO, posThread, conf); + thread_t *th = chThdCreateFromHeap(NULL, THD_WORKING_AREA_SIZE(20*1024), "POS", NORMALPRIO, posThread, conf); if(!th) { // Print startup error, do not start watchdog for this thread TRACE_ERROR("POS > Could not startup thread (not enough memory available)");