From d33dadb382b6c6e8941472859224b788c632000a Mon Sep 17 00:00:00 2001 From: SEEKFREE_BUDING <2289331269@qq.com> Date: Mon, 17 Jul 2023 15:34:52 +0800 Subject: [PATCH] =?UTF-8?q?V3.2.1=20=20=20=20=20=20=20=20=20flash=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=86=99=E5=85=A5=E6=97=B6=E7=9A=84=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=93=A6=E9=99=A4=E5=BD=93=E5=89=8D=E9=A1=B5=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=20=E9=98=B2=E6=AD=A2=E7=94=A8=E6=88=B7=E5=9B=A0?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=B8=8D=E8=A7=84=E8=8C=83=E5=AF=BC=E8=87=B4?= =?UTF-8?q?flash=E4=BD=BF=E7=94=A8=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../E01_gpio_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E01_gpio_demo/user/cpu0_main.c | 9 ------- Example/E01_gpio_demo/user/isr.c | 3 +++ .../E02_uart_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E02_uart_demo/user/cpu0_main.c | 27 ++++++++++--------- Example/E02_uart_demo/user/isr.c | 6 +++++ .../E03_adc_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E03_adc_demo/user/cpu0_main.c | 9 ------- Example/E03_adc_demo/user/isr.c | 3 +++ .../E04_pwm_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E04_pwm_demo/user/cpu0_main.c | 10 ------- Example/E04_pwm_demo/user/isr.c | 3 +++ .../E05_pit_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E05_pit_demo/user/cpu0_main.c | 9 ------- Example/E05_pit_demo/user/isr.c | 3 +++ .../E06_exit_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E06_exit_demo/user/cpu0_main.c | 9 ------- Example/E06_exit_demo/user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E07_encoder_demo/user/cpu0_main.c | 9 ------- Example/E07_encoder_demo/user/isr.c | 3 +++ .../E08_eeprom_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E08_eeprom_demo/user/cpu0_main.c | 10 ------- Example/E08_eeprom_demo/user/isr.c | 3 +++ .../E09_timer_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E09_timer_demo/user/cpu0_main.c | 9 ------- Example/E09_timer_demo/user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + .../user/cpu0_main.c | 9 ------- Example/E10_printf_debug_log_demo/user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + .../user/cpu0_main.c | 9 ------- .../user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + .../user/cpu0_main.c | 9 ------- .../user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E13_dual_core_demo/user/cpu0_main.c | 9 ------- Example/E13_dual_core_demo/user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + .../user/cpu0_main.c | 8 ------ .../user/isr.c | 3 +++ .../E15_fft_demo/libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + Example/E15_fft_demo/user/cpu0_main.c | 8 ++---- Example/E15_fft_demo/user/isr.c | 3 +++ .../libraries/doc/version.txt | 2 ++ .../libraries/zf_driver/zf_driver_flash.c | 14 ++++++++-- .../libraries/zf_driver/zf_driver_flash.h | 1 + .../user/cpu0_main.c | 15 +++-------- Seekfree_TC264_Opensource_Library/user/isr.c | 3 +++ 80 files changed, 310 insertions(+), 181 deletions(-) diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E01_gpio_demo/libraries/doc/version.txt +++ b/Example/E01_gpio_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E01_gpio_demo/user/cpu0_main.c b/Example/E01_gpio_demo/user/cpu0_main.c index 96ee362..dae2a5b 100644 --- a/Example/E01_gpio_demo/user/cpu0_main.c +++ b/Example/E01_gpio_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 核心板正常供电即可 无需额外连接 // 如果使用主板测试 主板必须要用电池供电 diff --git a/Example/E01_gpio_demo/user/isr.c b/Example/E01_gpio_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E01_gpio_demo/user/isr.c +++ b/Example/E01_gpio_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E02_uart_demo/libraries/doc/version.txt +++ b/Example/E02_uart_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E02_uart_demo/user/cpu0_main.c b/Example/E02_uart_demo/user/cpu0_main.c index eff2fb8..2bd20ff 100644 --- a/Example/E02_uart_demo/user/cpu0_main.c +++ b/Example/E02_uart_demo/user/cpu0_main.c @@ -38,15 +38,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 @@ -57,7 +48,17 @@ // USB-TTL-GND 核心板电源地 GND // USB-TTL-3V3 核心板 3V3 电源 -// *************************** 例程测试说明 *************************** +//================================特别注意================================ +// 串口接线时一定要接GND 否则无法正常通讯 +//================================特别注意================================ +//================================特别注意================================ +// 串口接线时一定要接GND 否则无法正常通讯 +//================================特别注意================================ +//================================特别注意================================ +// 串口接线时一定要接GND 否则无法正常通讯 +//================================特别注意================================ + +// ***************************** 例程测试说明 ***************************** // 1.核心板烧录完成本例程,单独使用核心板与调试下载器或者 USB-TTL 模块,在断电情况下完成连接 // 2.将调试下载器或者 USB-TTL 模块连接电脑,完成上电 // 3.电脑上使用串口助手打开对应的串口,串口波特率为 DEBUG_UART_BAUDRATE 宏定义 默认 115200,核心板按下复位按键 @@ -67,7 +68,7 @@ // UART get data:....... // 如果发现现象与说明严重不符 请参照本文件最下方 例程常见问题说明 进行排查 -// **************************** 代码区域 **************************** +// ******************************* 代码区域 ******************************* #define UART_INDEX (DEBUG_UART_INDEX ) // 默认 UART_0 #define UART_BAUDRATE (DEBUG_UART_BAUDRATE) // 默认 115200 #define UART_TX_PIN (DEBUG_UART_TX_PIN ) // 默认 UART0_TX_P14_0 @@ -140,9 +141,9 @@ IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) #pragma section all restore -// **************************** 代码区域 **************************** +// ******************************* 代码区域 ******************************* -// *************************** 例程常见问题说明 *************************** +// **************************** 例程常见问题说明 **************************** // 遇到问题时请按照以下问题检查列表检查 // 问题1:串口没有数据 // 查看串口助手打开的是否是正确的串口,检查打开的 COM 口是否对应的是调试下载器或者 USB-TTL 模块的 COM 口 diff --git a/Example/E02_uart_demo/user/isr.c b/Example/E02_uart_demo/user/isr.c index 5651115..d6bed8c 100644 --- a/Example/E02_uart_demo/user/isr.c +++ b/Example/E02_uart_demo/user/isr.c @@ -36,6 +36,12 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E03_adc_demo/libraries/doc/version.txt +++ b/Example/E03_adc_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E03_adc_demo/user/cpu0_main.c b/Example/E03_adc_demo/user/cpu0_main.c index 8165121..c63982d 100644 --- a/Example/E03_adc_demo/user/cpu0_main.c +++ b/Example/E03_adc_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 diff --git a/Example/E03_adc_demo/user/isr.c b/Example/E03_adc_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E03_adc_demo/user/isr.c +++ b/Example/E03_adc_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E04_pwm_demo/libraries/doc/version.txt +++ b/Example/E04_pwm_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E04_pwm_demo/user/cpu0_main.c b/Example/E04_pwm_demo/user/cpu0_main.c index 561e834..8b59e34 100644 --- a/Example/E04_pwm_demo/user/cpu0_main.c +++ b/Example/E04_pwm_demo/user/cpu0_main.c @@ -36,16 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - - // *************************** 例程硬件连接说明 *************************** // 核心板正常供电即可 无需额外连接 diff --git a/Example/E04_pwm_demo/user/isr.c b/Example/E04_pwm_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E04_pwm_demo/user/isr.c +++ b/Example/E04_pwm_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E05_pit_demo/libraries/doc/version.txt +++ b/Example/E05_pit_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E05_pit_demo/user/cpu0_main.c b/Example/E05_pit_demo/user/cpu0_main.c index 2e63e94..63f8fc2 100644 --- a/Example/E05_pit_demo/user/cpu0_main.c +++ b/Example/E05_pit_demo/user/cpu0_main.c @@ -37,15 +37,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *********************** // 核心板正常供电即可 无需额外连接 diff --git a/Example/E05_pit_demo/user/isr.c b/Example/E05_pit_demo/user/isr.c index 6ecd4f9..0c0afe9 100644 --- a/Example/E05_pit_demo/user/isr.c +++ b/Example/E05_pit_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** //IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) //{ diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E06_exit_demo/libraries/doc/version.txt +++ b/Example/E06_exit_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E06_exit_demo/user/cpu0_main.c b/Example/E06_exit_demo/user/cpu0_main.c index 24f51c4..08c4c45 100644 --- a/Example/E06_exit_demo/user/cpu0_main.c +++ b/Example/E06_exit_demo/user/cpu0_main.c @@ -38,15 +38,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 核心板正常供电即可 无需额外连接 diff --git a/Example/E06_exit_demo/user/isr.c b/Example/E06_exit_demo/user/isr.c index b7ec3ef..050d439 100644 --- a/Example/E06_exit_demo/user/isr.c +++ b/Example/E06_exit_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E07_encoder_demo/libraries/doc/version.txt +++ b/Example/E07_encoder_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E07_encoder_demo/user/cpu0_main.c b/Example/E07_encoder_demo/user/cpu0_main.c index fc89c41..5ecc9e1 100644 --- a/Example/E07_encoder_demo/user/cpu0_main.c +++ b/Example/E07_encoder_demo/user/cpu0_main.c @@ -38,15 +38,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 diff --git a/Example/E07_encoder_demo/user/isr.c b/Example/E07_encoder_demo/user/isr.c index 6ecd4f9..0c0afe9 100644 --- a/Example/E07_encoder_demo/user/isr.c +++ b/Example/E07_encoder_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** //IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) //{ diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E08_eeprom_demo/libraries/doc/version.txt +++ b/Example/E08_eeprom_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E08_eeprom_demo/user/cpu0_main.c b/Example/E08_eeprom_demo/user/cpu0_main.c index 7fffac0..4b18a9f 100644 --- a/Example/E08_eeprom_demo/user/cpu0_main.c +++ b/Example/E08_eeprom_demo/user/cpu0_main.c @@ -36,16 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 diff --git a/Example/E08_eeprom_demo/user/isr.c b/Example/E08_eeprom_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E08_eeprom_demo/user/isr.c +++ b/Example/E08_eeprom_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E09_timer_demo/libraries/doc/version.txt +++ b/Example/E09_timer_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E09_timer_demo/user/cpu0_main.c b/Example/E09_timer_demo/user/cpu0_main.c index fbc5e91..db5d35f 100644 --- a/Example/E09_timer_demo/user/cpu0_main.c +++ b/Example/E09_timer_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 diff --git a/Example/E09_timer_demo/user/isr.c b/Example/E09_timer_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E09_timer_demo/user/isr.c +++ b/Example/E09_timer_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { 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 846ad0c..2e12f23 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,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E10_printf_debug_log_demo/user/cpu0_main.c b/Example/E10_printf_debug_log_demo/user/cpu0_main.c index 23560ce..903c9c3 100644 --- a/Example/E10_printf_debug_log_demo/user/cpu0_main.c +++ b/Example/E10_printf_debug_log_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *************************** // 使用逐飞科技 英飞凌TriCore 调试下载器连接 // 直接将下载器正确连接在核心板的调试下载接口即可 diff --git a/Example/E10_printf_debug_log_demo/user/isr.c b/Example/E10_printf_debug_log_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E10_printf_debug_log_demo/user/isr.c +++ b/Example/E10_printf_debug_log_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { 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 846ad0c..2e12f23 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,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E11_interrupt_priority_set_demo/user/cpu0_main.c b/Example/E11_interrupt_priority_set_demo/user/cpu0_main.c index 8dad5ea..d20b31e 100644 --- a/Example/E11_interrupt_priority_set_demo/user/cpu0_main.c +++ b/Example/E11_interrupt_priority_set_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // **************************** 代码区域 **************************** diff --git a/Example/E11_interrupt_priority_set_demo/user/isr.c b/Example/E11_interrupt_priority_set_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E11_interrupt_priority_set_demo/user/isr.c +++ b/Example/E11_interrupt_priority_set_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { 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 846ad0c..2e12f23 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,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E12_cpu1_handles_interrupts_demo/user/cpu0_main.c b/Example/E12_cpu1_handles_interrupts_demo/user/cpu0_main.c index 07236a0..cb43996 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/user/cpu0_main.c +++ b/Example/E12_cpu1_handles_interrupts_demo/user/cpu0_main.c @@ -37,15 +37,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // **************************** 代码区域 **************************** int core0_main(void) { diff --git a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c index 6ecd4f9..0c0afe9 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c +++ b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** //IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) //{ diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E13_dual_core_demo/libraries/doc/version.txt +++ b/Example/E13_dual_core_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E13_dual_core_demo/user/cpu0_main.c b/Example/E13_dual_core_demo/user/cpu0_main.c index 9d44275..6f83f65 100644 --- a/Example/E13_dual_core_demo/user/cpu0_main.c +++ b/Example/E13_dual_core_demo/user/cpu0_main.c @@ -36,15 +36,6 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *********************** // 核心板正常供电即可 无需额外连接 diff --git a/Example/E13_dual_core_demo/user/isr.c b/Example/E13_dual_core_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E13_dual_core_demo/user/isr.c +++ b/Example/E13_dual_core_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { 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 846ad0c..2e12f23 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,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E14_specifies_variable_or_code_location_demo/user/cpu0_main.c b/Example/E14_specifies_variable_or_code_location_demo/user/cpu0_main.c index d7f3440..3caf90d 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/user/cpu0_main.c +++ b/Example/E14_specifies_variable_or_code_location_demo/user/cpu0_main.c @@ -34,14 +34,6 @@ ********************************************************************************************************************/ #include "zf_common_headfile.h" -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - // *************************** 例程硬件连接说明 *********************** // 核心板正常供电即可 无需额外连接 diff --git a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c +++ b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Example/E15_fft_demo/libraries/doc/version.txt +++ b/Example/E15_fft_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Example/E15_fft_demo/user/cpu0_main.c b/Example/E15_fft_demo/user/cpu0_main.c index c73d005..51bc0f2 100644 --- a/Example/E15_fft_demo/user/cpu0_main.c +++ b/Example/E15_fft_demo/user/cpu0_main.c @@ -46,13 +46,9 @@ cfloat32 fft_in [SIZE_N]; cfloat32 fft_out[SIZE_N]; uint32 use_time; -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + + float x1, x2; diff --git a/Example/E15_fft_demo/user/isr.c b/Example/E15_fft_demo/user/isr.c index 79aaf22..0bccba8 100644 --- a/Example/E15_fft_demo/user/isr.c +++ b/Example/E15_fft_demo/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt index 846ad0c..2e12f23 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.2.1 + flash新增写入时的是否擦除当前页的判断 防止用户因使用不规范导致flash使用报错 V3.2.0 新增wifi spi模块驱动文件 新增detector上位机API接口 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c index f1d74d0..f91f5a0 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c @@ -31,6 +31,8 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复之前不完整的断言判断以及错误的注释内容 +* 2023-07-15 pudding 写入时单独增加是否擦除判断,防止用户使用报错 ********************************************************************************************************************/ #include "IfxScuWdt.h" @@ -41,6 +43,7 @@ flash_data_union flash_union_buffer[EEPROM_PAGE_LENGTH]; // FLASH 操作的数据缓冲区 +static uint8 flash_erase_page_flag; // FLASH 擦除页标志位 如果用户没有主动擦除后再写入 则帮用户擦除 //------------------------------------------------------------------------------------------------------------------- // 函数简介 校验FLASH页是否有数据 @@ -86,6 +89,8 @@ void flash_erase_page (uint32 sector_num, uint32 page_num) IfxScuWdt_setSafetyEndinit (end_init_sfty_pw); IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_D0); + + flash_erase_page_flag = 1; } //------------------------------------------------------------------------------------------------------------------- @@ -131,6 +136,11 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui uint32 data_cont = 0; end_init_sfty_pw = IfxScuWdt_getSafetyWatchdogPassword(); + if(flash_erase_page_flag == 0 && flash_check(sector_num, page_num)) + { + flash_erase_page(sector_num, page_num); + } + for(data_cont = 0; data_cont < len; data_cont ++) { data_addr = flash_addr + data_cont * FLASH_DATA_SIZE; @@ -147,6 +157,8 @@ void flash_write_page (uint32 sector_num, uint32 page_num, const uint32 *buf, ui IfxFlash_waitUnbusy(0, IfxFlash_FlashType_D0); } + + flash_erase_page_flag = 0; } //------------------------------------------------------------------------------------------------------------------- @@ -182,8 +194,6 @@ uint8 flash_write_page_from_buffer (uint32 sector_num, uint32 page_num) { uint32 *data_pointer = (uint32 *)flash_union_buffer; - zf_assert(EEPROM_PAGE_NUM > page_num); - flash_write_page(0, page_num, data_pointer, EEPROM_PAGE_LENGTH); return 0; diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h index 0df532a..912585a 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h @@ -31,6 +31,7 @@ * 修改记录 * 日期 作者 备注 * 2022-09-15 pudding first version +* 2023-07-14 pudding 修复错误的注释 ********************************************************************************************************************/ #ifndef _zf_driver_flash_h_ diff --git a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c index 439a088..238d5c5 100644 --- a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c +++ b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c @@ -36,18 +36,9 @@ #pragma section all "cpu0_dsram" // 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中 - -// 工程导入到软件之后,应该选中工程然后点击refresh刷新一下之后再编译 -// 工程默认设置为关闭优化,可以自己右击工程选择properties->C/C++ Build->Setting -// 然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 -// 一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - -// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 -// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 - -// 本例程是开源库移植用空工程 -// 本例程是开源库移植用空工程 -// 本例程是开源库移植用空工程 +// 本例程是开源库空工程 可用作移植或者测试各类内外设 +// 本例程是开源库空工程 可用作移植或者测试各类内外设 +// 本例程是开源库空工程 可用作移植或者测试各类内外设 // **************************** 代码区域 **************************** diff --git a/Seekfree_TC264_Opensource_Library/user/isr.c b/Seekfree_TC264_Opensource_Library/user/isr.c index de920c4..77be86e 100644 --- a/Seekfree_TC264_Opensource_Library/user/isr.c +++ b/Seekfree_TC264_Opensource_Library/user/isr.c @@ -36,6 +36,9 @@ #include "isr_config.h" #include "isr.h" +// 对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用 interrupt_global_enable(0); 来开启中断嵌套 +// 简单点说实际上进入中断后TC系列的硬件自动调用了 interrupt_global_disable(); 来拒绝响应任何的中断,因此需要我们自己手动调用 interrupt_global_enable(0); 来开启中断的响应。 + // **************************** PIT中断函数 **************************** IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) {