📄 u0test.c
字号:
#include "config.h"
/*整个程序所掉用基本头文件*/
#define FPCLK 11059200
/*定义总线速率*/
#define uart_BPS 9600
/*定义串口波特率*/
void delay(uint32 dly)
{ uint32 i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
/*定义延时函数*/
typedef struct Uartmode /*定义串口模式*/
{
uint8 datab; //字长度,5/6/7/8
uint8 stopb; //停止位,1/2
uint8 parity; //奇偶校验,0为无校验,1为奇数校验,2为偶数校验
}Uartmode;
/*中断服务程序*/
void __irq IRQ_UART0(void)
{
uint32 i; /*定义参数*/
if( 0x04==(U0IIR&0x0F) ) rcv_new = 1; // 设置接收到新的数据标志
for(i=0; i<8; i++)
{
rcv_buf[i] = U0RBR; // 读取FIFO的数据,并且清除中断
}
VICVectAddr = 0x00; // 中断处理结束
}
/*初始化串口0,设置其波特率及工作模式*/
uint8 UART0_Ini(uint32 baud, Uartmode set)
{ uint32 bak;
/* 参数过滤 */
if( (0==baud)||(baud>115200) ) //波特率在0-115200之间
return(0);
if( (set.datab<5)||(set.datab>8) ) //字长度在5-8字节
return(0);
if( (0==set.stopb)||(set.stopb>2) ) //停止位超过两位
return(0);
if( set.parity>4 ) //设置奇偶校验位
return(0);
/* 设置串口波特率 */
uint16 Fdiv;
U0LCR = 0X83; /* UO线控制寄存器 定义数据字符格式 01000011 */
Fdiv = (Fpclk/16)/uart_BPS;
U0DLL = Fdiv/256; /* baud=F(pclk)/16/UODLL */
U0DLM = Fdiv%256; /* 与U0DLL组成波特率,DLL是低8位,DLM是高8位*/
U0LCR = 0x03; /* */
/* 设置串口模式 */
bak = set.datab-5; // 设置字长度
if(2==set.stopb) bak |= 0x04; // 判断是否为2位停止位
if(0!=set.parity) set.parity = set.parity-1;
bak |= set.parity; // 设置奇偶校验
U0LCR = bak;
return(1);
}
int main(void)
{
Uartmode uart0_set;
/*串口模式设定*/
PINSEL0 = 0x00000005; // 设置I/O连接到UART0
PINSEL1 = 0x00000000;
rcv_new = 0; /*接收缓冲器清空*/
uart0_set.datab = 8; // 8位数据位
uart0_set.stopb = 1; // 1位停止位
uart0_set.parity = 0; // 无奇偶校验
UART0_Ini(9600, uart0_set); // 初始化串口模式
U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
/* 设置中断允许 */
VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
VICVectCntl0 = 0x26; // UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0; // 设置UART0向量地址
VICIntEnable = 0x00000040; // 使能UART0中断
while(1) // 等待中断
{ if(1==rcv_new)
{
ISendBuf(); // 将接收到的数据发送回主机
rcv_new = 0;
/*接收缓冲器清空*/
}
delay(30)
}
return(0)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -