摄像头模块测试
总结:关于摄像头模块,这周是花了自己特别多的时间的,问了特别多次,还好最后测试了完成了摄像头模块的测试。不算一波三折吧,虽然全是学长给的代码,但慢慢的调试过程中,自己也学到了很多知识。
camera.driver.c
#ifndef _CAMERA_DRIVER_H_
#define _CAMERA_DRIVER_H_
//本文件编辑选择宏,0是不编译,1是编译
#define CAMERA_TO_IMAGE_CHOOSE 1
#if CAMERA_TO_IMAGE_CHOOSE==1
#define START_ROW 80
#define END_ROW 185
#endif
//************移置主板宏定义中************
//摄像头引脚分配
#define H_GPIO_PORT (PTB)
#define H_PIN (GPIO_Pin23)
#define H_NUM (23)
#define H_PORT (PORTB)
#define H_PORT_IRQn (PORTB_IRQn)
#define V_GPIO_PORT (PTC)
#define V_PIN (GPIO_Pin18)
#define V_NUM (18)
#define V_PORT (PORTC)
#define V_PORT_IRQn (PORTC_IRQn)
#define DATA_GPIO_PORT (PTD)
#define DATA_PIN (GPIO_Pin0_7)
#define PCLK_GPIO_PORT (PTC)
#define PCLK_PIN (GPIO_Pin19)
#define PCLK_NUM (19)
#define PCLK_PORT (PORTC)
#define PCLK_DMA_REQn (PORTC_DMAREQ)
//图像宏定义
#define IMAGE_HEIGHT 64 //提取后图像高度,必须是四的倍数
#define IMAGE_WIDTH 128 //提取后图像宽度
//摄像头的白色为0,黑色为1
//而液晶的白色为1,黑色为0,最终图像由液晶显示,故如下定义
#define IMAGE_WHITE 1 //白像素
#define IMAGE_BLACK 0 //黑像素
#define IMAGE_SIZE (IMAGE_WIDTH * IMAGE_HEIGHT) //压缩后一副图像大小
//配置摄像头 属性
#define CAMERA_W 320 //定义摄像头图像宽度
#define CAMERA_H 240 //定义摄像头图像高度
#define CAMERA_SIZE (CAMERA_W * CAMERA_H/8) //图像占用空间大小
#define CAMERA_DMA_NUM (CAMERA_SIZE) //DMA采集次数
#define CAMERA_ROW_DMA_NUM (CAMERA_W / 8) //行DMA采集次数,必须是4的倍数
#define CAMERA_DATA_NUM (CAMERA_W * CAMERA_H) //数据个数
#define CAMERA_FPS (50) //50 or 75 or 112 or 150
//从图中提取的开始位置和结束位置
#define COLUMN_START 25//10
#define COLUMN_END 275//310
#define COLUMN_NUM 250//300
#define ROW_START 0
#define ROW_END 215
#define ROW_NUM 215
//DMA初始化数据
#define DMA_REQ (PCLK_DMA_REQn) //DMA请求源
#define DMA_CHX DMA_CH0 //DMA选择通道
#define DMA_MAJOR_LOOP CAMERA_ROW_DMA_NUM //DMA主循环次数,每行传输完毕后自动关闭
#define DMA_MINER_BYTE 1 //DMA副循环传输字节数
#define DMA_SOURCE_ADDR (uint32)&(DATA_GPIO_PORT->PDIR) //传输源地址:PTD0~7
#define DMA_DEST_ADDR (uint32)gl_Image0 //传输目的地址
#define DMA_SOURCE_DATA_SIZE DMA_DST_8BIT //源数据传输宽度,1个字节
#define DMA_SOURCE_ADDR_OFFSET 0 //源地址偏移量
#define DMA_DEST_DATA_SIZE DMA_DST_8BIT //目的数据传输宽度
#define DMA_DEST_ADDR_OFFSET 1 //目的地址偏移量
//摄像头初始化
void Camera_Init();
//摄像头引脚初始化(内部调用)
void Camera_GPIO_Init();
//摄像头DMA初始化(内部调用)
void Camera_DMA_Init();
//使能摄像头
void CameraStart();
//关闭摄像头
void CameraClose();
//解压函数
void ImgExtract(uint8 *, uint8 *, uint32 );//图像解压函数,图像字节数必须是4的倍数!!!
//压缩函数
void ImgCompress_128x64(uint8 *src, uint8 (*image)[IMAGE_WIDTH]);//图像压缩为128行64列
//中断函数
void camera_h_isr();//行中断
void camera_v_isr();//场中断
//摄像头数据处理中断函数
void camera_process_isr();
//均匀地取行取列
void init_get_colrow_array();
#endif
对于头文件分析,比较重要的有以下几个部分:
1.PCLK_DMA_EQRn : 像素点的同步时钟信号。也就是每个PCLK对应一个像素点,与DMA有关,详细的并未了解
2.V_PORT_IRQn:场中断,就是摄像头捕获的一个图像产生的一个中断
3.H_PORT_IRQn:行中断,就是每捕获一行产生一个中断
/*
*本文件用于:
*摄像头的底层驱动,重要的是解压和压缩函数;
*摄像头传输至单片机的图像顺序为由远处到近处,本文件接收其的原始数组存储顺序也是由远存储至近;
*即:gl_Image0[CAMERA_SIZE]、gl_Image1[CAMERA_SIZE],为由远及近;
*ImgExtract(uint8 *src, uint8 *dst, u32 colomn)不改变存储顺序,只进行解压,得到数组gl_ImageFull[CAMERA_W * IMAGE_HEIGHT]也是行小为远,行大为近;
*经ImgCompress_128x64(uint8 *src, uint8 (*image)[IMAGE_WIDTH]),压缩时顺序改变,改为gl_ImageCompress[IMAGE_HEIGHT][IMAGE_WIDTH]行大为远,行小为近;
*显示图像时需要注意调整显示函数:(oled是先显示远后显示近,由oled上方显示到下方,即需要上下颠倒)。
*/
#include "include.h"
uint8 gl_Image0[CAMERA_SIZE]; //0号dma数据接收数组
uint8 gl_Image1[CAMERA_SIZE]; //1号dma数据接收数组
uint8 gl_ImageFull[CAMERA_W * IMAGE_HEIGHT]; //由gl_Imagex解压来的储存所有像素点的数组
uint8 gl_ImageCompress[IMAGE_HEIGHT][IMAGE_WIDTH];//压缩后储存图像的最终数组
uint8 gl_now_flag = 0; //目前正在存储的图像标志
//取行数组(全局变量)
uint16 row[IMAGE_HEIGHT]={
86,87,88,89,
90,91,92,93,94,95,96,97,98,99,
100,101,102,103,104,105,106,107,108,109,
111,112,114,115,117,118,119,
120,123,124,125,127,128,129,
130,131,132,133,134,135,137,139,
141,143,145,147,149,
151,153,155,157,159,
161,163,165,167,169,
171,173,175
}
uint16 RowCol[IMAGE_HEIGHT][IMAGE_WIDTH]=
{
63, 65, 66, 68, 69, 71, 72, 74, 75, 77,
78, 80, 81, 83, 84, 86, 87, 89, 90, 92,
93, 95, 96, 98, 99, 101, 103, 104, 106, 107,
109, 110, 112, 113, 115, 116, 118, 119, 121, 122,
124, 125, 127, 128, 130, 131, 133, 134, 136, 137,
139, 141, 142, 144, 145, 147, 148, 150, 151, 153,
154, 156, 157, 159, 160, 162, 163, 165, 166, 168,
169, 171, 172, 174, 175, 177, 178, 180, 182, 183,
185, 186, 188, 189, 191, 192, 194, 195, 197, 198,
200, 201, 203, 204, 206, 207, 209, 210, 212, 213,
215, 216, 218, 220, 221, 223, 224, 226, 227, 229,
230, 232, 233, 235, 236, 238, 239, 241, 242, 244,
245, 247, 248, 250, 251, 253, 254, 256,
61, 63, 64, 66, 67, 69, 70, 72, 73, 75,
77, 78, 80, 81, 83, 84, 86, 87, 89, 90,
92, 94, 95, 97, 98, 100, 101, 103, 104, 106,
108, 109, 111, 112, 114, 115, 117, 118, 120, 121,
123, 125, 126, 128, 129, 131, 132, 134, 135, 137,
139, 140, 142, 143, 145, 146, 148, 149, 151, 153,
154, 156, 157, 159, 160, 162, 163, 165, 166, 168,
170, 171, 173, 174, 176, 177, 179, 180, 182, 184,
185, 187, 188, 190, 191, 193, 194, 196, 198, 199,
201, 202, 204, 205, 207, 208, 210, 211, 213, 215,
216, 218, 219, 221, 222, 224, 225, 227, 229, 230,
232, 233, 235, 236, 238, 239, 241, 242, 244, 246,
247, 249, 250, 252, 253, 255, 256, 258,
59, 61, 62, 64, 65, 67, 68, 70, 72, 73,
75, 76, 78, 80, 81, 83, 84, 86, 87, 89,
91, 92, 94, 95, 97, 99, 100, 102, 103, 105,
106, 108, 110, 111, 113, 114, 116, 118, 119, 121,
122, 124, 125, 127, 129, 130, 132, 133, 135, 137,
138, 140, 141, 143, 144, 146, 148, 149, 151, 152,
154, 156, 157, 159, 160, 162, 163, 165, 167, 168,
170, 171, 173, 175, 176, 178, 179, 181, 182, 184,
186, 187, 189, 190, 192, 194, 195, 197, 198, 200,
201, 203, 205, 206, 208, 209, 211, 213, 214, 216,
217, 219, 220, 222, 224, 225, 227, 228, 230, 232,
233, 235, 236, 238, 239, 241, 243, 244, 246, 247,
249, 251, 252, 254, 255, 257, 258, 260,
57, 59, 60, 62, 63, 65, 67, 68, 70, 72,
73, 75, 76, 78, 80, 81, 83, 84, 86, 88,
89, 91, 93, 94, 96, 97, 99, 101, 102, 104,
105, 107, 109, 110, 112, 113, 115, 117, 118, 120,
122, 123, 125, 126, 128, 130, 131, 133, 134, 136,
138, 139, 141, 143, 144, 146, 147, 149, 151, 152,
154, 155, 157, 159, 160, 162, 164, 165, 167, 168,
170, 172, 173, 175, 176, 178, 180, 181, 183, 185,
186, 188, 189, 191, 193, 194, 196, 197, 199, 201,
202, 204, 206, 207, 209, 210, 212, 214, 215, 217,
218, 220, 222, 223, 225, 226, 228, 230, 231, 233,
235, 236, 238, 239, 241, 243, 244, 246, 247, 249,
251, 252, 254, 256, 257, 259, 260, 262,
55, 57, 58, 60, 62, 63, 65, 67, 68, 70,
71, 73, 75, 76, 78, 80, 81, 83, 85, 86,
88, 90, 91, 93, 94, 96, 98, 99, 101, 103,
104, 106, 108, 109, 111, 113, 114, 116, 118, 119,
121, 122, 124, 126, 127, 129, 131, 132, 134, 136,
137, 139, 141, 142, 144, 146, 147, 149, 150, 152,
154, 155, 157, 159, 160, 162, 164, 165, 167, 169,
170, 172, 173, 175, 177, 178, 180, 182, 183, 185,
187, 188, 190, 192, 193, 195, 197, 198, 200, 201,
203, 205, 206, 208, 210, 211, 213, 215, 216, 218,
220, 221, 223, 225, 226, 228, 229, 231, 233, 234,
236, 238, 239, 241, 243, 244, 246, 248, 249, 251,
252, 254, 256, 257, 259, 261, 262, 264,
53, 55, 56, 58, 60, 61, 63, 65, 66, 68,
70, 71, 73, 75, 76, 78, 80, 82, 83, 85,
87, 88, 90, 92, 93, 95, 97, 98, 100, 102,
103, 105, 107, 108, 110, 112, 113, 115, 117, 118,
120, 122, 123, 125, 127, 128, 130, 132, 134, 135,
137, 139, 140, 142, 144, 145, 147, 149, 150, 152,
154, 155, 157, 159, 160, 162, 164, 165, 167, 169,
170, 172, 174, 175, 177, 179, 180, 182, 184, 185,
187, 189, 191, 192, 194, 196, 197, 199, 201, 202,
204, 206, 207, 209, 211, 212, 214, 216, 217, 219,
221, 222, 224, 226, 227, 229, 231, 232, 234, 236,
237, 239, 241, 243, 244, 246, 248, 249, 251, 253,
254, 256, 258, 259, 261, 263, 264, 266,
51, 53, 54, 56, 58, 60, 61, 63, 65, 66,
68, 70, 72, 73, 75, 77, 78, 80, 82, 83,
85, 87, 89, 90, 92, 94, 95, 97, 99, 101,
102, 104, 106, 107, 109, 111, 113, 114, 116, 118,
119, 121, 123, 124, 126, 128, 130, 131, 133, 135,
136, 138, 140, 142, 143, 145, 147, 148, 150, 152,
154, 155, 157, 159, 160, 162, 164, 165, 167, 169,
171, 172, 174, 176, 177, 179, 181, 183, 184, 186,
188, 189, 191, 193, 195, 196, 198, 200, 201, 203,
205, 206, 208, 210, 212, 213, 215, 217, 218, 220,
222, 224, 225, 227, 229, 230, 232, 234, 236, 237,
239, 241, 242, 244, 246, 247, 249, 251, 253, 254,
256, 258, 259, 261, 263, 265, 266, 268,
48, 50, 52, 53, 55, 57, 59, 60, 62, 64,
66, 67, 69, 71, 73, 74, 76, 78, 80, 81,
83, 85, 87, 88, 90, 92, 94, 95, 97, 99,
101, 102, 104, 106, 108, 109, 111, 113, 115, 116,
118, 120, 122, 124, 125, 127, 129, 131, 132, 134,
136, 138, 139, 141, 143, 145, 146, 148, 150, 152,
153, 155, 157, 159, 160, 162, 164, 166, 167, 169,
171, 173, 174, 176, 178, 180, 181, 183, 185, 187,
188, 190, 192, 194, 195, 197, 199, 201, 203, 204,
206, 208, 210, 211, 213, 215, 217, 218, 220, 222,
224, 225, 227, 229, 231, 232, 234, 236, 238, 239,
241, 243, 245, 246, 248, 250, 252, 253, 255, 257,
259, 260, 262, 264, 266, 267, 269, 271,
47, 49, 51, 52, 54, 56, 58, 59, 61, 63,
65, 66, 68, 70, 72, 74, 75, 77, 79, 81,
82, 84, 86, 88, 90, 91, 93, 95, 97, 98,
100, 102, 104, 105, 107, 109, 111, 113, 114, 116,
118, 120, 121, 123, 125, 127, 128, 130, 132, 134,
136, 137, 139, 141, 143, 144, 146, 148, 150, 152,
153, 155, 157, 159, 160, 162, 164, 166, 167, 169,
171, 173, 175, 176, 178, 180, 182, 183, 185, 187,
189, 191, 192, 194, 196, 198, 199, 201, 203, 205,
206, 208, 210, 212, 214, 215, 217, 219, 221, 222,
224, 226, 228, 229, 231, 233, 235, 237, 238, 240,
242, 244, 245, 247, 249, 251, 253, 254, 256, 258,
260, 261, 263, 265, 267, 268, 270, 272,
45, 47, 49, 50, 52, 54, 56, 58, 59, 61,
63, 65, 67, 68, 70, 72, 74, 76, 77, 79,
81, 83, 85, 86, 88, 90, 92, 94, 95, 97,
99, 101, 103, 105, 106, 108, 110, 112, 114, 115,
117, 119, 121, 123, 124, 126, 128, 130, 132, 133,
135, 137, 139, 141, 142, 144, 146, 148, 150, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 169,
171, 173, 175, 177, 178, 180, 182, 184, 186, 187,
189, 191, 193, 195, 196, 198, 200, 202, 204, 205,
207, 209, 211, 213, 214, 216, 218, 220, 222, 224,
225, 227, 229, 231, 233, 234, 236, 238, 240, 242,
243, 245, 247, 249, 251, 252, 254, 256, 258, 260,
261, 263, 265, 267, 269, 270, 272, 274,
45, 47, 49, 50, 52, 54, 56, 58, 59, 61,
63, 65, 67, 68, 70, 72, 74, 76, 77, 79,
81, 83, 85, 86, 88, 90, 92, 94, 95, 97,
99, 101, 103, 105, 106, 108, 110, 112, 114, 115,
117, 119, 121, 123, 124, 126, 128, 130, 132, 133,
135, 137, 139, 141, 142, 144, 146, 148, 150, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 169,
171, 173, 175, 177, 178, 180, 182, 184, 186, 187,
189, 191, 193, 195, 196, 198, 200, 202, 204, 205,
207, 209, 211, 213, 214, 216, 218, 220, 222, 224,
225, 227, 229, 231, 233, 234, 236, 238, 240, 242,
243, 245, 247, 249, 251, 252, 254, 256, 258, 260,
261, 263, 265, 267, 269, 270, 272, 274,
43, 45, 47, 49, 50, 52, 54, 56, 58, 60,
61, 63, 65, 67, 69, 71, 72, 74, 76, 78,
80, 82, 83, 85, 87, 89, 91, 93, 94, 96,
98, 100, 102, 104, 105, 107, 109, 111, 113, 115,
116, 118, 120, 122, 124, 126, 127, 129, 131, 133,
135, 137, 138, 140, 142, 144, 146, 148, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
171, 173, 175, 177, 179, 181, 182, 184, 186, 188,
190, 192, 193, 195, 197, 199, 201, 203, 204, 206,
208, 210, 212, 214, 215, 217, 219, 221, 223, 225,
226, 228, 230, 232, 234, 236, 237, 239, 241, 243,
245, 247, 248, 250, 252, 254, 256, 258, 259, 261,
263, 265, 267, 269, 270, 272, 274, 276,
39, 41, 43, 45, 47, 48, 50, 52, 54, 56,
58, 60, 62, 64, 66, 67, 69, 71, 73, 75,
77, 79, 81, 83, 85, 86, 88, 90, 92, 94,
96, 98, 100, 102, 104, 105, 107, 109, 111, 113,
115, 117, 119, 121, 122, 124, 126, 128, 130, 132,
134, 136, 138, 140, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 179, 181, 183, 185, 187, 189,
191, 193, 195, 197, 198, 200, 202, 204, 206, 208,
210, 212, 214, 215, 217, 219, 221, 223, 225, 227,
229, 231, 233, 234, 236, 238, 240, 242, 244, 246,
248, 250, 252, 253, 255, 257, 259, 261, 263, 265,
267, 269, 271, 272, 274, 276, 278, 280,
38, 40, 42, 44, 46, 48, 49, 51, 53, 55,
57, 59, 61, 63, 65, 67, 69, 71, 72, 74,
76, 78, 80, 82, 84, 86, 88, 90, 92, 93,
95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
115, 116, 118, 120, 122, 124, 126, 128, 130, 132,
134, 136, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 183, 185, 187, 189,
191, 193, 195, 197, 199, 201, 203, 204, 206, 208,
210, 212, 214, 216, 218, 220, 222, 224, 226, 227,
229, 231, 233, 235, 237, 239, 241, 243, 245, 247,
248, 250, 252, 254, 256, 258, 260, 262, 264, 266,
268, 270, 271, 273, 275, 277, 279, 281,
38, 40, 42, 44, 46, 48, 49, 51, 53, 55,
57, 59, 61, 63, 65, 67, 69, 71, 72, 74,
76, 78, 80, 82, 84, 86, 88, 90, 92, 93,
95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
115, 116, 118, 120, 122, 124, 126, 128, 130, 132,
134, 136, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 183, 185, 187, 189,
191, 193, 195, 197, 199, 201, 203, 204, 206, 208,
210, 212, 214, 216, 218, 220, 222, 224, 226, 227,
229, 231, 233, 235, 237, 239, 241, 243, 245, 247,
248, 250, 252, 254, 256, 258, 260, 262, 264, 266,
268, 270, 271, 273, 275, 277, 279, 281,
36, 38, 40, 42, 44, 46, 48, 50, 52, 54,
55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
75, 77, 79, 81, 83, 85, 87, 89, 90, 92,
94, 96, 98, 100, 102, 104, 106, 108, 110, 112,
114, 116, 118, 120, 122, 124, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 195, 197, 199, 201, 203, 205, 207, 209,
211, 213, 215, 217, 219, 221, 223, 225, 227, 229,
230, 232, 234, 236, 238, 240, 242, 244, 246, 248,
250, 252, 254, 256, 258, 260, 262, 264, 265, 267,
269, 271, 273, 275, 277, 279, 281, 283,
36, 38, 40, 42, 44, 46, 48, 50, 52, 54,
55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
75, 77, 79, 81, 83, 85, 87, 89, 90, 92,
94, 96, 98, 100, 102, 104, 106, 108, 110, 112,
114, 116, 118, 120, 122, 124, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 195, 197, 199, 201, 203, 205, 207, 209,
211, 213, 215, 217, 219, 221, 223, 225, 227, 229,
230, 232, 234, 236, 238, 240, 242, 244, 246, 248,
250, 252, 254, 256, 258, 260, 262, 264, 265, 267,
269, 271, 273, 275, 277, 279, 281, 283,
35, 37, 39, 41, 43, 45, 47, 49, 51, 53,
55, 57, 59, 60, 62, 64, 66, 68, 70, 72,
74, 76, 78, 80, 82, 84, 86, 88, 90, 92,
94, 96, 98, 100, 102, 104, 106, 108, 110, 111,
113, 115, 117, 119, 121, 123, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 196, 198, 200, 202, 204, 206, 208, 209,
211, 213, 215, 217, 219, 221, 223, 225, 227, 229,
231, 233, 235, 237, 239, 241, 243, 245, 247, 249,
251, 253, 255, 257, 259, 260, 262, 264, 266, 268,
270, 272, 274, 276, 278, 280, 282, 284,
35, 37, 39, 41, 43, 45, 47, 49, 51, 53,
55, 57, 59, 60, 62, 64, 66, 68, 70, 72,
74, 76, 78, 80, 82, 84, 86, 88, 90, 92,
94, 96, 98, 100, 102, 104, 106, 108, 110, 111,
113, 115, 117, 119, 121, 123, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 196, 198, 200, 202, 204, 206, 208, 209,
211, 213, 215, 217, 219, 221, 223, 225, 227, 229,
231, 233, 235, 237, 239, 241, 243, 245, 247, 249,
251, 253, 255, 257, 259, 260, 262, 264, 266, 268,
270, 272, 274, 276, 278, 280, 282, 284,
34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
54, 56, 58, 60, 62, 64, 66, 68, 70, 72,
74, 76, 77, 79, 81, 83, 85, 87, 89, 91,
93, 95, 97, 99, 101, 103, 105, 107, 109, 111,
113, 115, 117, 119, 121, 123, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 196, 198, 200, 202, 204, 206, 208, 210,
212, 214, 216, 218, 220, 222, 224, 226, 228, 230,
232, 234, 236, 238, 240, 242, 243, 245, 247, 249,
251, 253, 255, 257, 259, 261, 263, 265, 267, 269,
271, 273, 275, 277, 279, 281, 283, 285,
33, 35, 37, 39, 41, 43, 45, 47, 49, 51,
53, 55, 57, 59, 61, 63, 65, 67, 69, 71,
73, 75, 77, 79, 81, 83, 85, 87, 89, 91,
93, 95, 97, 99, 101, 103, 105, 107, 109, 111,
113, 115, 117, 119, 121, 123, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 196, 198, 200, 202, 204, 206, 208, 210,
212, 214, 216, 218, 220, 222, 224, 226, 228, 230,
232, 234, 236, 238, 240, 242, 244, 246, 248, 250,
252, 254, 256, 258, 260, 262, 264, 266, 268, 270,
272, 274, 276, 278, 280, 282, 284, 286,
33, 35, 37, 39, 41, 43, 45, 47, 49, 51,
53, 55, 57, 59, 61, 63, 65, 67, 69, 71,
73, 75, 77, 79, 81, 83, 85, 87, 89, 91,
93, 95, 97, 99, 101, 103, 105, 107, 109, 111,
113, 115, 117, 119, 121, 123, 125, 127, 129, 131,
133, 135, 137, 139, 141, 143, 145, 147, 149, 151,
153, 155, 157, 159, 160, 162, 164, 166, 168, 170,
172, 174, 176, 178, 180, 182, 184, 186, 188, 190,
192, 194, 196, 198, 200, 202, 204, 206, 208, 210,
212, 214, 216, 218, 220, 222, 224, 226, 228, 230,
232, 234, 236, 238, 240, 242, 244, 246, 248, 250,
252, 254, 256, 258, 260, 262, 264, 266, 268, 270,
272, 274, 276, 278, 280, 282, 284, 286,
29, 31, 33, 35, 37, 39, 41, 43, 45, 47,
50, 52, 54, 56, 58, 60, 62, 64, 66, 68,
70, 72, 74, 76, 78, 80, 82, 84, 87, 89,
91, 93, 95, 97, 99, 101, 103, 105, 107, 109,
111, 113, 115, 117, 119, 121, 124, 126, 128, 130,
132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 175, 177, 179, 181, 183, 185, 187, 189, 191,
193, 195, 198, 200, 202, 204, 206, 208, 210, 212,
214, 216, 218, 220, 222, 224, 226, 228, 230, 232,
235, 237, 239, 241, 243, 245, 247, 249, 251, 253,
255, 257, 259, 261, 263, 265, 267, 269, 272, 274,
276, 278, 280, 282, 284, 286, 288, 290,
28, 30, 32, 34, 36, 38, 40, 42, 45, 47,
49, 51, 53, 55, 57, 59, 61, 63, 65, 67,
69, 71, 74, 76, 78, 80, 82, 84, 86, 88,
90, 92, 94, 96, 98, 100, 103, 105, 107, 109,
111, 113, 115, 117, 119, 121, 123, 125, 127, 129,
132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 175, 177, 179, 181, 183, 185, 187, 190, 192,
194, 196, 198, 200, 202, 204, 206, 208, 210, 212,
214, 216, 219, 221, 223, 225, 227, 229, 231, 233,
235, 237, 239, 241, 243, 245, 248, 250, 252, 254,
256, 258, 260, 262, 264, 266, 268, 270, 272, 274,
277, 279, 281, 283, 285, 287, 289, 291,
28, 30, 32, 34, 36, 38, 40, 42, 45, 47,
49, 51, 53, 55, 57, 59, 61, 63, 65, 67,
69, 71, 74, 76, 78, 80, 82, 84, 86, 88,
90, 92, 94, 96, 98, 100, 103, 105, 107, 109,
111, 113, 115, 117, 119, 121, 123, 125, 127, 129,
132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 175, 177, 179, 181, 183, 185, 187, 190, 192,
194, 196, 198, 200, 202, 204, 206, 208, 210, 212,
214, 216, 219, 221, 223, 225, 227, 229, 231, 233,
235, 237, 239, 241, 243, 245, 248, 250, 252, 254,
256, 258, 260, 262, 264, 266, 268, 270, 272, 274,
277, 279, 281, 283, 285, 287, 289, 291,
25, 27, 29, 31, 33, 36, 38, 40, 42, 44,
46, 48, 50, 53, 55, 57, 59, 61, 63, 65,
67, 69, 72, 74, 76, 78, 80, 82, 84, 86,
89, 91, 93, 95, 97, 99, 101, 103, 105, 108,
110, 112, 114, 116, 118, 120, 122, 125, 127, 129,
131, 133, 135, 137, 139, 141, 144, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 175, 178, 180, 182, 184, 186, 188, 190, 192,
194, 197, 199, 201, 203, 205, 207, 209, 211, 214,
216, 218, 220, 222, 224, 226, 228, 230, 233, 235,
237, 239, 241, 243, 245, 247, 250, 252, 254, 256,
258, 260, 262, 264, 266, 269, 271, 273, 275, 277,
279, 281, 283, 286, 288, 290, 292, 294,
24, 26, 28, 30, 33, 35, 37, 39, 41, 43,
45, 47, 50, 52, 54, 56, 58, 60, 62, 65,
67, 69, 71, 73, 75, 77, 79, 82, 84, 86,
88, 90, 92, 94, 97, 99, 101, 103, 105, 107,
109, 111, 114, 116, 118, 120, 122, 124, 126, 129,
131, 133, 135, 137, 139, 141, 143, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 176, 178, 180, 182, 184, 186, 188, 190, 193,
195, 197, 199, 201, 203, 205, 208, 210, 212, 214,
216, 218, 220, 222, 225, 227, 229, 231, 233, 235,
237, 240, 242, 244, 246, 248, 250, 252, 254, 257,
259, 261, 263, 265, 267, 269, 272, 274, 276, 278,
280, 282, 284, 286, 289, 291, 293, 295,
23, 25, 27, 29, 32, 34, 36, 38, 40, 42,
44, 47, 49, 51, 53, 55, 57, 60, 62, 64,
66, 68, 70, 72, 75, 77, 79, 81, 83, 85,
87, 90, 92, 94, 96, 98, 100, 103, 105, 107,
109, 111, 113, 115, 118, 120, 122, 124, 126, 128,
130, 133, 135, 137, 139, 141, 143, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 176, 178, 180, 182, 184, 186, 189, 191, 193,
195, 197, 199, 201, 204, 206, 208, 210, 212, 214,
216, 219, 221, 223, 225, 227, 229, 232, 234, 236,
238, 240, 242, 244, 247, 249, 251, 253, 255, 257,
259, 262, 264, 266, 268, 270, 272, 275, 277, 279,
281, 283, 285, 287, 290, 292, 294, 296,
23, 25, 27, 29, 32, 34, 36, 38, 40, 42,
44, 47, 49, 51, 53, 55, 57, 60, 62, 64,
66, 68, 70, 72, 75, 77, 79, 81, 83, 85,
87, 90, 92, 94, 96, 98, 100, 103, 105, 107,
109, 111, 113, 115, 118, 120, 122, 124, 126, 128,
130, 133, 135, 137, 139, 141, 143, 146, 148, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 171,
173, 176, 178, 180, 182, 184, 186, 189, 191, 193,
195, 197, 199, 201, 204, 206, 208, 210, 212, 214,
216, 219, 221, 223, 225, 227, 229, 232, 234, 236,
238, 240, 242, 244, 247, 249, 251, 253, 255, 257,
259, 262, 264, 266, 268, 270, 272, 275, 277, 279,
281, 283, 285, 287, 290, 292, 294, 296,
20, 22, 24, 27, 29, 31, 33, 35, 38, 40,
42, 44, 46, 49, 51, 53, 55, 57, 60, 62,
64, 66, 68, 71, 73, 75, 77, 79, 82, 84,
86, 88, 90, 92, 95, 97, 99, 101, 103, 106,
108, 110, 112, 114, 117, 119, 121, 123, 125, 128,
130, 132, 134, 136, 139, 141, 143, 145, 147, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 172,
174, 176, 178, 180, 183, 185, 187, 189, 191, 194,
196, 198, 200, 202, 205, 207, 209, 211, 213, 216,
218, 220, 222, 224, 227, 229, 231, 233, 235, 237,
240, 242, 244, 246, 248, 251, 253, 255, 257, 259,
262, 264, 266, 268, 270, 273, 275, 277, 279, 281,
284, 286, 288, 290, 292, 295, 297, 299,
20, 22, 24, 27, 29, 31, 33, 35, 38, 40,
42, 44, 46, 49, 51, 53, 55, 57, 60, 62,
64, 66, 68, 71, 73, 75, 77, 79, 82, 84,
86, 88, 90, 92, 95, 97, 99, 101, 103, 106,
108, 110, 112, 114, 117, 119, 121, 123, 125, 128,
130, 132, 134, 136, 139, 141, 143, 145, 147, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 172,
174, 176, 178, 180, 183, 185, 187, 189, 191, 194,
196, 198, 200, 202, 205, 207, 209, 211, 213, 216,
218, 220, 222, 224, 227, 229, 231, 233, 235, 237,
240, 242, 244, 246, 248, 251, 253, 255, 257, 259,
262, 264, 266, 268, 270, 273, 275, 277, 279, 281,
284, 286, 288, 290, 292, 295, 297, 299,
19, 21, 23, 26, 28, 30, 32, 34, 37, 39,
41, 43, 46, 48, 50, 52, 54, 57, 59, 61,
63, 65, 68, 70, 72, 74, 77, 79, 81, 83,
85, 88, 90, 92, 94, 96, 99, 101, 103, 105,
108, 110, 112, 114, 116, 119, 121, 123, 125, 127,
130, 132, 134, 136, 138, 141, 143, 145, 147, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 172,
174, 176, 178, 181, 183, 185, 187, 189, 192, 194,
196, 198, 200, 203, 205, 207, 209, 211, 214, 216,
218, 220, 223, 225, 227, 229, 231, 234, 236, 238,
240, 242, 245, 247, 249, 251, 254, 256, 258, 260,
262, 265, 267, 269, 271, 273, 276, 278, 280, 282,
285, 287, 289, 291, 293, 296, 298, 300,
19, 21, 23, 26, 28, 30, 32, 34, 37, 39,
41, 43, 46, 48, 50, 52, 54, 57, 59, 61,
63, 65, 68, 70, 72, 74, 77, 79, 81, 83,
85, 88, 90, 92, 94, 96, 99, 101, 103, 105,
108, 110, 112, 114, 116, 119, 121, 123, 125, 127,
130, 132, 134, 136, 138, 141, 143, 145, 147, 150,
152, 154, 156, 158, 161, 163, 165, 167, 169, 172,
174, 176, 178, 181, 183, 185, 187, 189, 192, 194,
196, 198, 200, 203, 205, 207, 209, 211, 214, 216,
218, 220, 223, 225, 227, 229, 231, 234, 236, 238,
240, 242, 245, 247, 249, 251, 254, 256, 258, 260,
262, 265, 267, 269, 271, 273, 276, 278, 280, 282,
285, 287, 289, 291, 293, 296, 298, 300,
18, 20, 22, 25, 27, 29, 31, 34, 36, 38,
40, 43, 45, 47, 49, 51, 54, 56, 58, 60,
63, 65, 67, 69, 71, 74, 76, 78, 80, 83,
85, 87, 89, 92, 94, 96, 98, 100, 103, 105,
107, 109, 112, 114, 116, 118, 121, 123, 125, 127,
129, 132, 134, 136, 138, 141, 143, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 176, 178, 181, 183, 185, 187, 190, 192, 194,
196, 198, 201, 203, 205, 207, 210, 212, 214, 216,
219, 221, 223, 225, 227, 230, 232, 234, 236, 239,
241, 243, 245, 248, 250, 252, 254, 256, 259, 261,
263, 265, 268, 270, 272, 274, 276, 279, 281, 283,
285, 288, 290, 292, 294, 297, 299, 301,
16, 18, 21, 23, 25, 27, 30, 32, 34, 36,
39, 41, 43, 45, 48, 50, 52, 54, 57, 59,
61, 63, 66, 68, 70, 72, 75, 77, 79, 82,
84, 86, 88, 91, 93, 95, 97, 100, 102, 104,
106, 109, 111, 113, 115, 118, 120, 122, 124, 127,
129, 131, 134, 136, 138, 140, 143, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 176, 179, 181, 183, 185, 188, 190, 192, 195,
197, 199, 201, 204, 206, 208, 210, 213, 215, 217,
219, 222, 224, 226, 228, 231, 233, 235, 237, 240,
242, 244, 247, 249, 251, 253, 256, 258, 260, 262,
265, 267, 269, 271, 274, 276, 278, 280, 283, 285,
287, 289, 292, 294, 296, 298, 301, 303,
16, 18, 21, 23, 25, 27, 30, 32, 34, 36,
39, 41, 43, 45, 48, 50, 52, 54, 57, 59,
61, 63, 66, 68, 70, 72, 75, 77, 79, 82,
84, 86, 88, 91, 93, 95, 97, 100, 102, 104,
106, 109, 111, 113, 115, 118, 120, 122, 124, 127,
129, 131, 134, 136, 138, 140, 143, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 176, 179, 181, 183, 185, 188, 190, 192, 195,
197, 199, 201, 204, 206, 208, 210, 213, 215, 217,
219, 222, 224, 226, 228, 231, 233, 235, 237, 240,
242, 244, 247, 249, 251, 253, 256, 258, 260, 262,
265, 267, 269, 271, 274, 276, 278, 280, 283, 285,
287, 289, 292, 294, 296, 298, 301, 303,
15, 17, 20, 22, 24, 26, 29, 31, 33, 35,
38, 40, 42, 45, 47, 49, 51, 54, 56, 58,
61, 63, 65, 67, 70, 72, 74, 76, 79, 81,
83, 86, 88, 90, 92, 95, 97, 99, 101, 104,
106, 108, 111, 113, 115, 117, 120, 122, 124, 127,
129, 131, 133, 136, 138, 140, 142, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 177, 179, 181, 183, 186, 188, 190, 192, 195,
197, 199, 202, 204, 206, 208, 211, 213, 215, 218,
220, 222, 224, 227, 229, 231, 233, 236, 238, 240,
243, 245, 247, 249, 252, 254, 256, 258, 261, 263,
265, 268, 270, 272, 274, 277, 279, 281, 284, 286,
288, 290, 293, 295, 297, 299, 302, 304,
15, 17, 20, 22, 24, 26, 29, 31, 33, 35,
38, 40, 42, 45, 47, 49, 51, 54, 56, 58,
61, 63, 65, 67, 70, 72, 74, 76, 79, 81,
83, 86, 88, 90, 92, 95, 97, 99, 101, 104,
106, 108, 111, 113, 115, 117, 120, 122, 124, 127,
129, 131, 133, 136, 138, 140, 142, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 177, 179, 181, 183, 186, 188, 190, 192, 195,
197, 199, 202, 204, 206, 208, 211, 213, 215, 218,
220, 222, 224, 227, 229, 231, 233, 236, 238, 240,
243, 245, 247, 249, 252, 254, 256, 258, 261, 263,
265, 268, 270, 272, 274, 277, 279, 281, 284, 286,
288, 290, 293, 295, 297, 299, 302, 304,
15, 17, 20, 22, 24, 26, 29, 31, 33, 35,
38, 40, 42, 45, 47, 49, 51, 54, 56, 58,
61, 63, 65, 67, 70, 72, 74, 76, 79, 81,
83, 86, 88, 90, 92, 95, 97, 99, 101, 104,
106, 108, 111, 113, 115, 117, 120, 122, 124, 127,
129, 131, 133, 136, 138, 140, 142, 145, 147, 149,
152, 154, 156, 158, 161, 163, 165, 167, 170, 172,
174, 177, 179, 181, 183, 186, 188, 190, 192, 195,
197, 199, 202, 204, 206, 208, 211, 213, 215, 218,
220, 222, 224, 227, 229, 231, 233, 236, 238, 240,
243, 245, 247, 249, 252, 254, 256, 258, 261, 263,
265, 268, 270, 272, 274, 277, 279, 281, 284, 286,
288, 290, 293, 295, 297, 299, 302, 304,
14, 16, 19, 21, 23, 25, 28, 30, 32, 35,
37, 39, 41, 44, 46, 48, 51, 53, 55, 58,
60, 62, 64, 67, 69, 71, 74, 76, 78, 80,
83, 85, 87, 90, 92, 94, 96, 99, 101, 103,
106, 108, 110, 113, 115, 117, 119, 122, 124, 126,
129, 131, 133, 135, 138, 140, 142, 145, 147, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 172,
174, 177, 179, 181, 184, 186, 188, 190, 193, 195,
197, 200, 202, 204, 206, 209, 211, 213, 216, 218,
220, 223, 225, 227, 229, 232, 234, 236, 239, 241,
243, 245, 248, 250, 252, 255, 257, 259, 261, 264,
266, 268, 271, 273, 275, 278, 280, 282, 284, 287,
289, 291, 294, 296, 298, 300, 303, 305,
13, 15, 18, 20, 22, 25, 27, 29, 31, 34,
36, 38, 41, 43, 45, 48, 50, 52, 55, 57,
59, 61, 64, 66, 68, 71, 73, 75, 78, 80,
82, 85, 87, 89, 91, 94, 96, 98, 101, 103,
105, 108, 110, 112, 115, 117, 119, 121, 124, 126,
128, 131, 133, 135, 138, 140, 142, 145, 147, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 172,
174, 177, 179, 181, 184, 186, 188, 191, 193, 195,
198, 200, 202, 204, 207, 209, 211, 214, 216, 218,
221, 223, 225, 228, 230, 232, 234, 237, 239, 241,
244, 246, 248, 251, 253, 255, 258, 260, 262, 264,
267, 269, 271, 274, 276, 278, 281, 283, 285, 288,
290, 292, 294, 297, 299, 301, 304, 306,
13, 15, 18, 20, 22, 25, 27, 29, 31, 34,
36, 38, 41, 43, 45, 48, 50, 52, 55, 57,
59, 61, 64, 66, 68, 71, 73, 75, 78, 80,
82, 85, 87, 89, 91, 94, 96, 98, 101, 103,
105, 108, 110, 112, 115, 117, 119, 121, 124, 126,
128, 131, 133, 135, 138, 140, 142, 145, 147, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 172,
174, 177, 179, 181, 184, 186, 188, 191, 193, 195,
198, 200, 202, 204, 207, 209, 211, 214, 216, 218,
221, 223, 225, 228, 230, 232, 234, 237, 239, 241,
244, 246, 248, 251, 253, 255, 258, 260, 262, 264,
267, 269, 271, 274, 276, 278, 281, 283, 285, 288,
290, 292, 294, 297, 299, 301, 304, 306,
12, 14, 17, 19, 21, 24, 26, 28, 31, 33,
35, 38, 40, 42, 45, 47, 49, 51, 54, 56,
58, 61, 63, 65, 68, 70, 72, 75, 77, 79,
82, 84, 86, 89, 91, 93, 96, 98, 100, 103,
105, 107, 110, 112, 114, 117, 119, 121, 123, 126,
128, 130, 133, 135, 137, 140, 142, 144, 147, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 172,
175, 177, 179, 182, 184, 186, 189, 191, 193, 196,
198, 200, 202, 205, 207, 209, 212, 214, 216, 219,
221, 223, 226, 228, 230, 233, 235, 237, 240, 242,
244, 247, 249, 251, 254, 256, 258, 261, 263, 265,
268, 270, 272, 274, 277, 279, 281, 284, 286, 288,
291, 293, 295, 298, 300, 302, 305, 307,
10, 12, 15, 17, 19, 22, 24, 26, 29, 31,
34, 36, 38, 41, 43, 45, 48, 50, 52, 55,
57, 59, 62, 64, 67, 69, 71, 74, 76, 78,
81, 83, 85, 88, 90, 92, 95, 97, 99, 102,
104, 107, 109, 111, 114, 116, 118, 121, 123, 125,
128, 130, 132, 135, 137, 139, 142, 144, 147, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 172,
175, 177, 180, 182, 184, 187, 189, 191, 194, 196,
198, 201, 203, 205, 208, 210, 212, 215, 217, 220,
222, 224, 227, 229, 231, 234, 236, 238, 241, 243,
245, 248, 250, 252, 255, 257, 260, 262, 264, 267,
269, 271, 274, 276, 278, 281, 283, 285, 288, 290,
293, 295, 297, 300, 302, 304, 307, 309,
9, 11, 14, 16, 18, 21, 23, 26, 28, 30,
33, 35, 37, 40, 42, 45, 47, 49, 52, 54,
56, 59, 61, 64, 66, 68, 71, 73, 75, 78,
80, 82, 85, 87, 90, 92, 94, 97, 99, 101,
104, 106, 109, 111, 113, 116, 118, 120, 123, 125,
128, 130, 132, 135, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 184, 187, 189, 191, 194, 196,
199, 201, 203, 206, 208, 210, 213, 215, 218, 220,
222, 225, 227, 229, 232, 234, 237, 239, 241, 244,
246, 248, 251, 253, 255, 258, 260, 263, 265, 267,
270, 272, 274, 277, 279, 282, 284, 286, 289, 291,
293, 296, 298, 301, 303, 305, 308, 310,
9, 11, 14, 16, 18, 21, 23, 26, 28, 30,
33, 35, 37, 40, 42, 45, 47, 49, 52, 54,
56, 59, 61, 64, 66, 68, 71, 73, 75, 78,
80, 82, 85, 87, 90, 92, 94, 97, 99, 101,
104, 106, 109, 111, 113, 116, 118, 120, 123, 125,
128, 130, 132, 135, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 184, 187, 189, 191, 194, 196,
199, 201, 203, 206, 208, 210, 213, 215, 218, 220,
222, 225, 227, 229, 232, 234, 237, 239, 241, 244,
246, 248, 251, 253, 255, 258, 260, 263, 265, 267,
270, 272, 274, 277, 279, 282, 284, 286, 289, 291,
293, 296, 298, 301, 303, 305, 308, 310,
8, 10, 13, 15, 18, 20, 22, 25, 27, 29,
32, 34, 37, 39, 41, 44, 46, 49, 51, 53,
56, 58, 60, 63, 65, 68, 70, 72, 75, 77,
80, 82, 84, 87, 89, 92, 94, 96, 99, 101,
103, 106, 108, 111, 113, 115, 118, 120, 123, 125,
127, 130, 132, 134, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 185, 187, 189, 192, 194, 196,
199, 201, 204, 206, 208, 211, 213, 216, 218, 220,
223, 225, 227, 230, 232, 235, 237, 239, 242, 244,
247, 249, 251, 254, 256, 259, 261, 263, 266, 268,
270, 273, 275, 278, 280, 282, 285, 287, 290, 292,
294, 297, 299, 301, 304, 306, 309, 311,
8, 10, 13, 15, 18, 20, 22, 25, 27, 29,
32, 34, 37, 39, 41, 44, 46, 49, 51, 53,
56, 58, 60, 63, 65, 68, 70, 72, 75, 77,
80, 82, 84, 87, 89, 92, 94, 96, 99, 101,
103, 106, 108, 111, 113, 115, 118, 120, 123, 125,
127, 130, 132, 134, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 185, 187, 189, 192, 194, 196,
199, 201, 204, 206, 208, 211, 213, 216, 218, 220,
223, 225, 227, 230, 232, 235, 237, 239, 242, 244,
247, 249, 251, 254, 256, 259, 261, 263, 266, 268,
270, 273, 275, 278, 280, 282, 285, 287, 290, 292,
294, 297, 299, 301, 304, 306, 309, 311,
8, 10, 13, 15, 18, 20, 22, 25, 27, 29,
32, 34, 37, 39, 41, 44, 46, 49, 51, 53,
56, 58, 60, 63, 65, 68, 70, 72, 75, 77,
80, 82, 84, 87, 89, 92, 94, 96, 99, 101,
103, 106, 108, 111, 113, 115, 118, 120, 123, 125,
127, 130, 132, 134, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 185, 187, 189, 192, 194, 196,
199, 201, 204, 206, 208, 211, 213, 216, 218, 220,
223, 225, 227, 230, 232, 235, 237, 239, 242, 244,
247, 249, 251, 254, 256, 259, 261, 263, 266, 268,
270, 273, 275, 278, 280, 282, 285, 287, 290, 292,
294, 297, 299, 301, 304, 306, 309, 311,
8, 10, 13, 15, 18, 20, 22, 25, 27, 29,
32, 34, 37, 39, 41, 44, 46, 49, 51, 53,
56, 58, 60, 63, 65, 68, 70, 72, 75, 77,
80, 82, 84, 87, 89, 92, 94, 96, 99, 101,
103, 106, 108, 111, 113, 115, 118, 120, 123, 125,
127, 130, 132, 134, 137, 139, 142, 144, 146, 149,
151, 154, 156, 158, 161, 163, 165, 168, 170, 173,
175, 177, 180, 182, 185, 187, 189, 192, 194, 196,
199, 201, 204, 206, 208, 211, 213, 216, 218, 220,
223, 225, 227, 230, 232, 235, 237, 239, 242, 244,
247, 249, 251, 254, 256, 259, 261, 263, 266, 268,
270, 273, 275, 278, 280, 282, 285, 287, 290, 292,
294, 297, 299, 301, 304, 306, 309, 311,
7, 9, 12, 14, 17, 19, 21, 24, 26, 29,
31, 33, 36, 38, 41, 43, 45, 48, 50, 53,
55, 57, 60, 62, 65, 67, 69, 72, 74, 77,
79, 81, 84, 86, 89, 91, 93, 96, 98, 101,
103, 105, 108, 110, 113, 115, 117, 120, 122, 125,
127, 129, 132, 134, 137, 139, 141, 144, 146, 149,
151, 153, 156, 158, 161, 163, 166, 168, 170, 173,
175, 178, 180, 182, 185, 187, 190, 192, 194, 197,
199, 202, 204, 206, 209, 211, 214, 216, 218, 221,
223, 226, 228, 230, 233, 235, 238, 240, 242, 245,
247, 250, 252, 254, 257, 259, 262, 264, 266, 269,
271, 274, 276, 278, 281, 283, 286, 288, 290, 293,
295, 298, 300, 302, 305, 307, 310, 312,
6, 8, 11, 13, 16, 18, 21, 23, 25, 28,
30, 33, 35, 37, 40, 42, 45, 47, 50, 52,
54, 57, 59, 62, 64, 66, 69, 71, 74, 76,
79, 81, 83, 86, 88, 91, 93, 95, 98, 100,
103, 105, 108, 110, 112, 115, 117, 120, 122, 124,
127, 129, 132, 134, 137, 139, 141, 144, 146, 149,
151, 153, 156, 158, 161, 163, 166, 168, 170, 173,
175, 178, 180, 182, 185, 187, 190, 192, 195, 197,
199, 202, 204, 207, 209, 211, 214, 216, 219, 221,
224, 226, 228, 231, 233, 236, 238, 240, 243, 245,
248, 250, 253, 255, 257, 260, 262, 265, 267, 269,
272, 274, 277, 279, 282, 284, 286, 289, 291, 294,
296, 298, 301, 303, 306, 308, 311, 313,
4, 6, 9, 11, 14, 16, 19, 21, 24, 26,
28, 31, 33, 36, 38, 41, 43, 46, 48, 51,
53, 55, 58, 60, 63, 65, 68, 70, 73, 75,
77, 80, 82, 85, 87, 90, 92, 95, 97, 100,
102, 104, 107, 109, 112, 114, 117, 119, 122, 124,
126, 129, 131, 134, 136, 139, 141, 144, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
175, 178, 180, 183, 185, 188, 190, 193, 195, 197,
200, 202, 205, 207, 210, 212, 215, 217, 219, 222,
224, 227, 229, 232, 234, 237, 239, 242, 244, 246,
249, 251, 254, 256, 259, 261, 264, 266, 268, 271,
273, 276, 278, 281, 283, 286, 288, 291, 293, 295,
298, 300, 303, 305, 308, 310, 313, 315,
4, 6, 9, 11, 14, 16, 19, 21, 24, 26,
28, 31, 33, 36, 38, 41, 43, 46, 48, 51,
53, 55, 58, 60, 63, 65, 68, 70, 73, 75,
77, 80, 82, 85, 87, 90, 92, 95, 97, 100,
102, 104, 107, 109, 112, 114, 117, 119, 122, 124,
126, 129, 131, 134, 136, 139, 141, 144, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
175, 178, 180, 183, 185, 188, 190, 193, 195, 197,
200, 202, 205, 207, 210, 212, 215, 217, 219, 222,
224, 227, 229, 232, 234, 237, 239, 242, 244, 246,
249, 251, 254, 256, 259, 261, 264, 266, 268, 271,
273, 276, 278, 281, 283, 286, 288, 291, 293, 295,
298, 300, 303, 305, 308, 310, 313, 315,
3, 5, 8, 10, 13, 15, 18, 20, 23, 25,
28, 30, 33, 35, 38, 40, 42, 45, 47, 50,
52, 55, 57, 60, 62, 65, 67, 70, 72, 74,
77, 79, 82, 84, 87, 89, 92, 94, 97, 99,
102, 104, 107, 109, 111, 114, 116, 119, 121, 124,
126, 129, 131, 134, 136, 139, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 180, 183, 185, 188, 190, 193, 195, 198,
200, 203, 205, 208, 210, 212, 215, 217, 220, 222,
225, 227, 230, 232, 235, 237, 240, 242, 245, 247,
249, 252, 254, 257, 259, 262, 264, 267, 269, 272,
274, 277, 279, 281, 284, 286, 289, 291, 294, 296,
299, 301, 304, 306, 309, 311, 314, 316,
3, 5, 8, 10, 13, 15, 18, 20, 23, 25,
28, 30, 33, 35, 38, 40, 42, 45, 47, 50,
52, 55, 57, 60, 62, 65, 67, 70, 72, 74,
77, 79, 82, 84, 87, 89, 92, 94, 97, 99,
102, 104, 107, 109, 111, 114, 116, 119, 121, 124,
126, 129, 131, 134, 136, 139, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 180, 183, 185, 188, 190, 193, 195, 198,
200, 203, 205, 208, 210, 212, 215, 217, 220, 222,
225, 227, 230, 232, 235, 237, 240, 242, 245, 247,
249, 252, 254, 257, 259, 262, 264, 267, 269, 272,
274, 277, 279, 281, 284, 286, 289, 291, 294, 296,
299, 301, 304, 306, 309, 311, 314, 316,
3, 5, 8, 10, 13, 15, 18, 20, 23, 25,
28, 30, 33, 35, 38, 40, 42, 45, 47, 50,
52, 55, 57, 60, 62, 65, 67, 70, 72, 74,
77, 79, 82, 84, 87, 89, 92, 94, 97, 99,
102, 104, 107, 109, 111, 114, 116, 119, 121, 124,
126, 129, 131, 134, 136, 139, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 180, 183, 185, 188, 190, 193, 195, 198,
200, 203, 205, 208, 210, 212, 215, 217, 220, 222,
225, 227, 230, 232, 235, 237, 240, 242, 245, 247,
249, 252, 254, 257, 259, 262, 264, 267, 269, 272,
274, 277, 279, 281, 284, 286, 289, 291, 294, 296,
299, 301, 304, 306, 309, 311, 314, 316,
3, 5, 8, 10, 13, 15, 18, 20, 23, 25,
28, 30, 33, 35, 38, 40, 42, 45, 47, 50,
52, 55, 57, 60, 62, 65, 67, 70, 72, 74,
77, 79, 82, 84, 87, 89, 92, 94, 97, 99,
102, 104, 107, 109, 111, 114, 116, 119, 121, 124,
126, 129, 131, 134, 136, 139, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 180, 183, 185, 188, 190, 193, 195, 198,
200, 203, 205, 208, 210, 212, 215, 217, 220, 222,
225, 227, 230, 232, 235, 237, 240, 242, 245, 247,
249, 252, 254, 257, 259, 262, 264, 267, 269, 272,
274, 277, 279, 281, 284, 286, 289, 291, 294, 296,
299, 301, 304, 306, 309, 311, 314, 316,
2, 4, 7, 9, 12, 14, 17, 19, 22, 24,
27, 29, 32, 34, 37, 39, 42, 44, 47, 49,
52, 54, 57, 59, 62, 64, 66, 69, 71, 74,
76, 79, 81, 84, 86, 89, 91, 94, 96, 99,
101, 104, 106, 109, 111, 114, 116, 119, 121, 124,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 195, 198,
200, 203, 205, 208, 210, 213, 215, 218, 220, 223,
225, 228, 230, 233, 235, 238, 240, 243, 245, 248,
250, 253, 255, 257, 260, 262, 265, 267, 270, 272,
275, 277, 280, 282, 285, 287, 290, 292, 295, 297,
300, 302, 305, 307, 310, 312, 315, 317,
1, 3, 6, 8, 11, 13, 16, 18, 21, 23,
26, 28, 31, 33, 36, 38, 41, 43, 46, 48,
51, 53, 56, 58, 61, 63, 66, 68, 71, 73,
76, 78, 81, 83, 86, 88, 91, 93, 96, 98,
101, 103, 106, 108, 111, 113, 116, 118, 121, 123,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 196, 198,
201, 203, 206, 208, 211, 213, 216, 218, 221, 223,
226, 228, 231, 233, 236, 238, 241, 243, 246, 248,
251, 253, 256, 258, 261, 263, 266, 268, 271, 273,
276, 278, 281, 283, 286, 288, 291, 293, 296, 298,
301, 303, 306, 308, 311, 313, 316, 318,
1, 3, 6, 8, 11, 13, 16, 18, 21, 23,
26, 28, 31, 33, 36, 38, 41, 43, 46, 48,
51, 53, 56, 58, 61, 63, 66, 68, 71, 73,
76, 78, 81, 83, 86, 88, 91, 93, 96, 98,
101, 103, 106, 108, 111, 113, 116, 118, 121, 123,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 196, 198,
201, 203, 206, 208, 211, 213, 216, 218, 221, 223,
226, 228, 231, 233, 236, 238, 241, 243, 246, 248,
251, 253, 256, 258, 261, 263, 266, 268, 271, 273,
276, 278, 281, 283, 286, 288, 291, 293, 296, 298,
301, 303, 306, 308, 311, 313, 316, 318,
0, 3, 5, 8, 10, 13, 15, 18, 20, 23,
25, 28, 30, 33, 35, 38, 40, 43, 45, 48,
50, 53, 55, 58, 60, 63, 65, 68, 70, 73,
75, 78, 80, 83, 85, 88, 90, 93, 95, 98,
100, 103, 105, 108, 111, 113, 116, 118, 121, 123,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 196, 198,
201, 203, 206, 208, 211, 214, 216, 219, 221, 224,
226, 229, 231, 234, 236, 239, 241, 244, 246, 249,
251, 254, 256, 259, 261, 264, 266, 269, 271, 274,
276, 279, 281, 284, 286, 289, 291, 294, 296, 299,
301, 304, 306, 309, 311, 314, 316, 319,
0, 3, 5, 8, 10, 13, 15, 18, 20, 23,
25, 28, 30, 33, 35, 38, 40, 43, 45, 48,
50, 53, 55, 58, 60, 63, 65, 68, 70, 73,
75, 78, 80, 83, 85, 88, 90, 93, 95, 98,
100, 103, 105, 108, 111, 113, 116, 118, 121, 123,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 196, 198,
201, 203, 206, 208, 211, 214, 216, 219, 221, 224,
226, 229, 231, 234, 236, 239, 241, 244, 246, 249,
251, 254, 256, 259, 261, 264, 266, 269, 271, 274,
276, 279, 281, 284, 286, 289, 291, 294, 296, 299,
301, 304, 306, 309, 311, 314, 316, 319,
0, 3, 5, 8, 10, 13, 15, 18, 20, 23,
25, 28, 30, 33, 35, 38, 40, 43, 45, 48,
50, 53, 55, 58, 60, 63, 65, 68, 70, 73,
75, 78, 80, 83, 85, 88, 90, 93, 95, 98,
100, 103, 105, 108, 111, 113, 116, 118, 121, 123,
126, 128, 131, 133, 136, 138, 141, 143, 146, 148,
151, 153, 156, 158, 161, 163, 166, 168, 171, 173,
176, 178, 181, 183, 186, 188, 191, 193, 196, 198,
201, 203, 206, 208, 211, 214, 216, 219, 221, 224,
226, 229, 231, 234, 236, 239, 241, 244, 246, 249,
251, 254, 256, 259, 261, 264, 266, 269, 271, 274,
276, 279, 281, 284, 286, 289, 291, 294, 296, 299,
301, 304, 306, 309, 311, 314, 316, 319
};
void Camera_Init()
{
Camera_GPIO_Init();
Camera_DMA_Init();
ov7725_eagle_init();
//ov7725_eagle_reg_init();
}
/*
*备注:使能引脚:行、场中断初始化为上升沿触发、下拉、低通滤波;8个数据传输引脚初始化为禁止中断、下拉、低通滤波;PCLK初始化为下降沿DMA触发、下拉、低通滤波
*/
void Camera_GPIO_Init()
{
//行中断信号初始化
GPIO_InitTypeDef GPIO_init;
GPIO_init.GPIO_PTx = H_GPIO_PORT;
GPIO_init.GPIO_Pins = H_PIN;
GPIO_init.GPIO_Dir = DIR_INPUT;
GPIO_init.GPIO_PinControl = IRQC_RI | INPUT_PULL_DOWN | INPUT_PF_EN;
GPIO_init.GPIO_Output = 0;
GPIO_init.GPIO_Isr = camera_h_isr;
LPLD_GPIO_Init(GPIO_init);
//场中断信号初始化
GPIO_init.GPIO_PTx = V_GPIO_PORT;
GPIO_init.GPIO_Pins = V_PIN;
GPIO_init.GPIO_Dir = DIR_INPUT;
GPIO_init.GPIO_PinControl = IRQC_RI | INPUT_PULL_DOWN | INPUT_PF_EN;
GPIO_init.GPIO_Output = 0;
GPIO_init.GPIO_Isr = camera_v_isr;
LPLD_GPIO_Init(GPIO_init);
//数据信号初始化
GPIO_init.GPIO_PTx = DATA_GPIO_PORT;
GPIO_init.GPIO_Pins = DATA_PIN;
GPIO_init.GPIO_Dir = DIR_INPUT;
GPIO_init.GPIO_PinControl = IRQC_DIS | INPUT_PULL_DOWN | INPUT_PF_EN;
GPIO_init.GPIO_Output = 0;
GPIO_init.GPIO_Isr = NULL;
LPLD_GPIO_Init(GPIO_init);
//PCLK信号初始化
GPIO_init.GPIO_PTx = PCLK_GPIO_PORT;
GPIO_init.GPIO_Pins = PCLK_PIN;
GPIO_init.GPIO_Dir = DIR_INPUT;
GPIO_init.GPIO_PinControl = IRQC_DMAFA | INPUT_PULL_DOWN | INPUT_PF_EN;
GPIO_init.GPIO_Output = 0;
GPIO_init.GPIO_Isr = NULL;
LPLD_GPIO_Init(GPIO_init);
}
/*
*备注配置DMA
*/
void Camera_DMA_Init()
{
static DMA_InitTypeDef DMA_init;
DMA_init.DMA_CHx = DMA_CHX; //通道
DMA_init.DMA_Req = DMA_REQ; //DMA请求源
DMA_init.DMA_PeriodicTriggerEnable = FALSE; //PIT周期触发关闭
DMA_init.DMA_MajorLoopCnt = DMA_MAJOR_LOOP; //主循环次数
DMA_init.DMA_MinorByteCnt = DMA_MINER_BYTE; //副循环一次传输字节数
DMA_init.DMA_SourceAddr = DMA_SOURCE_ADDR; //传输源地址
DMA_init.DMA_DestAddr = DMA_DEST_ADDR; //传输目的地址
DMA_init.DMA_SourceDataSize = DMA_SOURCE_DATA_SIZE; //源数据传输宽度
DMA_init.DMA_SourceAddrOffset = DMA_SOURCE_ADDR_OFFSET; //源地址读取后偏移量
DMA_init.DMA_DestDataSize = DMA_DEST_DATA_SIZE; //目的数据传输宽度
DMA_init.DMA_DestAddrOffset = DMA_DEST_ADDR_OFFSET; //目的地址写入后偏移量
DMA_init.DMA_AutoDisableReq = TRUE; //自动禁用请求
LPLD_DMA_Init(DMA_init);
LPLD_DMA_DisableReq(DMA_CHX); //禁用硬件请求DMA
}
void CameraStart()
{
init_nvic();
enable_irq(V_PORT_IRQn);//开启场中断
enable_irq(H_PORT_IRQn);//开启行中断
enable_irq(Reserved110_IRQn);//开启软件中断
}
void CameraClose()
{
disable_irq(V_PORT_IRQn);//关闭场中断
disable_irq(H_PORT_IRQn);//关闭行中断
disable_irq(Reserved110_IRQn);//关闭软件中断
// LPLD_DMA_DisableReq(DMA_CHX);//关闭DMA请求
}
/*
函数名称:ImgExtract(uint8 *src, uint8 *dst, uint32 size)
函数参数: dst:目的地址; src:源地址; size:解压的字节数
函数功能: 将源地址的图像解压为0,1,图像字节数必须是4的倍数
函数时间:2.3~2.4ms
备注:将dma得到的数组,由原来的8位数8个像素改为8个数8个像素
*/
void ImgExtract(uint8 *src, uint8 *dst, uint32 colomn)
{
register uint8 tmpsrc;
register uint8 *tmpsrc_Row;
register uint8 u8i = 64, u8j = colomn;
//将列数换算为对应的一行所用的存储字节数
colomn=colomn/8;
for (u8i=0; u8i<64; u8i++)
{
//依开始行、结束行均匀取行
tmpsrc_Row = &src[row[u8i]*colomn];
for (u8j=0; u8j<colomn; u8j++)
{
tmpsrc = ~(*tmpsrc_Row); //为了程序执行效率考虑
tmpsrc_Row++; //使用指针代替数组寻址运算
*dst++ = ((tmpsrc >> 7 ) & 0x01);
*dst++ = ((tmpsrc >> 6 ) & 0x01);
*dst++ = ((tmpsrc >> 5 ) & 0x01);
*dst++ = ((tmpsrc >> 4 ) & 0x01);
*dst++ = ((tmpsrc >> 3 ) & 0x01);
*dst++ = ((tmpsrc >> 2 ) & 0x01);
*dst++ = ((tmpsrc >> 1 ) & 0x01);
*dst++ = ((tmpsrc >> 0 ) & 0x01);
}
}
}
/*
函数名称:ImgCompress_128x64(uint8 *src, uint8 (*image)[IMAGE_WIDTH])
函数参数: image:目的地址; src:解压后的源地址
函数时间:1.7~1.8ms
备注:将全部的图像依取行和取列数组取相应的行和列
*/
void ImgCompress_128x64(uint8 *src, uint8 (*image)[IMAGE_WIDTH])
{
register uint16 i, j;
const uint8 *p = NULL;
for (i = 0; i < IMAGE_HEIGHT; i++)
{
p=&src[i*CAMERA_W];
// for (j = 0; j < IMAGE_WIDTH; j += 4)
// {
// image[IMAGE_HEIGHT-1-i][j] = *(p + RowCol[i][j]);
// image[IMAGE_HEIGHT-1-i][j + 1] = *(p + RowCol[i][j + 1]);
// image[IMAGE_HEIGHT-1-i][j + 2] = *(p + RowCol[i][j + 2]);
// image[IMAGE_HEIGHT-1-i][j + 3] = *(p + RowCol[i][j + 3]);
// }
for (j = 0; j < IMAGE_WIDTH; j += 1)
{
if(RowCol[i][j] != 65535)
{
image[IMAGE_HEIGHT-1-i][j] = *(p + RowCol[i][j]);
}
}
}
}
//中断函数
void camera_h_isr()//行中断
{
static u16 h_counter=0; //行计数位
if ((H_PORT->ISFR & H_PIN) != 0) //注意优先级,该句话滤掉杂波,必不可少
{
h_counter++;
if(h_counter==CAMERA_H)
{
h_counter=0;
SOFT_INTERRUPT_STIG();
}
LPLD_DMA_EnableReq(DMA_CHX); //开启DMA传输
}
}
void camera_v_isr()//场中断
{
if ((V_PORT->ISFR & V_PIN) != 0)//注意优先级,该句话滤掉杂波,必不可少
{
disable_irq(V_PORT_IRQn);
if (gl_now_flag == 0)
{
LPLD_DMA_LoadDstAddr(DMA_CHX, (uint32)gl_Image1);
gl_now_flag = 1;
}
else
{
LPLD_DMA_LoadDstAddr(DMA_CHX, (uint32)gl_Image0);//重新加载目的地址
gl_now_flag = 0;
}
SOFT_INTERRUPT_STIG();//触发中断,该中断函数结束后立即进入图像处理
enable_irq(V_PORT_IRQn);
}
}
//软中断中调用解压、压缩函数
void camera_process_isr()
{
//图像解压提取,约占4.2ms
if (gl_now_flag == 0)
{
ImgExtract(gl_Image1, gl_ImageFull, CAMERA_W);//解压图像
}
else
{
ImgExtract(gl_Image0, gl_ImageFull, CAMERA_W);//解压图像
}
ImgCompress_128x64(gl_ImageFull, gl_ImageCompress);//提取压缩
}
//均匀地取行取列
void init_get_colrow_array()
{
float32 get_row_ = 0, get_col_ = 0;
get_row_ = ((float32)CAMERA_H) / ((float32)IMAGE_HEIGHT);
get_col_ = ((float32)CAMERA_W) / ((float32)IMAGE_WIDTH);
int i, j;
for (j = 0; j < IMAGE_WIDTH; j++)
{
for (i = 0; i < IMAGE_HEIGHT; i++)
{
RowCol[i][j] = (uint16)(get_col_ * j);
}
}
for (i = 0; i < IMAGE_HEIGHT; i++)
{
row[i] = (uint16)(get_row_ * i);
}
}
这里先说一下图像采集的整个流程吧:>1.首先定义中断优先级,依次将场中断,场中断定义为优先级最高的两个中断。再定义一个软中断,主要是对于中断产生的数组做一些压缩解压缩,格式转换的处理,使其能实时得到需要显示的数据。然后使能包括行,场中断,以及自定义的场中断。接着,中断捕获产生一个一维的数组,数组经过压缩和解压缩传到存储区存储在数组里,这里压缩应该是为了减小DMA传输的时间,然后经过一个数组定义的取行取列对图像的进行进一步的压缩,从而得到128x64的图像,最后通过一个ImgCompress_128x64将一维数组转为二维数组,再通过oled的一个专用于显示128x64的图像的函数显示图像。
最后附加一个函数分析
void ImgCompress_128x64(uint8 *src, uint8 (*image)[IMAGE_WIDTH])
{
register uint16 i, j;
const uint8 *p = NULL;
for (i = 0; i < IMAGE_HEIGHT; i++)
{
p=&src[i*CAMERA_W];
for (j = 0; j < IMAGE_WIDTH; j += 1)
{
if(RowCol[i][j] != 65535)
{
image[IMAGE_HEIGHT-1-i][j] = *(p + RowCol[i][j]);
}
}
}
}
这是一个一维数组取行取列后转二维的处理函数,然后对其按照上面那一段特别长的数组的取行取列的位对其进行转换,我最初以为gl_ImageFull()已经是经过取行取列处理过的数组,写了一个特别low的函数,特别尴尬。>总的来说这周的学习还是比较满意的,接下来的一周,希望能完成电机控制,让车跑起来吧。