📄 uart0.c
字号:
/*
*********************************************************************************************************
* 文件: UART0.C
* 描述: 串口 0 服务函数.
* 编写: bobey
*********************************************************************************************************
*/
#include "Includes.H"
#define Uart0Bps 57600 // UART0 波特率.
/*
********************************************************************************************************
* 函数: void Init_Uart0 (void).
* 描述: 初始化 UART0, 请明确调用此函数初始化 Uart0 .
********************************************************************************************************
*/
void Init_Uart0 (void)
{
rULCON0 = ((0<<6)+(0<<3)+(0<<2)+(3<<0)); //UART0每帧收发8bits
rUCON0 = ((0<<10)+(0<<9)+(0<<8)+(0<<7)+(0<<6)+(0<<5)+(0<<4)+(1<<2)+(1<<0));//UART0收发模式是中断请求或者注册
rUFCON0 = ((0<<6)+(0<<4)+(0<<2)+(0<<1)+(1<<0)); //FIFO Enable
rUMCON0 = ((0<<4)+(0<<0)); //Activate nRTS
rUBRDIV0 = ((int)(PCLK/(Uart0Bps*16))-1); //Baud rate(54) 57600
Uart0.Wr = 0; // 初始化自定义缓冲区.
Uart0.Rd = 0;
Uart0.Sem = OSSemCreate (1); // 建立一个信号量,避免冲突.
rINTMOD &= ~(BIT_UART0); // IRQ mode.
rINTMSK &= ~(BIT_UART0); // 开 UART0 发送中断屏蔽位.
rINTSUBMSK &= ~(BIT_SUB_TXD0); // 开UART0子发送中断屏蔽位。
}
/*
********************************************************************************************************
* 函数: void __irq ISR_Uart0 (void).
* 描述: UART0 中断服务程序.
********************************************************************************************************
*/
void __irq ISR_Uart0 (void)
{
OSIntEnter();
if (rSUBSRCPND & BIT_SUB_TXD0) {
while ((rUFSTAT0 & (1<<9)) == 0) { // 塞满 FIFO 为止.
if (Uart0.Rd != Uart0.Wr) {
rUTXH0 = Uart0.Buffer[Uart0.Rd++];
if (Uart0.Rd >= Uart0BufSize) {
Uart0.Rd = 0x00;
}
} else break; // 发送完毕.
}
rSUBSRCPND=(BIT_SUB_TXD0); // Clear Sub int pending.
} else {
while (1) ; // 未定义中断,请检查中断原因.
}
OSIntExit();
ClearPending(BIT_UART0); // Clear master pending.
}
/*
********************************************************************************************************
* End.
********************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -