项目上通过普通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串口通讯 出错无法进入接收的更多相关文章

  1. 一款简单实用的串口通讯框架(SerialIo)

    前言 大龄程序员失业状态,前几天面试了一家与医疗设备为主的公司并录取:因该单位涉及串口通讯方面技术,自己曾做过通讯相关的一些项目,涉及Socket的较多,也使用SuperSocket做过一些项目,入职 ...

  2. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

  3. 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章      USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  4. STM32—串口通讯详解

    串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...

  5. 用SPCOMM 在 Delphi中实现串口通讯 转

      用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...

  6. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  7. Android Studio的串口通讯开发

    基于android-serialport-api实现 前言RS232标准接口UARTRS232与UART转接下载 NDK 和构建工具创建支持 C/C++ 的新项目编译C/C++代码串口通讯原理关于校验 ...

  8. USART—串口通讯

    本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号, 所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码 . 串口通讯的一个数据包从起始信号开始,直到停止信号结束.数据 ...

  9. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  10. Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍

    声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ...

随机推荐

  1. COS 音视频实践|播放多场景下的 COS 视频文件

    导语 上回 (COS音视频实践|多种姿势让你的视频"跑"起来)说道,基于您的实际场景,可以选择不同的方式,在 Web 浏览器端播放您的 COS 视频文件.本文将基于腾讯云超级播放器 ...

  2. okhttp3设置代理(http/https)

    最近项目网络请求需要设置代理,记录一下.http和https都可以. OkHttpClient.Builder builder = new OkHttpClient.Builder(); //代理服务 ...

  3. 在linux上Git配置多个SSH-Key

    Git配置多个SSH-Key SSH Key 背景 当有多个git账号时,比如: a. 一个gitee,用于公司内部的工作开发: b. 一个github,用于自己进行一些开发活动: c.一个gitla ...

  4. 隐藏zsh前面用户名或者主机名

    1. zshrc 修改 vim ~/.zshrc文件,在文件底部增加: prompt_context() {} 只保留用户名,隐藏主机名 prompt_context() { if [[ " ...

  5. Kubernetes kubeadm部署k8s集群

    ​kubeadm​​​是​​Kubernetes​​​项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,​​kubeadm​​​是​​Kubernetes​​​集 ...

  6. w3cschool-Netty 实战精髓篇2

    https://www.w3cschool.cn/essential_netty_in_action/essential_netty_in_action-adkv28bm.html 研究Netty中的 ...

  7. smart_web 管理端基本说明

    smart_web 操作手册 1. smart_web 是什么? smart_web 是 smart_rtmpd 的付费版本,拥有比免费版本更多的功能支持,基于 web 的管理方式,让您随时随地在大部 ...

  8. Hutool 实现非对称加密(RSA)

    目录 思路 生成RAS密钥 消息公钥加密.私钥解密 代码Demo 生成 A 的密钥 生成 B 的密钥 A 发送消息给 B B 解密 A 消息 对称加密中,我们只需要一个密钥,通信双方同时持有.而非对称 ...

  9. LeetCode刷题:AddressSanitizer: heap-buffer-overflow问题请教||全局变量和引用传递的区别

    在刷 https://leetcode.cn/problems/sudoku-solver/description/ 遇到AddressSanitizer: heap-buffer-overflow的 ...

  10. Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能

    大家好,我是编程乐趣. 我们都知道,要实现对结构化的数据(文本)搜索是比较容易的,但是对于非结构化的数据,比如图片,视频就没那么简单了. 但是现在有了AI模型,实现图片分类.搜索等功能,就变得容易很多 ...