最近在做有关N76E003的项目,使用到双串口。串口的配置没有特殊要求,最基本的配置

void Uart0_Init(void)
{
//—————————串口0引脚初始化————————
set_P06;
set_P07;
set_ES; //enable uart0 interrupt
InitialUART0_Timer1(); //UART0 Baudrate initial,T1M=0,SMOD=0
} void Uart1_Init(void)
{
//—————————串口1引脚初始化————————
set_P02;
set_P16;
set_ES_1; //enable uart1 interrupt
InitialUART1_Timer3();
}

并配置了中断函数

void SerialPort0_ISR(void) interrupt
{
if(RI)
{ /* if reception occur */
clr_RI; /* clear reception flag for next reception */
uart_receive_input(SBUF);
}
} void SerialPort1_ISR(void) interrupt
{
if(RI_1)
{
clr_RI_1;
uart1_receive_input(SBUF);
}
}

运行程序发现无法进入串口1中断,在使用串口1又没办法debug的情况下(UART1的TX_1/RX_1脚也分别是ICP的SDA/LCK脚),只能在网上找资料调试。

发现了两篇博客非常有用,附上两篇博客的原文链接。

博客1:https://blog.csdn.net/u014798590/article/details/82560796

博客2:https://blog.csdn.net/a1031238455/article/details/85382595

第一篇提出是中断优先级的原因,并提供了源代码。在测试之后发现并不是这样。第二篇是在第一篇的基础上找出了问题的根本原因。

N76E003的中断机制是中断产生之后对应的中断标志位都会被置1。

所以问题出在了发送中断标志位未清零,导致串口0一直处于中断状态,而串口0的中断优先级是高于串口1的,所以根本无法进入串口1中断。

因此,在中断函数中加上清发送标志位程序

void SerialPort0_ISR(void) interrupt
{
if(RI)
{ /* if reception occur */
clr_RI; /* clear reception flag for next reception */
uart_receive_input(SBUF);
}
if(TI)
{
clr_TI; /* if emission occur */
}
} void SerialPort1_ISR(void) interrupt
{
if(RI_1)
{
clr_RI_1;
uart1_receive_input(SBUF);
}
if(TI_1)
{
clr_TI_1; /* if emission occur */
}
}

问题解决!

N76E003双串口无法进UART1中断问题解决办法的更多相关文章

  1. (转载)FT232RL通信中断问题解决办法总结

    原文地址:http://cuiweidabing.blog.163.com/blog/static/66631928201101514021658/ FT232RL是FTDI(www.ftdichip ...

  2. STC12C5A60S2 双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

  3. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  4. MM32F0020 UART1中断接收

    目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1中断接收函数 4.编写MM32F0020 UART1发送字节和ASCI ...

  5. MM32F0020 UART1中断接收和UART1中断发送

    目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1使能中断发送函数 4.编写MM32F0020 UART1中断接收和中断 ...

  6. MM32F0140 UART1中断接收和UART1中断发送

    目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1和NVIC中断 3.编写MM32F0140 UART1使能中断发送函数 4.编写MM32F0140 UART1中断接收和中断 ...

  7. PHP mkdir()无写权限的问题解决方法

    这篇文章主要介绍了PHP mkdir()无写权限的问题解决方法,对umask做了详细解释以及mkdir()后没写权限的解决方法,需要的朋友可以参考下   使用mkdir创建文件夹时,发现这个函数有两个 ...

  8. Qt组件中的双缓冲无闪烁绘图

      双缓冲绘图在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOn ...

  9. Word2016“此功能看似已中断 并需要修复”问题解决办法

    Word2016"此功能看似已中断 并需要修复"问题解决办法 修复步骤: 1. 按Windows 键+R键,输入"regedit"打开注册表. 2.找到以下键值 ...

随机推荐

  1. 计算机网络(二),TCP/IP四层模型常见协议

    目录 1.应用层协议 2.传输层协议 3.网络层协议 4.链路层协议 二.TCP/IP四层模型常见协议 1.应用层协议 (1)POP3 (2)FTP (3)HTTP (4)Telnet (5)SMTP ...

  2. luogu P1362 兔子数 x

    P1362 兔子数 题目描述 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4.如果一个正整数满足 S(x*x) = S(x) * ...

  3. Spring Boot教程(二十八)通过JdbcTemplate编写数据访问

    数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <depende ...

  4. java从ldap中导出数据到ldif文件中

    原创:http://www.cnblogs.com/dqcer/p/7814034.html 导入ldap.jar包,笔者已对下面两个文件测试并通过.若有疑问欢迎留言 LDAPExport.java ...

  5. R_Studio中对xls文件学生总成绩统计求和

    我们发现这张xls表格是没有学生总分的,在xls文件中计算学生总分嫌麻烦时,可以考虑在R Studio中自定义R Script脚本来解决实际问题(计算每个学生的总成绩) .xls数据表中的数据(关键信 ...

  6. 完美解决前端跨域之 easyXDM 的使用和解析

    前端跨域问题在大型网站中是比较常见的问题.本文详细介绍了利用 easyXDM 解决前端跨域的原理细节和使用细节,具体使用时可以在文中代码实例的基础上扩展完成. 0.背景 因个别网络运营商存在 HTTP ...

  7. java中的基本数据类型简谈

    在java里面有八大基本的数据类型,分别是 byte,short,char,int,long,float,double,boolean 然后需要说的就是几个特殊的基本数据类型的取值范围 先来说说byt ...

  8. 剑指offer:关于复制构造函数

    1:首先参看代码: #include "stdafx.h" #include "iostream" using namespace std; class A { ...

  9. Python--安装第三方库的方法

    一:安装方法(以numpy为例,安装其他包把numpy改为包名即可) 1.有设置python包中pip.exe环境变量的情况下 同时按住win+R输入cmd打开cmd,直接输入pip install ...

  10. C# 隐藏显示桌面图标

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...