⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart1.c

📁 LPC2129实现从SPI通讯和两个串口定时器中断
💻 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 + -