Files
TC264_Library_seekfree/Example/E08_eeprom_demo/user/cpu0_main.c
SEEKFREE_BUDING a78d724217 V3.1.6
修改GPS使用串口号,优化GPS计算代码
        isr.c中移除CCD采集函数,有需要可以自行添加
        修改按键驱动文件的按键端口号,适配V2.6主板
2023-04-08 18:29:43 +08:00

180 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*********************************************************************************************************************
* TC264 Opensourec Library 即TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是 TC264 开源库的一部分
*
* TC264 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 cpu0_main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 ADS v1.8.0
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2022-09-15 pudding first version
********************************************************************************************************************/
#include "zf_common_headfile.h"
#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 调试下载器连接
// 直接将下载器正确连接在核心板的调试下载接口即可
// 使用 USB-TTL 模块连接
// 模块管脚 单片机管脚
// USB-TTL-RX 查看 zf_common_debug.h 文件中 DEBUG_UART_TX_PIN 宏定义的引脚 默认 P14_0
// USB-TTL-TX 查看 zf_common_debug.h 文件中 DEBUG_UART_RX_PIN 宏定义的引脚 默认 P14_1
// USB-TTL-GND 核心板电源地 GND
// USB-TTL-3V3 核心板 3V3 电源
// *************************** 例程测试说明 ***************************
// 1.核心板烧录完成本例程,单独使用核心板与调试下载器或者 USB-TTL 模块,在断电情况下完成连接
// 2.将调试下载器或者 USB-TTL 模块连接电脑,完成上电
// 3.电脑上使用串口助手打开对应的串口,串口波特率为 zf_common_debug.h 文件中 DEBUG_UART_BAUDRATE 宏定义 默认 115200核心板按下复位按键
// 4.可以在串口助手上看到如下串口信息:
// FLASH_SECTION_INDEX: 127, FLASH_PAGE_INDEX: 3, origin data is :
// ...
// 如果发现现象与说明严重不符 请参照本文件最下方 例程常见问题说明 进行排查
// **************************** 代码区域 ****************************
#define FLASH_SECTION_INDEX (0) // 存储数据用的扇区
#define FLASH_PAGE_INDEX (8) // 存储数据用的页码 倒数第一个页码
int core0_main(void)
{
clock_init(); // 获取时钟频率<务必保留>
debug_init(); // 初始化默认调试串口
// 此处编写用户代码 例如外设初始化代码等
if(flash_check(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX)) // 判断是否有数据
flash_erase_page(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 擦除这一页
printf("\r\n");
flash_read_page_to_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 将数据从 flash 读取到缓冲区
printf("\r\n FLASH_SECTION_INDEX: %d, FLASH_PAGE_INDEX: %d, origin data is :", FLASH_SECTION_INDEX, FLASH_PAGE_INDEX);
printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出
printf("\r\n uint32_type: %lu", flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出
printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出
printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出
printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出
printf("\r\n uint8_type : %u", flash_union_buffer[5].uint8_type); // 将缓冲区第 5 个位置的数据以 uint8 格式输出
printf("\r\n int8_type : %d", flash_union_buffer[6].int8_type); // 将缓冲区第 6 个位置的数据以 int8 格式输出
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
// 例如 flash_data_union_buffer[0] 写入 int8_type 那么只能以 int8_type 读取
// 同样 flash_data_union_buffer[0] 写入 float_type 那么只能以 float_type 读取
printf("\r\n");
printf("\r\n Data property display :");
printf("\r\n flash_data_union_buffer[0] write int8 data type:");
flash_union_buffer[0].int8_type = -128; // 向缓冲区第 0 个位置写入 int8 数据
printf("\r\n float_type : %f-data error", flash_union_buffer[0].float_type);// 将缓冲区第 0 个位置的数据以 float 格式输出 数据将不正确
printf("\r\n int8_type : %d", flash_union_buffer[0].int8_type); // 将缓冲区第 0 个位置的数据以 int8 格式输出 得到正确写入数据
printf("\r\n flash_data_union_buffer[0] write int8 data type:");
flash_union_buffer[0].int8_type -= 1; // 向缓冲区第 0 个位置写入 int8 数据
printf("\r\n float_type : %f-data error", flash_union_buffer[0].float_type);// 将缓冲区第 0 个位置的数据以 float 格式输出 数据将不正确
printf("\r\n int8_type : %d", flash_union_buffer[0].int8_type); // 将缓冲区第 0 个位置的数据以 int8 格式输出 得到正确写入数据
printf("\r\n flash_data_union_buffer[0] write float data type:");
flash_union_buffer[0].float_type = 16.625; // 向缓冲区第 0 个位置写入 float 数据
printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出 得到正确写入数据
printf("\r\n int8_type : %d-data error", flash_union_buffer[0].int8_type); // 将缓冲区第 0 个位置的数据以 int8 格式输出 数据将不正确
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
// 请注意 数据缓冲区的每个位置只能存储一种类型的数据
flash_buffer_clear(); // 清空缓冲区
flash_union_buffer[0].float_type = 3.1415926; // 向缓冲区第 0 个位置写入 float 数据
flash_union_buffer[1].uint32_type = 4294967294; // 向缓冲区第 1 个位置写入 uint32 数据
flash_union_buffer[2].int32_type = -2147483648; // 向缓冲区第 2 个位置写入 int32 数据
flash_union_buffer[3].uint16_type = 65535; // 向缓冲区第 3 个位置写入 uint16 数据
flash_union_buffer[4].int16_type = -32768; // 向缓冲区第 4 个位置写入 int16 数据
flash_union_buffer[5].uint8_type = 255; // 向缓冲区第 5 个位置写入 uint8 数据
flash_union_buffer[6].int8_type = -128; // 向缓冲区第 6 个位置写入 int8 数据
flash_write_page_from_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 向指定 Flash 扇区的页码写入缓冲区数据
printf("\r\n");
flash_buffer_clear(); // 清空缓冲区
printf("\r\n Flash data buffer default data is :");
printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出
printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出
printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出
printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出
printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出
printf("\r\n uint8_type : %u", flash_union_buffer[5].uint8_type); // 将缓冲区第 5 个位置的数据以 uint8 格式输出
printf("\r\n int8_type : %d", flash_union_buffer[6].int8_type); // 将缓冲区第 6 个位置的数据以 int8 格式输出
system_delay_ms(200);
printf("\r\n");
flash_read_page_to_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 将数据从 flash 读取到缓冲区
printf("\r\n FLASH_SECTION_INDEX: %d, FLASH_PAGE_INDEX: %d, new data is :", FLASH_SECTION_INDEX, FLASH_PAGE_INDEX);
printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出
printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出
printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出
printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出
printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出
printf("\r\n uint8_type : %u", flash_union_buffer[5].uint8_type); // 将缓冲区第 5 个位置的数据以 uint8 格式输出
printf("\r\n int8_type : %d", flash_union_buffer[6].int8_type); // 将缓冲区第 6 个位置的数据以 int8 格式输出
// 此处编写用户代码 例如外设初始化代码等
cpu_wait_event_ready(); // 等待所有核心初始化完毕
while (TRUE)
{
// 此处编写需要循环执行的代码
// 此处编写需要循环执行的代码
}
}
#pragma section all restore
// **************************** 代码区域 ****************************
// *************************** 例程常见问题说明 ***************************
// 遇到问题时请按照以下问题检查列表检查
// 问题1串口没有数据
// 查看串口助手打开的是否是正确的串口,检查打开的 COM 口是否对应的是调试下载器或者 USB-TTL 模块的 COM 口
// 如果是使用逐飞科技 英飞凌TriCore 调试下载器连接,那么检查下载器线是否松动,检查核心板串口跳线是否已经焊接,串口跳线查看核心板原理图即可找到
// 如果是使用 USB-TTL 模块连接,那么检查连线是否正常是否松动,模块 TX 是否连接的核心板的 RX模块 RX 是否连接的核心板的 TX
// 如果上述检查都正常,但依旧没有输出数据,就进入调试看看是否进入断言,如果进入断言就更换扇区和页码尝试,如果依旧不行,那么联系技术支持
// 问题2串口数据乱码
// 查看串口助手设置的波特率是否与程序设置一致,程序中 zf_common_debug.h 文件中 DEBUG_UART_BAUDRATE 宏定义为 debug uart 使用的串口波特率
// 问题3数据不对
// 更换扇区和页码尝试,如果数据依旧读出不正确,联系技术支持