DSP 28335 TTL SCI串口通讯 出错无法进入接收
项目上通过普通SCI串口在两个DSP28335之间进行通讯,一主一从,主机向从机发送指令,触发从机SCI接收中断,在中断中执行数据包判断和存储,数据处理和回复在主循环进行,未使用FIFO,轮询方式进行发送。
1:主从同时开机,主从机通讯异常,主机发送正常,从机无法进行回复,串口单独调试从机依然无法回复,排查出从机在开机后有未知数据触发了接收中断,后续无法被触发。
2:主机先开,从机后开,通讯正常。
3. 从机先开,主机后开,通讯异常。
在13情况下,SCI中断会在成功进入中断一次后再也进不去中断,但程序并没有跑飞,主循环和AD控制中断仍在正常运行,也在正常运行。查看SCI寄存器发现,在主机开机但还没开始主动发送命令时从机接收端会莫名多出来若干字节数据。错误字节数据出现之后,就再也无法进入SCI接收中断,同时可以观察到SCI寄存器SCIRXST的第3位(OE)溢出错误标志 ,第4位(FE)帧错误标志和第7位(RX ERROR,数值为第2、3、4位寄存器或运算结果)SCI接收器错误标志为1。正常情况下三个寄存器都应该为0。
据此判断是SCI出现接收错误,导致进不去SCI接收中断。查阅相关资料,发现要想解决发生错误导致错误标志位置位的问题,需要执行一次完整的SW RESET((SCICTL1)的第5位)。
解决方案:
1.使能SCI接收错误中断
2.当发生SCI接收错误时,进入SCI接收中断,判断标志位 RX ERROR 是否置1(如果是SCI接收错误导致进入中断, RX ERROR自然为1)
3.当 RX ERROR 置1,执行一次完整的SW RESET,退出中断
错因分析:
通过以上3步,程序可以继续正常进入SCI接收中断,SCI通讯恢复正常。由于通讯程序并没有改动,考虑是开机时环境电磁干扰导致的错误。
附修改后的代码
void Init_Scia(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
EDIS;
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity, 8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX,RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCICTL1.bit.RXERRINTENA=1; //使能错误接收中断
SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =SCI_PRD;
SciaRegs.SCICCR.bit.LOOPBKENA =0; // disable loop back
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
interrupt void SCIRXINTB_ISR(void) // SCI-B中断
{
if(ScibRegs.SCIRXST.bit.RXERROR == 1) //SW RESET
{
ScibRegs.SCICTL1.bit.SWRESET = 0;
DELAY_US(1000);
ScibRegs.SCICTL1.bit.SWRESET = 1;
}
// 正常SCI中断函数
// ...
// ...
// ...
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
EINT;
}
DSP 28335 TTL SCI串口通讯 出错无法进入接收的更多相关文章
- 一款简单实用的串口通讯框架(SerialIo)
前言 大龄程序员失业状态,前几天面试了一家与医疗设备为主的公司并录取:因该单位涉及串口通讯方面技术,自己曾做过通讯相关的一些项目,涉及Socket的较多,也使用SuperSocket做过一些项目,入职 ...
- 第20章 USART—串口通讯
本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...
- 第20章 USART—串口通讯—零死角玩转STM32-F429系列
第20章 USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- STM32—串口通讯详解
串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...
- 用SPCOMM 在 Delphi中实现串口通讯 转
用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...
- .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用
目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...
- Android Studio的串口通讯开发
基于android-serialport-api实现 前言RS232标准接口UARTRS232与UART转接下载 NDK 和构建工具创建支持 C/C++ 的新项目编译C/C++代码串口通讯原理关于校验 ...
- USART—串口通讯
本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号, 所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码 . 串口通讯的一个数据包从起始信号开始,直到停止信号结束.数据 ...
- Android蓝牙串口通讯【转】
本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...
- Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ...
随机推荐
- eShopOnContainer 中 unauthorized_client error 登录错误处理
在准备好 eShopOnContainer 环境,运行起来之后,不幸的是,我遇到了不能登录的错误. 从错误信息中,可以看到 unauthorized_client 的内容.这是为什么呢? 从 eSho ...
- 【Python基础练习】实验3:列表、字典、集合
实验3:列表.字典.集合 姓名:萌狼蓝天 时间:2023年11月6日 Python:3.12 博客:https://wwww.mllt.cc 实验目的 (1)了解列表.元组.字典和集合的概念 (2)学 ...
- 如何使用Jet家软件进行学习(intellij、idea、IDEA、Pycharm……)
如何使用Jet家软件进行学习 本文档提供方法只用于学习研究,不得用于其他用途 以下,萌狼蓝天将会提供两种方式 目录 如何使用Jet家软件进行学习 第一种方式:使用EAP版本 第二种方式:使用插件 (1 ...
- 【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802940.html?templateId=1718516 [问题分类]功能使用 ...
- alibabacloud-jindodata
https://github.com/aliyun/alibabacloud-jindodata https://github.com/aliyun/alibabacloud-jindodata/bl ...
- 在Ubuntu系统上手动安装GCC环境
Ubuntu系统是自带GCC安装指令的apt install gcc,当前apt源中gcc版本为5.4.0,版本太低,推荐手动安装gcc8.3.0 手动安装gcc8.3.0之前需要先确保安装gcc环境 ...
- Mac安装CMake
官网下载CMake: 传送门:https://cmake.org/download/ image.png 安装完打开: image.png 选择Tools-->How to instal ...
- 用 Cursor 写出第一个程序
大家好,我是汤师爷 最近几个月,Cursor迅速走红,成为一款强大的编程助手.Cursor不仅使用简单,而且通过集成各种大模型技术,编程能力一流. Cursor是什么? Cursor是一个类似VSCo ...
- 重拾 iptables
iptables 是一个常看常忘的命令,本文试图从应用的角度理解它 iptables 是运行在用户空间的应用软件,通过控制 Linux 内核 netfilter 模块,来管理网络数据包的处理和转发 一 ...
- TIBCO Jaspersoft Studio-6.12.2连接mysql时显示时区问题
TIBCO Jaspersoft Studio-6.12.2创建mysql型的Data Adapter, 在进行连接test时弹出显示时区问题,如下图所示: 解决办法: 在Data Adapter W ...