📄 uart1.c
字号:
#include "uart1.h"
#include "InitDev.h"
#include "com_trans.h"
#define UART1CS_A (1<<24) //P0口
#define UART1CS_B (1<<25) //P0口
#define MAX_TBUF0 100
char tbuf0[MAX_TBUF0]= {0, };
void Delay(int N)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<5000;j++);
}
void UART1_CS (unsigned char CsNum)
{
switch(CsNum)
{
case 0x01:
IO0SET = UART1CS_A;
IO0CLR = UART1CS_B;
break;
case 0x02:
IO0SET= UART1CS_B;
IO0CLR= UART1CS_A;
break;
case 0x03:
IO0CLR = UART1CS_A;
IO0CLR = UART1CS_B;
break;
case 0x04:
IO0SET = UART1CS_B;
IO0SET = UART1CS_A;
break; /**/
}
}
/****************************************************************************
* 名称:UART1_Init()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验
* 入口参数:无
* 出口参数:无
***************************************************************************/
void UART1_Init(int bps)
{
uint16 Fdiv;
U1LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / bps; // 设置波特率
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03;
/* */
PINSEL0=(PINSEL0&0xfff0ffff)|0x00050000;
// IO0DIR|=UART1CS_A;
// IO0DIR|=UART1CS_B;
U1FCR = 0x01; // 使能FIFO,并设置触发点为1字节
U1FCR = 0x07; // 使能FIFO,并设置触发点为1字节
U1IER = 0x01; // 允许RBR中断与THR中断,即接收中断
uart1_irq_set();
/* */
}
/****************************************************************************
* 名称:uart1_irq_set()
* 功能:串口接收中断设置,中断函数为
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void uart1_irq_set()
{
VICIntSelect=VICIntSelect & (~(1<<7));//(0xffffffbf); //VICIntSelect[7]=0 ==irq
VICVectCntl2=0x20 | 7; // UART1中断分配为IRQ 通道0 ,0x20为使能IRQ通道0
VICVectAddr2=(uint32)uart1_irq; //中断函数为uart1_irq
VICIntEnable= VICIntEnable | (1<<7); //VICIntEnable[7]=1
}
void __irq uart1_irq() // 对于UART有两种情况可以引发接收中断:接收字节达到接收FIFO的处发点(RDA)和接收超时(CTI)
{
unsigned char receiv;
switch(U1IIR & 0x0F)
{
case 0x04:
receiv=U1RBR;
rx_cmd_deal(0,receiv);
UART1_SendByte(receiv);
break;
default:
break;
}
VICVectAddr=0x0;
}
/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void UART1_SendByte(uint8 data)
{
U1THR = data; // 发送数据
while( (U1LSR&0x40)==0 ); // 等待数据发送完毕
}
/****************************************************************************
* 名称:UART0_RcvByte()
* 功能:从串口接受字节数据,使用查询方式
* 入口参数:无 要发送的数据
* 出口参数:返回接受到的数据
****************************************************************************/
uint8 UART1_RcvByte(void)
{
uint8 rcv_data; // 发送数据
while( (U1LSR&0x01)==0 ); // 等待接受数据
rcv_data=U1RBR;
return (rcv_data);
}
/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt 要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void UART1_SendStr(uint8 const *str)
{
while(1)
{ if( *str == '\0' ) break;
UART1_SendByte(*str++); // 发送数据
}
}
void SendSpeed(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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -