📄 com_irq.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 + -