uart0.c
来自「LPC2129实现从SPI通讯和两个串口定时器中断」· C语言 代码 · 共 235 行
C
235 行
#include "uart0.h"
#include "InitDev.h"
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//#include <ctype.h>
#define MAX_TBUF1 100
char tbuf1[MAX_TBUF1]= {0, };
/****************************************************************************
* 名称:UART0_Init()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
***************************************************************************/
void UART0_Init(int bps)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / bps; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
PINSEL0=(PINSEL0&0xfffffff0)|0x00000005;
U0FCR = 0x01; // 使能FIFO,并设置触发点为1字节
U0FCR = 0x07; // 使能FIFO,并设置触发点为1字节
U0IER = 0x01; // 允许RBR中断,即接收中断
uart0_irq_set(); //中断设置 IRQ0
uart0_selbit_init();
clr_uart0_2();
set_uart0_1();
/* IO0DIR |= UART1CS_A ;
IO1DIR |= UART1CS_B;
U1FCR = 0x01; // 使能FIFO,并设置触发点为1字节
U1FCR = 0x07; // 使能FIFO,并设置触发点为1字节
U1IER = 0x00; // 允许RBR中断与THR中断,即接收中断
U1MCR = 0X00;
PINSEL0=PINSEL0&0xFFF0FFFF|0x00050000; */
}
/****************************************************************************
* 名称:uart0_irq_set()
* 功能:串口接收中断设置,中断函数为
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void uart0_irq_set()
{
VICIntSelect=VICIntSelect & (~(1<<6));//(0xffffffbf); //VICIntSelect[6]=0 ==irq
VICVectCntl0=0x20 | 6; // UART0中断分配为IRQ 通道0 ,0x20为使能IRQ通道0
VICVectAddr0=(uint32)uart0_irq; //中断函数为uart0_irq
VICIntEnable= VICIntEnable | (1<<6); //VICIntEnable[6]=1
}
void __irq uart0_irq() // 对于UART有两种情况可以引发接收中断:接收字节达到接收FIFO的处发点(RDA)和接收超时(CTI)
{
unsigned char receiv;
switch(U0IIR & 0x0F)
{
case 0x04:
receiv=U0RBR;
UART0_SendByte(receiv);
break;
default:
break;
}
VICVectAddr=0x0;
}
void uart0_selbit_init()
{
IO1DIR |=CH1;
IO1DIR |=CH2;
}
void set_uart0_1()
{
IO1SET |=CH1;
}
void set_uart0_2()
{
IO1SET |=CH2;
}
void clr_uart0_1()
{
IO1CLR |=CH1;
}
void clr_uart0_2()
{
IO1CLR |=CH2;
}
/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data; // 发送数据
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
}
/****************************************************************************
* 名称:UART0_RcvByte()
* 功能:从串口接受字节数据,使用查询方式
* 入口参数:无 要发送的数据
* 出口参数:返回接受到的数据
****************************************************************************/
uint8 UART0_RcvByte(void)
{
uint8 rcv_data; // 发送数据
while( (U0LSR&0x01)==0 ); // 等待接受数据
rcv_data=U0RBR;
return (rcv_data);
}
/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt 要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void UART0_SendStr(uint8 const *str)
{
while(1)
{ if( *str == '\0' ) break;
UART0_SendByte(*str++); // 发送数据
}
}
/****************************************************************************
* 名称:UART0_Printf()
* 功能:向串口发送一字符串 用法同Printf()函数
* 入口参数:format 要发送的字符串的指针 ... 为参数
* 出口参数:发送的字符串的字符个数
****************************************************************************/
int UART0_Printf(const char *format, ...)
{
va_list v_list;
char *ptr;
int i= 0;
va_start(v_list, format); // Initialize variable arguments.
vsprintf(tbuf1, format, v_list );
va_end(v_list);
ptr= tbuf1;
while( (*ptr) && i<MAX_TBUF1) {
UART0_SendByte(*ptr);
ptr++; i++;
}//while
return i;
}//end
/*
void SendSpeed1(int TempSpeed)
{
uint8 i;
uint8 data[12];
//TempSpeed /=4;
if(TempSpeed > 0)
{
i = 0;
while(TempSpeed != 0)
{
data[i] = 0x30 + TempSpeed%10;
i++;
TempSpeed /= 10;
}
}
else if(TempSpeed < 0)
{
TempSpeed = 0 - TempSpeed;
i = 0;
while(TempSpeed != 0)
{
data[i] = 0x30 + TempSpeed%10;
i++;
TempSpeed /= 10;
}
data[i] = '-';
i++;
}
else
{
i = 0;
data[i] = '0';
i++;
}
U1THR = 'V';
do
{
i--;
U1THR = data[i]; // 发送数据
}
while(i>0);
U1THR = 0x0D; // 发送数据
} */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?