From 93bd7a07ddd84565dce2dee3ff3bc7191304a627 Mon Sep 17 00:00:00 2001 From: SeekFree <1325536866@qq.com> Date: Tue, 22 Mar 2022 10:58:46 +0800 Subject: [PATCH] =?UTF-8?q?V1.2.7=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B9=8B=E5=89=8D=E6=8E=A8=E9=80=81=E7=9A=84=E6=80=BB?= =?UTF-8?q?=E9=92=BB=E9=A3=8E=E5=BA=95=E5=B1=82=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=9A=E5=AF=BC=E8=87=B4=E5=AE=B9?= =?UTF-8?q?=E6=98=93=E5=87=BA=E7=8E=B0=E9=87=87=E9=9B=86=E9=94=99=E4=BD=8D?= =?UTF-8?q?=E3=80=82=20=20=20=20=20=20=20=20=20=E7=94=B1=E4=BA=8E=E5=81=B6?= =?UTF-8?q?=E5=B0=94=E6=8E=A5=E8=A7=A6=E4=B8=8D=E8=89=AF=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E9=94=99=E4=BD=8D=EF=BC=8C=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E5=AF=B9=E6=AD=A4=E5=A2=9E=E5=8A=A0=E6=A3=80=E6=B5=8B=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=B9=B6=E5=B0=9D=E8=AF=95=E8=BF=9B=E8=A1=8C=E8=87=AA?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example/ADC_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Dual_Core_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/EEPROM_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Encoder_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/FFT_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../LED_Blink_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/PIT_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/PWM_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/Printf_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Systick_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- Example/UART_Demo/Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../Libraries/doc/version.txt | 4 ++ .../seekfree_peripheral/SEEKFREE_MT9V03X.c | 41 ++++++++++++++----- .../seekfree_peripheral/SEEKFREE_MT9V03X.h | 2 +- .../USER/Cpu0_Main.c | 5 ++- 49 files changed, 579 insertions(+), 178 deletions(-) diff --git a/Example/ADC_Demo/Libraries/doc/version.txt b/Example/ADC_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/ADC_Demo/Libraries/doc/version.txt +++ b/Example/ADC_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/doc/version.txt b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/doc/version.txt +++ b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Cpu1_Handles_Interrupts_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Dual_Core_Demo/Libraries/doc/version.txt b/Example/Dual_Core_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Dual_Core_Demo/Libraries/doc/version.txt +++ b/Example/Dual_Core_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/EEPROM_Demo/Libraries/doc/version.txt b/Example/EEPROM_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/EEPROM_Demo/Libraries/doc/version.txt +++ b/Example/EEPROM_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Encoder_Demo/Libraries/doc/version.txt b/Example/Encoder_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Encoder_Demo/Libraries/doc/version.txt +++ b/Example/Encoder_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/FFT_Demo/Libraries/doc/version.txt b/Example/FFT_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/FFT_Demo/Libraries/doc/version.txt +++ b/Example/FFT_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/GPIO_Interrupt_Demo/Libraries/doc/version.txt b/Example/GPIO_Interrupt_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/GPIO_Interrupt_Demo/Libraries/doc/version.txt +++ b/Example/GPIO_Interrupt_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Interrupt_Priority_Set_Demo/Libraries/doc/version.txt b/Example/Interrupt_Priority_Set_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Interrupt_Priority_Set_Demo/Libraries/doc/version.txt +++ b/Example/Interrupt_Priority_Set_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/LED_Blink_Demo/Libraries/doc/version.txt b/Example/LED_Blink_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/LED_Blink_Demo/Libraries/doc/version.txt +++ b/Example/LED_Blink_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/PIT_Demo/Libraries/doc/version.txt b/Example/PIT_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/PIT_Demo/Libraries/doc/version.txt +++ b/Example/PIT_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/PWM_Demo/Libraries/doc/version.txt b/Example/PWM_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/PWM_Demo/Libraries/doc/version.txt +++ b/Example/PWM_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Printf_Demo/Libraries/doc/version.txt b/Example/Printf_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Printf_Demo/Libraries/doc/version.txt +++ b/Example/Printf_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt +++ b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/Systick_Demo/Libraries/doc/version.txt b/Example/Systick_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/Systick_Demo/Libraries/doc/version.txt +++ b/Example/Systick_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Example/UART_Demo/Libraries/doc/version.txt b/Example/UART_Demo/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Example/UART_Demo/Libraries/doc/version.txt +++ b/Example/UART_Demo/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Example/UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt index 20d2375..10dde1a 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt @@ -1,3 +1,7 @@ +V1.2.7 + 修复之前推送的总钻风底层错误的问题,会导致容易出现采集错位。 + 由于偶尔接触不良导致图像错位,程序对此增加检测程序并尝试进行自修复。 + V1.2.6 修改蓝牙驱动底层,简化了使用方式 修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置 diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index 058b448..a5c4ffa 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -335,15 +335,17 @@ void mt9v03x_init(void) gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP); } - link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//如果超频到300M 倒数第二个参数请设置为FALLING eru_init(MT9V03X_VSYNC_PIN, FALLING); //初始化场中断,并设置为下降沿触发中断 restoreInterrupts(interrupt_state); } -uint8 mt9v03x_finish_flag = 0; //一场图像采集完成标志位 +uint8 mt9v03x_finish_flag = 0;//一场图像采集完成标志位 +uint8 mt9v03x_lost_flag = 1; //图像丢失标志位 uint8 mt9v03x_dma_int_num; //当前DMA中断次数 +uint8 mt9v03x_dma_init_flag; //是否需要重新初始化 //------------------------------------------------------------------------------------------------------------------- // @brief MT9V03X摄像头场中断 // @param NULL @@ -355,7 +357,14 @@ void mt9v03x_vsync(void) { CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN); mt9v03x_dma_int_num = 0; - if(!mt9v03x_finish_flag)//查看图像数组是否使用完毕,如果未使用完毕则不开始采集,避免出现访问冲突 + if(mt9v03x_dma_init_flag || mt9v03x_lost_flag) + { + mt9v03x_dma_init_flag = 0; + IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH); + link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H); + dma_start(MT9V03X_DMA_CH); + } + else { if(1 == link_list_num) { @@ -364,7 +373,8 @@ void mt9v03x_vsync(void) } dma_start(MT9V03X_DMA_CH); } - + + mt9v03x_lost_flag = 1; } @@ -378,14 +388,25 @@ void mt9v03x_vsync(void) void mt9v03x_dma(void) { CLEAR_DMA_FLAG(MT9V03X_DMA_CH); - mt9v03x_dma_int_num++; - if(mt9v03x_dma_int_num >= link_list_num) + if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) + { //图像错位 + mt9v03x_finish_flag = 0; + dma_stop(MT9V03X_DMA_CH); + IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH); + mt9v03x_dma_init_flag = 1; + } + else { - //采集完成 - mt9v03x_dma_int_num = 0; - mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) - dma_stop(MT9V03X_DMA_CH); + mt9v03x_dma_int_num++; + if(mt9v03x_dma_int_num >= link_list_num) + { + //采集完成 + mt9v03x_dma_int_num = 0; + mt9v03x_lost_flag = 0; + mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) + dma_stop(MT9V03X_DMA_CH); + } } } diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h index 2b5652c..1ff9b20 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.h @@ -47,7 +47,7 @@ //初始化超时设置 -#define MT9V03X_INIT_TIMEOUT 0x0080 +#define MT9V03X_INIT_TIMEOUT 0x0080 //-------------------------------------------------------------------------------------------------- //引脚配置 //-------------------------------------------------------------------------------------------------- diff --git a/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c b/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c index 82d0cab..1bb8814 100644 --- a/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c +++ b/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c @@ -34,7 +34,8 @@ int core0_main(void) { get_clk();//获取时钟频率 务必保留 //用户在此处调用各种初始化函数等 - + mt9v03x_init(); + ips200_init(); //等待所有核心初始化完毕 IfxCpu_emitEvent(&g_cpuSyncEvent); IfxCpu_waitEvent(&g_cpuSyncEvent, 0xFFFF); @@ -46,7 +47,7 @@ int core0_main(void) while (TRUE) { //用户在此处编写任务代码 - + ips200_displayimage032(mt9v03x_image[0], MT9V03X_W, MT9V03X_H); } }