N76E003双串口无法进UART1中断问题解决办法
最近在做有关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中断问题解决办法的更多相关文章
- (转载)FT232RL通信中断问题解决办法总结
原文地址:http://cuiweidabing.blog.163.com/blog/static/66631928201101514021658/ FT232RL是FTDI(www.ftdichip ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- MM32F0020 UART1中断接收
目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1中断接收函数 4.编写MM32F0020 UART1发送字节和ASCI ...
- MM32F0020 UART1中断接收和UART1中断发送
目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1和NVIC中断 3.编写MM32F0020 UART1使能中断发送函数 4.编写MM32F0020 UART1中断接收和中断 ...
- MM32F0140 UART1中断接收和UART1中断发送
目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1和NVIC中断 3.编写MM32F0140 UART1使能中断发送函数 4.编写MM32F0140 UART1中断接收和中断 ...
- PHP mkdir()无写权限的问题解决方法
这篇文章主要介绍了PHP mkdir()无写权限的问题解决方法,对umask做了详细解释以及mkdir()后没写权限的解决方法,需要的朋友可以参考下 使用mkdir创建文件夹时,发现这个函数有两个 ...
- Qt组件中的双缓冲无闪烁绘图
双缓冲绘图在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOn ...
- Word2016“此功能看似已中断 并需要修复”问题解决办法
Word2016"此功能看似已中断 并需要修复"问题解决办法 修复步骤: 1. 按Windows 键+R键,输入"regedit"打开注册表. 2.找到以下键值 ...
随机推荐
- qt5-QWidget坐标系统和大小和展示区域
#include "win.h" #include <QPushButton> #include <QLabel> #include <QDebug& ...
- 43 java中的异常处理机制的简单原理和应用
- 【Winform-获取ListView选中行】Winform如何获取ListView选中行数据 ?
=========这是Winform================== 1.设计窗体 一个ListView listView1 一个textBox txbSelected 2.listV ...
- 【转】推荐几本学习MySQL的好书-MySQL 深入的书籍
MySQL的使用 1 MySQL技术内幕InnoDB存储引擎 2 MySQL的官方手册 3 MySQL排错指南 4 高性能MySQL 5 数据库索引设计与优化 6 Effective MySQL系列 ...
- Mysql: 开启慢查询日志[ERROR] unknown variable 'log-slow-queries'处理办法
参考: http://www.dataguru.cn/thread-305503-1-1.html # slow query log qjp 20160921 # mysql5.6版本以上,取消了参数 ...
- 上传文件夹 vue
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- 分布式-信息方式-ActiveMQ结合Spring
ActiveMQ结合 Spring开发■ Spring提供了对JMS的支持,需要添加 Spring支持jms的包,如下: <dependency> <groupId>org.a ...
- MySQL + centos +主从复制
MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的 ...
- Docker入门-Dockerfile的使用
使用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,这个脚本就是Dockerfile. Dockerfile ...
- ubuntu环境配置终极解答
1. ubuntu中常用的5个配置文件 1)/etc/profile 2)/etc/environment 环境变量在这个文件中定义,可以用vim /etc/environment查看该文件内容 3) ...