From 146043d92e36f14094f078f37ae3f5f81955f980 Mon Sep 17 00:00:00 2001 From: SEEKFREE_BUDING <2289331269@qq.com> Date: Sat, 9 Mar 2024 17:58:13 +0800 Subject: [PATCH] =?UTF-8?q?V3.2.11=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=87=8C=E7=9E=B3=E9=AB=98=E5=B8=A7=E7=8E=87=E7=89=88?= =?UTF-8?q?=E7=94=BB=E8=B4=A8=E5=99=AA=E7=82=B9=E9=97=AE=E9=A2=98=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E5=A4=8D=E5=BB=B6=E6=97=B6=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=9C=A8=E5=A4=9A=E4=B8=AD=E6=96=AD=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example/E01_gpio_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E02_uart_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E03_adc_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E04_pwm_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E05_pit_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E06_exit_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../E07_encoder_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../E08_eeprom_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E09_timer_demo/.cproject | 2 +- Example/E09_timer_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E09_timer_demo/user/cpu0_main.c | 11 +++++++---- .../libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../E13_dual_core_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- Example/E15_fft_demo/libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../libraries/doc/version.txt | 3 +++ .../libraries/zf_device/zf_device_camera.c | 2 +- .../libraries/zf_device/zf_device_camera.h | 2 +- .../libraries/zf_device/zf_device_scc8660.h | 2 +- .../libraries/zf_driver/zf_driver_delay.c | 12 +++++++++--- .../libraries/zf_driver/zf_driver_dma.c | 16 ++++++++-------- .../libraries/zf_driver/zf_driver_dma.h | 2 +- .../user/cpu0_main.c | 7 ++++--- 115 files changed, 396 insertions(+), 248 deletions(-) diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E01_gpio_demo/libraries/doc/version.txt +++ b/Example/E01_gpio_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E02_uart_demo/libraries/doc/version.txt +++ b/Example/E02_uart_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E03_adc_demo/libraries/doc/version.txt +++ b/Example/E03_adc_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E04_pwm_demo/libraries/doc/version.txt +++ b/Example/E04_pwm_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E05_pit_demo/libraries/doc/version.txt +++ b/Example/E05_pit_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E06_exit_demo/libraries/doc/version.txt +++ b/Example/E06_exit_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E07_encoder_demo/libraries/doc/version.txt +++ b/Example/E07_encoder_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E08_eeprom_demo/libraries/doc/version.txt +++ b/Example/E08_eeprom_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E09_timer_demo/.cproject b/Example/E09_timer_demo/.cproject index 67ba737..7456152 100644 --- a/Example/E09_timer_demo/.cproject +++ b/Example/E09_timer_demo/.cproject @@ -113,7 +113,7 @@ - + diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E09_timer_demo/libraries/doc/version.txt +++ b/Example/E09_timer_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E09_timer_demo/user/cpu0_main.c b/Example/E09_timer_demo/user/cpu0_main.c index db5d35f..55083f8 100644 --- a/Example/E09_timer_demo/user/cpu0_main.c +++ b/Example/E09_timer_demo/user/cpu0_main.c @@ -70,23 +70,26 @@ int core0_main(void) debug_init(); // 初始化默认调试串口 // 此处编写用户代码 例如外设初始化代码等 - system_start(); + printf("time start.\r\n"); + system_start(); system_delay_us(540); printf("Timer counted %lu us.\r\n", system_getval_us()); system_delay_ms(1000); - system_start(); + printf("time start.\r\n"); + system_start(); system_delay_ms(65); printf("Timer counted %lu ms.\r\n", system_getval_ms()); system_delay_ms(1000); - system_start(); + printf("time start.\r\n"); - system_delay_ms(32700); + system_start(); + system_delay_ms(1234); printf("Timer counted %lu ms.\r\n", system_getval_ms()); // 此处编写用户代码 例如外设初始化代码等 cpu_wait_event_ready(); // 等待所有核心初始化完毕 diff --git a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt +++ b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt +++ b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E13_dual_core_demo/libraries/doc/version.txt +++ b/Example/E13_dual_core_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Example/E15_fft_demo/libraries/doc/version.txt +++ b/Example/E15_fft_demo/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt index 0cd6063..52e0ad4 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt @@ -1,3 +1,6 @@ +V3.2.11 + 修复凌瞳高帧率版画质噪点问题 + 修复延时函数在多中断时可能异常的问题 V3.2.10 修复spi-wifi初始化失败的问题 修复spi-wifi获取配置信息错误的问题 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c index 68668c4..595df8d 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c @@ -115,7 +115,7 @@ void camera_fifo_init (void) // @return void // Sample usage: camera_init(); //------------------------------------------------------------------------------------------------------------------- -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size) +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size) { uint8 num; uint8 link_list_num; diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h index 2cd7d2d..1d21c71 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h @@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; // void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // 摄像头二进制图像数据解压为十六进制八位数据 小钻风用 void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像 void camera_fifo_init (void); // 摄像头串口 FIFO 初始化 -uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // 摄像头采集初始化 +uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化 //=================================================摄像头公共库 基础函数================================================ #endif diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h index 6790330..42303ed 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h @@ -79,7 +79,7 @@ #define SCC8660_AUTO_EXP_DEF (0 ) // 自动曝光 默认不开启自动曝光设置 范围 [0-1] 0为关闭 #define SCC8660_BRIGHT_DEF (500) // 亮度设置 手动曝光默认:300 手动曝光时:参数范围0-65535 自动曝光推荐值:100 自动曝光时参数设置范围0-255 -#define SCC8660_FPS_DEF (50 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 +#define SCC8660_FPS_DEF (60 ) // 图像帧率 默认:50 可选参数为:60 50 30 25。 实际帧率还需要看SCC8660_PCLK_DIV参数的设置 #define SCC8660_PCLK_DIV_DEF (2 ) // PCLK分频系数 默认:5 可选参数为:<0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8> // 分频系数越大,PCLK频率越低,降低PCLK可以减轻DVP接口的干扰,但降低PCLK频率则会影响帧率。若无特殊需求请保持默认。 // 例如设置FPS为50帧,但是pclk分频系数选择的为5,则摄像头输出的帧率为50*(1/8)=6.25帧 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c index ae3e610..8fce9cf 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c @@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0) stm0_isr_flag = 0; } -IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) +IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0) { interrupt_global_enable(0); // 开启中断嵌套 IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0); @@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0) //------------------------------------------------------------------------------------------------------------------- void system_delay_10ns (uint32 time) { + uint32 interrupt_global_state; + IfxStm_Index stm_index; stm_index = (IfxStm_Index)IfxCpu_getCoreId(); @@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time) case IfxStm_Index_0: { Ifx_STM *stm_sfr = &MODULE_STM0; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm0_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm0_isr_flag); }break; case IfxStm_Index_1: { Ifx_STM *stm_sfr = &MODULE_STM1; - stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; stm1_isr_flag = 1; + interrupt_global_state = interrupt_global_disable(); // 关闭全局中断 + stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time; + interrupt_global_enable(interrupt_global_state); // 打开全局中断 while(stm1_isr_flag); }break; case IfxStm_Index_none: break; diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c index 43bffbc..6b0cf3b 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c @@ -41,7 +41,7 @@ typedef struct { - Ifx_DMA_CH linked_list[8]; // DMA链表 + Ifx_DMA_CH linked_list[10]; // DMA链表 IfxDma_Dma_Channel channel; // DMA通道句柄 }DMA_LINK; @@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list; // 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count) +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count) { IfxDma_Dma_Channel dmaChn; @@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ IfxDma_Dma_initChannelConfig(&cfg, &dma); uint8 list_num, i; - uint16 single_channel_dma_count; + uint32 single_channel_dma_count; zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数 @@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ break; } list_num++; - if(list_num > 8) + if(list_num > 10) { zf_assert(FALSE); } @@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr); - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initChannel(&dmaChn, &cfg); @@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i); if(i == (list_num - 1)) { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]); } else { - cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]); + cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]); } - cfg.transferCount = single_channel_dma_count; + cfg.transferCount = (uint16)single_channel_dma_count; IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg); i++; diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h index 320d40c..0a806a1 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h @@ -45,7 +45,7 @@ #define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr)))) //====================================================DMA 基础函数==================================================== -uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count); +uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count); void dma_disable (IfxDma_ChannelId dma_ch); void dma_enable (IfxDma_ChannelId dma_ch); //====================================================DMA 基础函数==================================================== diff --git a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c index ef72def..06c540d 100644 --- a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c +++ b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c @@ -24,7 +24,7 @@ * 文件名称 cpu0_main * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 ADS v1.9.20 +* 开发环境 ADS v1.9.4 * 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * @@ -40,6 +40,7 @@ // 本例程是开源库空工程 可用作移植或者测试各类内外设 // 本例程是开源库空工程 可用作移植或者测试各类内外设 + // **************************** 代码区域 **************************** int core0_main(void) { @@ -49,6 +50,7 @@ int core0_main(void) + // 此处编写用户代码 例如外设初始化代码等 cpu_wait_event_ready(); // 等待所有核心初始化完毕 while (TRUE) @@ -57,11 +59,10 @@ int core0_main(void) + // 此处编写需要循环执行的代码 } } #pragma section all restore - - // **************************** 代码区域 ****************************