📄 uart_function.c
字号:
/************************************************************************/
/* FileName: Uart_Function.c */
/* Function: Define writting function of uart on chip */
/************************************************************************/
#include <csl.h>
#include <csl_uart.h>
#include "Timer.h"
#define LENGTH 20
/* Function/ISR prototypes */
interrupt void UartIsr(void);
Uint16 DestData[LENGTH];
Uint16 DataCount = 0;
CSLBool PctoDsp = FALSE;
/****************************************************************/
/* 函数名: Write_Uart() */
/* 功能: 通过UART向PC发指定长度的数据 */
/* 参数: */
/* 无 */
/* 返回值: */
/* 无 */
/****************************************************************/
extern void Write_Uart(unsigned int longth)
{
UART_FSET(URLCR, DLAB, 0);
Counter = 0; // 字符发送计数器清0
GPT_start(hGpt); // 启动定时器,开始计时
while(!(Counter>=longth)); // 等待数据发送完毕
GPT_stop(hGpt); // 停止定时器
}
/****************************************************************/
/* 函数名: Uart_Config() */
/* 功能: 配置UART控制寄存器 */
/* 参数: */
/* 无 */
/* 返回值: */
/* 无 */
/****************************************************************/
extern void Uart_Config(void)
{
/* Set BSR to disable SP2MODE */
CHIP_FSET(XBSR, SP2MODE,0) ;
/* Disable all UART events */
UART_FSET(URLCR,DLAB,0);
UART_RSET(URIER, UART_RINT);
/* Reset and disable FIFOs */
UART_RSET(URFCR, 0x7);
UART_RSET(URFCR, 0);
/* Set DLL and DLM to values appropriate for the required baudrate */
UART_FSET(URLCR, DLAB, 1); // DLAB = 1
//UART_RSET(URDLL, 0x45); // 9600bps
UART_RSET(URDLL, 0xE8); // 9600bps
UART_RSET(URDLM, 0x01);
UART_FSET(URLCR, DLAB, 0); // DLAB = 0
/* Setup word size, stop bits, parity */
UART_RSET(URLCR, 0x0B); // 8 data bits, odd parity, one stop bit
/* Disable loopback control */
UART_RSET(URMCR, 0);
/* UART out of reset */
UART_FSET(URPECR,URST,1);
/* Temporarily disable all maskable interrupts */
IRQ_globalDisable();
/* Clear interrupt enable bit */
IRQ_disable(IRQ_EVT_RINT2);
/* Clear any pending Timer interrupts */
IRQ_clear(IRQ_EVT_RINT2);
/* Place interrupt service routine address at */
/* associated vector location */
IRQ_plug(IRQ_EVT_RINT2, &UartIsr);
/* Enable Timer interrupt */
IRQ_enable(IRQ_EVT_RINT2);
/* Enable all maskable interrupts */
IRQ_globalEnable();
}
/*UART的中断程序*/
interrupt void UartIsr(void)
{
// Transimit seriz of serial debugger on pc is:
// 1112131415161718191A1B1C1D1E1F2021222324
UART_FSET(URLCR, DLAB, 0);
/* wait for RX empty */
while(!UART_FGET(URLSR,DR));
DestData[DataCount++] = UART_RGET(URRBR);
if(DataCount>=LENGTH)
{
DataCount = 0;
PctoDsp = TRUE;
}
}
/*****************************************************************************************/
// No more
/*****************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -