Files
TC264_Library_seekfree/Example/E02_uart_demo/user/cpu0_main.c
SEEKFREE_BUDING 4a415c9976 V3.2.4
优化延时函数为中断延时,关闭总中断则为普通延时
        优化ips114屏幕的初始化时间,移除不必要的延时
        修复串口错误中断的串口号异常的问题
        追加更新:
            新增逐飞助手组件支持
            修复fifo高频读写的冲突问题
2023-12-20 11:49:54 +08:00

152 lines
7.4 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"
#include "isr_config.h"
#pragma section all "cpu0_dsram"
// 将本语句与#pragma section all restore语句之间的全局变量都放在CPU0的RAM中
// *************************** 例程硬件连接说明 ***************************
// 使用逐飞科技 英飞凌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 电源
//================================特别注意================================
// 串口接线时一定要接GND 否则无法正常通讯
//================================特别注意================================
//================================特别注意================================
// 串口接线时一定要接GND 否则无法正常通讯
//================================特别注意================================
//================================特别注意================================
// 串口接线时一定要接GND 否则无法正常通讯
//================================特别注意================================
// ***************************** 例程测试说明 *****************************
// 1.核心板烧录完成本例程,单独使用核心板与调试下载器或者 USB-TTL 模块,在断电情况下完成连接
// 2.将调试下载器或者 USB-TTL 模块连接电脑,完成上电
// 3.电脑上使用串口助手打开对应的串口,串口波特率为 DEBUG_UART_BAUDRATE 宏定义 默认 115200核心板按下复位按键
// 4.可以在串口助手上看到如下串口信息:
// UART Text.
// 5.通过串口助手发送数据,会收到相同的反馈数据
// 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
#define UART_RX_PIN (DEBUG_UART_RX_PIN ) // 默认 UART0_RX_P14_1
uint8 uart_get_data[64]; // 串口接收数据缓冲区
uint8 fifo_get_data[64]; // fifo 输出读出缓冲区
uint8 get_data = 0; // 接收数据变量
uint32 fifo_data_count = 0; // fifo 数据个数
fifo_obj_struct uart_data_fifo;
int core0_main(void)
{
clock_init(); // 获取时钟频率<务必保留>
debug_init(); // 初始化默认调试串口
// 此处编写用户代码 例如外设初始化代码等
fifo_init(&uart_data_fifo, FIFO_DATA_8BIT, uart_get_data, 64); // 初始化 fifo 挂载缓冲区
uart_init(UART_INDEX, UART_BAUDRATE, UART_TX_PIN, UART_RX_PIN); // 初始化串口
uart_rx_interrupt(UART_INDEX, 1); // 开启 UART_INDEX 的接收中断
uart_write_string(UART_INDEX, "UART Text."); // 输出测试信息
uart_write_byte(UART_INDEX, '\r'); // 输出回车
uart_write_byte(UART_INDEX, '\n'); // 输出换行
// 此处编写用户代码 例如外设初始化代码等
cpu_wait_event_ready(); // 等待所有核心初始化完毕
while (TRUE)
{
// 此处编写需要循环执行的代码
fifo_data_count = fifo_used(&uart_data_fifo); // 查看 fifo 是否有数据
if(fifo_data_count != 0) // 读取到数据了
{
fifo_read_buffer(&uart_data_fifo, fifo_get_data, &fifo_data_count, FIFO_READ_AND_CLEAN); // 将 fifo 中数据读出并清空 fifo 挂载的缓冲
uart_write_string(UART_INDEX, "\r\nUART get data:"); // 输出测试信息
uart_write_buffer(UART_INDEX, fifo_get_data, fifo_data_count); // 将读取到的数据发送出去
}
system_delay_ms(10);
// 此处编写需要循环执行的代码
}
}
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 UART_INDEX 的接收中断处理函数 这个函数将在 UART_INDEX 对应的中断调用
// 参数说明 void
// 返回参数 void
// 使用示例 uart_rx_interrupt_handler();
//-------------------------------------------------------------------------------------------------------------------
void uart_rx_interrupt_handler (void)
{
// get_data = uart_read_byte(UART_INDEX); // 接收数据 while 等待式 不建议在中断使用
uart_query_byte(UART_INDEX, &get_data); // 接收数据 查询式 有数据会返回 TRUE 没有数据会返回 FALSE
fifo_write_buffer(&uart_data_fifo, &get_data, 1); // 将数据写入 fifo 中
}
IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO)
{
interrupt_global_enable(0); // 开启中断嵌套
uart_rx_interrupt_handler(); // 串口接收处理
}
#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 使用的串口波特率