例程-UART串口
#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
案例
#include "zf_common_headfile.h"
#include "isr_config.h"
#pragma section all "cpu0_dsram"
#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_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