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

📄 com_irq.h

📁 3个串口接收
💻 H
字号:
#include 	"config.h"		// 包含工程模板配制头文件
#include	"com_cfg.h"
#include	"irq.h"


char 		string[64];
char		*strpt = string;


//GPS sentence module
char buf0[256];
char buf1[256];
//Hdg & Hdt sentence module
char buf2[128];
char buf3[128];
//水深、温度数据
char buf4[128];
char buf5[128];


COM_CONTROL uctl; 	//UART control(声明一个分别为utcl的COM_CONTROL类型的结构体变量)


void reset_com(int i) //始初化com
{
	PORT_DATA *p;		//声明一个PORT_DATA 类型的指针p
	p = &uctl.com[i];	//指针p指向 COM_CONTROL类型的变量utcl中的PORT_DATA 类型名为com[i]的数组
	p->pLine = 0;		//p指向结构体变量com当中的成员,并将全部成员置0
	p->pRead = 0;
	p->pSend = 0;
	//
	p->rx_ready = 0;
	p->send_ready = 0;
	//
	switch(i)
	{
	case 0: //com0
			p->rx = buf0;
			p->send = buf1;
			break;
	case 1: //com1
			p->rx = buf2;
			p->send = buf3;
			break;
	default: //com2
			p->rx = buf4;
			p->send = buf5;
			break;
	}
}
void init_uctl(void)
{
	//init com[0];
	reset_com(0);
	//init com[1];
	reset_com(1);
	//init com[2];
	reset_com(2);
	//
	uctl.send_req = 0;
}


uint32    U0Rcv_New = 0;						// 为1时表明接收到新数据
uint32    U0Snd_N   = 0;						// 记录接收数据完毕后,需发送数据的个数
uint8	  U0Rcv_Buf[8];					    	// 字符接收数组

uint32    U1Rcv_New = 0;						// 为1时表明接收到新数据
uint32    U1Snd_N   = 0;						// 记录接收数据完毕后,需发送数据的个数
uint8	  U1Rcv_Buf[8];						    // 字符接收数组


/*********************************************************************************************************
** 函数名称 :IRQ_UART1Recv
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/
/*
void __irq IRQ_UART1Recv(void)
{
	init_uctl(0);
	uint32 i   = 0;
//	uint32 j   = 0;
	uint32 IIR = 0;
//	buf0 = 0;


	//			UART1接收中断处理 			
	while (((IIR = U1IIR) & 0x01) == 0)		// 若尚有中断待处理
	{
		
		switch (IIR & 0x0e)
		{
			// RDA中断处理入口 
			case 0x04:					
				U1Rcv_New = 1;			
				for (i = 0; i < 16; i++)	
				{
					buf0[i] = U1RBR;		// 读空FIFO,清除RDA中断
				}
				p += 16;					// 收到16个数据
			
				break;
			
			// CTI中断处理入口 
			case 0x0c:
				U1Rcv_New = 1;
				for (i = 0; i < 16; i++)	
				{
					if ((U1LSR & 0x01) == 0x01)
					{
						buf0[i] = U1RBR;	// 读空FIFO,清除CTI中断
					}
					else
					{
						break;
					}
				}
				p 	+= i;				// 在CTI中断里保存了i个有效数据
		
			default:
				break;
		}
	}
		
	VICVectAddr = 0x00;						
}
*/


void __irq IRQ_UART1Recv(void)
{
	init_uctl();
	uint32 j   = 0;
	uint32 IIR = 0;

	//			UART1接收中断处理 			
	while (((IIR = U1IIR) & 0x01) == 0)		// 若尚有中断待处理
	{
		
		switch (IIR & 0x0e)
		{
			// RDA中断处理入口 
			case 0x04:					
				U1Rcv_New = 1;				
				for (j = 0; j < 16; j++)	
				{
					if(*rx =='\0')
					{
						break;
					}
					else
					{
						*rx = U1RBR;
						rx ++;
					}
				}
				
				break;
			
			// CTI中断处理入口 
			case 0x0c:
				U1Rcv_New = 1;
				for (j = 0; j < 16; j++)	
				{
					if ((U1LSR & 0x01) == 0x01)
					{
						if(*rx == '\0')
						{
							break;
						}
						else
						{
							*rx = U1RBR;
							rx ++;
						}
						
					}
					else
					{
						break;
					}
				}
				
		
			default:
				break;
		}
	}
		
	VICVectAddr = 0x00;						
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -