📄 irquart0.c
字号:
#include "config.h"
#include "IRQUART0.h"
uint8 rcv_buf[50];
volatile uint8 i=0;
uint8 j=0;
volatile uint8 rcv_new;
void IRQ_UART0(void) __irq
{
// uint8 m;
if((U0IIR & 0x0F) == 0x04)
{
//while(1);
rcv_new = 1;
//for(m=0;m<8;m++)
{
rcv_buf[i] = U0RBR;
i++;
}
}
VICVectAddr = 0x00;
}
void UART0_SendByte(uint8 dat)
{
U0THR = dat;
while((U0LSR & 0x20) == 0);
}
void UART0_SendBuf(void)
{
if(rcv_new == 1)
{
rcv_new = 0;
while((i>j) && (j<50))
{
UART0_SendByte(rcv_buf[j]);
j++;
}
while((U0LSR & 0x20) == 0);
if((i==j) || (j>=50))
{
i=j=0;
}
}
}
int8 UART0_Init(uint32 baud,UARTMODE set)
{
uint32 bak;
U0LCR = 0x80;
bak = (Fpclk>>4)/baud;
U0DLM = bak>>8;
U0DLL = bak & 0xff;
bak = set.datab - 5;
if(set.stopb == 2) bak |= 0x04;
if(set.parity != 0)
{
set.parity = set.parity-1;
bak |= 0x08;
}
bak |= set.parity<<4;
U0LCR = bak;
i=0;j=0;
return(1);
}
/*----------------------------------------------------------
void main()
{
UARTMODE set;
set.datab = 8;
set.stopb = 1;
set.parity = 0;
rcv_new = 0;
PINSEL0 |= 0x05; //设置IO连接到UART0
UART0_Init(115200,set);
//U0FCR = 0x81; //接收器触发点为8个字符
U0FCR = 0x01; //接收器触发点为1个字符
U0IER = 0x01; //接收中断开,发送中断关
//串口0中断设置
VICVectCntl0 = 0x20|0x06;
VICVectAddr0 = (uint32)IRQ_UART0;
VICIntEnable = 1<<0x06;
VICIntSelect = 0x00; //设置所有通道为IRQ中断
}
-----------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -