DSPF28335 SCI FIFO串口通讯

2023-05-16

在工作过程中,通过串口进行上位机与控制器之间进行数据的传输,标准的串口通讯容易造成数据的丢失和内存堆满的现象,便使用SCI中的FIFO对数据进行中断处理。

一、串口通信基本知识

        F28335 处理器共有 3 个 SCI 接口,相对 TI 的 C240X 系列 DSP 的 SCI 接口,功能上有很大的改进,在原有功能基础上增加了通信速率自动检测和 FIFO 缓冲等新功能,为了减小串口通信时 CPU 的开销,F28335 的串口支持 16 级接收和发送 FIFO。也可以不使用 FIFO 缓冲,SCI 的接收器和发送器可以使用双级缓冲传送数据,并且 SCI 接收器和发送器有各自独立的中断和使能位,可以独立地操作实现半双工通信,或者同时操作实现全双工通信。为了保证数据的完整性,SCI模块对接收到的数据进行间断、极性、超限和帧错误检测。为了减少软件的负担,SCI 采用硬件对通信数据进行极性和数据格式检查。

二、SCI 的16级FIFO缓冲

下面我们看下 FIFO 的特征及使用 FIFO 时 SCI 的编程。

①复位:在上电复位时,SCI 工作在标准 SCI 模式,禁止 FIFO 功能。FIFO的寄存器 SCIFFTX、SCIFFRX 和 SCIFFCT 都被禁止。

②标准 SCI:标准 F28335 SCI 模式,TXINT/RXINT 中断作为 SCI 的中断源。

③FIFO 使能:通过 SCIFFTX 寄存器的 SCIFFEN 位置 1,使能 FIFO 模式。在任何操作状态下 SCIRST 都可以复位 FIFO 模式。

④寄存器有效:所有 SCI 寄存器和 SCI FIFO 寄存器(SCIFFTX、SCIFFRX 和SCIFFCT)有效。

⑤中断:FIFO 模式有两个中断,一个是发送 FIFO 中断 TXINT,另一个是接收 FIFO 中断 RXINT。FIFO 接收、接收错误和接收 FIFO 溢出共用 RXINT 中断。标准 SCI 的 TXINT 将被禁止,该中断将作为 SCI 发送 FIFO 中断使用。

⑥缓冲:发送和接收缓冲器增补了 2 个 16 级的 FIFO,发送 FIFO 寄存器是 8位宽,接收 FIFO 寄存器是 10 位宽。标准 SCI 的一个字的发送缓冲器作为发送FIFO 和移位寄存器间的发送缓冲器。只有移位寄存器的最后一位被移出后,一个字的发送缓冲才发送 FIFO 装载。使能 FIFO 后,经过一个可选择的延迟(SCIFFCT),TXSHF 被直接装载而不再使用 TXBUF。

⑦延迟发送:FIFO 中的数据传送到发送移位寄存器的速率是可编程的,可以通过 SCIFFCT 寄存器的位 FFTXDLY(7~0)设置发送数据间的延迟。FFTXTDLY(7~0)确定延迟的 SCI 波特率时钟周期数,8 位寄存器可以定义从 0 个波特率时钟周期的最小延迟到 256 个波特率时钟周期的最大延迟。当使用 0 延迟时,SCI 模块的FIFO 数据移出时,数据间没有延时,一位紧接一位的从 FIFO 移出,实现数据的连续发送。当选择 256 个波特率时钟的延迟时,SCI 模块工作在最大延迟模式,FIFO 移出的每个数据字之间有 256 个波特率时钟的延迟。在慢速 SCI/UART 的通信时,可编程延迟可以减少 CPU 对 SCI 通信的开销。

⑧FIFO 状态位:发送和接收 FIFO 都有状态位 TXFFST 或 RXFFST(位 12~0),这些状态位显示当前FIFO内数据的个数。当状态位为0时,发送FIFO复位TXFIFO和接收复位位 RXFIFO 会被设置为 1,会将 FIFO 指针复位为 0,FIFO 重新开始运

行。

⑨可编程的中断级:发送和接收 FIFO 都能产生 CPU 中断,只要发送 FIFO 状态位 TXFFST(位 12-8)与中断触发优先级 TXFFIL(位 4-0)相匹配,就产生一个中断触发,从而为 SCI 的发送和接收提供一个可编程的中断触发逻辑。接收FIFO 的默认触发优先级为 0x11111,发送 FIFO 的默认触发优先级为 0x00000。

三、软件配置

1)使能 SCI 外设时钟及初始化对应 GPIO

要使用 SCI 外设则需开启相应时钟,开启 SCI 外设时钟代码如下:

   EALLOW;

   SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-A,不同的串口再此修改

   EDIS;

      开启 SCI 时钟后,根据自己需求,使用哪个 SCI 口就初始化对应的 GPIO,本实验使用的是 SCIA,即实验板中端口为GPIO35 和 GPIO36:

InitSciaGpio();

      定义在 DSP2833x_Device.h 头文件内已定义了,使用哪个就将宏值改为 1 即可。

(2)SCI 工作方式及参数设置,包括数据格式、波特率、使能发送、接收功能等。

   unsigned char scihbaud=0;

   unsigned char scilbaud=0;

   Uint16 scibaud=0;

   scibaud=37500000/(8*baud)-1;// SCI 外设工作频率 37.5MHZ 值,根据自己的板子值进行配置

   scihbaud=scibaud>>8;

   scilbaud=scibaud&0xff;

//以下代码是配置SCI的接收数据的FIFO和发送数据的FIFO

      //-------------------接收数据的FIFO配置

      SciaRegs.SCIFFTX.bit.SCIRST = 0;//复位SCIC模块

      SciaRegs.SCIFFTX.bit.SCIRST = 1;//复位SCIC模块

      SciaRegs.SCIFFTX.bit.SCIFFENA = 1;//使能FIFO功能

      SciaRegs.SCIFFRX.bit.RXFFIENA = 1;//使能接收中断

      SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;//复位接收器的FIFO

      SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;

      SciaRegs.SCIFFRX.bit.RXFFIL = 0x01;//接受1个字节之后产生一个中断

      //---------------------发送数据的FIFO配置

      SciaRegs.SCIFFTX.bit.SCIRST = 0;

      SciaRegs.SCIFFTX.bit.SCIRST = 1;

      SciaRegs.SCIFFTX.bit.SCIFFENA = 1;

      SciaRegs.SCIFFTX.bit.TXFFIENA = 1;

      SciaRegs.SCIFFTX.bit.TXFIFOXRESET=0;

      SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;

      SciaRegs.SCIFFTX.bit.TXFFIL = 0x01;//发送完一个字节产生中断

    // in the InitSysCtrl() function

      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 =1;

      SciaRegs.SCICTL2.bit.RXBKINTENA =1;

      SciaRegs.SCIHBAUD    =scihbaud;  // 9600 baud @LSPCLK = 37.5MHz.

      SciaRegs.SCILBAUD    =scilbaud;

//  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back

      SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset

(3)通过接收中断函数对数据进行接收与发送

interrupt void UARTa_RxInterIsr(void)

{

      Uint16 data=SciaRegs.SCIRXBUF.all;

      SciaRegs.SCITXBUF=data;

      SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;  // Clear Overflow flag

      SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;  // Clear Interrupt flag

      PieCtrlRegs.PIEACK.bit.ACK9 = 1;

}

(4)初始化配置

void main()

{

      InitSysCtrl();

      DINT;//禁止全局中断

      IER = 0x0000;

      IFR = 0x0000;

      InitPieCtrl();

      InitPieVectTable();

      EALLOW;

      PieVectTable.SCIRXINTA = &UARTa_RxInterIsr;

      EDIS;

      IER |= M_INT9;

      PieCtrlRegs.PIEIER9.bit.INTx1 = 1;

      EINT;//使能全局中断

  ERTM;//开全局实时中断

      UARTa_Init(9600);

      LED_Init();

      while(1)

      {

      }

}

四、注意事项

不同的开发板需要修改的部分。

//外设频率

//串口不同的需要修改,SCIA,SCIB,SCIC

//SCIA的接收中断为9.1

 (5)实验结果

最后,请大家共同讨论,互相学习。

  完整的文档在,更多内容关注公众号"文中青竹"DSP28335Sci中FIFO数据传输-交通文档类资源-CSDN下载dspf28335使用fifo串口中断进行数据的传输更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_43629043/75294299

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DSPF28335 SCI FIFO串口通讯 的相关文章

  • 同步FIFO和异步FIFO1、FIFO定义FIFO是英文First In First Out的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但

    1 FIFO定义 FIFO是英文First In First Out的缩写 xff0c 是一种先进先出的数据缓存器 xff0c 他与普通存储器的区别是没有外部读写地址线 xff0c 这样使用起来非常简单 xff0c 但缺点就是只能顺序写入数
  • DSP28335使用FIFO的串口中断总结

    一 串行通信与并行通信 DSP控制器间 xff0c DSP控制器与外部设备间交换信息 xff0c 通信 xff0c 可采取的通信方式主要两大类1 串行通信 2 并行通信 并行通信一般包括多条数据线 多条控制线和状态线 xff0c 传输速度快
  • 论文润色 ‖ 一分钟教你如何写好SCI论文里的主题句,事半功倍

    今天 xff0c 小编来分享一下论文润色 xff0c SCI论文的主题句 xff08 Topic Sentences xff09 怎么写 xff1a 01什么是主题句 xff1f 主题句通常是段落开头的一句话 xff0c 是整个段落的小主题
  • STM32CubeMX系列|串口通讯

    串口通讯 1 串口简介 在串行通信中 xff0c 一个字符一个字符地传输 xff0c 每个字符一位一位地传输 xff0c 并且传输一个字符时 xff0c 总是以 起始位 开始 xff0c 以 停止位 结束 在进行传输之前 xff0c 双方一
  • STM32串口通信(串口中断、FIFO机制)之安富莱代码学习笔记

    创建串口设备结构体 span class token keyword typedef span span class token keyword struct span span class token punctuation span U
  • 基于STM32的串口通讯

    基于STM32的串口通讯 设备之间通信的方式 串行通信一般是以帧格式传输数据 xff0c 即一帧一帧的传输 xff0c 每一帧都含有起始信号 xff0c 数据信息以及停止信息等 并行通信 数据各个位同时传输 xff0c 速度快 xff0c
  • DSP28335的SCI的FIFO中断使用心得

    自学了一段时间的DSP28335的串口设置 xff0c 写下来帮助更多的新手 xff0c 遇到了很多问题也记录一些解决办法 以下全都是我个人的理解 xff0c 可能说的不对 xff0c 大家讨论 1 关于为什么必须用FIFO 一般的DSP系
  • DSP28335笔记--SCI篇

    采用FIFO来实现数据的发送与接收 xff0c 一般就是指采用FIFO中断 在标准SCI模式下通过中断方式来接收或者发送数据可以发现 xff0c 每接收或者发送一个字符就要进一次中断 xff0c 如果发送的字符比较多的话 xff0c 很明显
  • 转:DSP28335使用FIFO的串口中断总结

    版权声明 xff1a 本文为CSDN博主 E ROAD BY U 的原创文章 xff0c 遵循CC 4 0 BY SA版权协议 xff0c 转载请附上原文出处链接及本声明 原文链接 xff1a https blog csdn net E R
  • 用RCircos包来画圈圈图

    用RCircos包来画圈圈图 我先讲解了画图 再讲解了一些小知识 安装并加载必须的packages 如果你还没有安装 就运行下面的代码安装 install packages RCircos library RCircos 如果你安装好了 就
  • 【Latex排版】使用Latex 排版过程中的那些一二三问题汇总

    排版错误问题总结 1 在 maketitle 位置处报错 Missing inserted 2 添加参考文献 编译后显示错误 并且pdf中引用文献处为问号 持续更新问题 近期用Latex整理期刊论文时遇到了不少问题 现把遇到的问题及最终解决
  • 同步FIFO的verilog实现(2)——高位扩展法

    一 前言 在之前的文章中 我们介绍了同步FIFO的verilog的一种实现方法 计数法 其核心在于 在同步FIFO中 我们可以很容易的使用计数来判断FIFO中还剩下多少可读的数据 从而可以判断空 满 关于计数法实现同步FIFO的详细内容 请
  • java串口通讯详解

    序言 说到开源 恐怕很少有人不挑大指称赞 学生通过开源代码学到了知识 程序员通过开源类库获得了别人的成功经验及能够按时完成手头的工程 商家通过开源软件赚到了钱 总之是皆大欢喜 然而开源软件或类库的首要缺点就是大多缺乏详细的说明文档和使用的例
  • 无法写入通过 NFS 连接的 FIFO 文件

    我正在尝试写入位于 NFS 安装上的 FIFO 文件 但它会阻塞 可能是什么问题呢 我的 etc export tmp test 10 0 0 0 24 rw no root squash async NFS 服务器和客户端上的 ls tm
  • Go 中的 Unix FIFO?

    有没有办法用Go语言创建unix FIFO 没有Mkfifo nor Mknod in os包 尽管我预计命名的 FIFO 主要用于 posix 操作系统 事实上 有一个创建未命名的 FIFO 管道 的函数 但没有创建命名管道的函数 我是唯
  • 为什么将队列实现为循环数组?

    当实现像队列这样的 FIFO 时 我的导师总是建议我们将其表示为循环数组而不是常规数组 为什么 是因为在后者中 我们最终会在数组中出现垃圾数据吗 如果您使用固定数量的阵列插槽 元素 则以圆形排列回收插槽会更容易 因为您不需要重新排序元素 每
  • 如何监控 FIFO?

    我想通过设置该流量的只读终端窗口来调试两个进程之间的问题 我可以简单地使用现有的标准 Linux 实用程序来实现这一点吗 FIFO 位于 run myfifo并在其中一个进程中创建 Create a FIFO if one doesn t
  • 在C中读/写结构到fifo

    我正在尝试使用命名管道在进程之间传递结构 我在尝试打开管道非阻塞模式时陷入困境 这是我写入 fifo 的代码 void writeUpdate Create fifo for writing updates strcpy fifo writ
  • 用 C 语言实现 FIFO 队列

    对于嵌入式应用程序 我尝试使用 ANSI C 实现先进先出 FIFO 结构队列 最直接的方法似乎是通过实现链表 以便每个结构包含指向队列中下一个的指针 因此我将结构本身定义为 typedef enum LED on LED off etc
  • 在 FIFO 上写入“复杂”结构

    我正在使用 C 语言与客户端服务器进行某种 餐厅 实现 我正在尝试通过 FIFO 发送以下结构 typedef struct int numtable table number to send answer char timestamp 2

随机推荐

  • GPS卫星定位基本原理

    GPS定位基本原理 GPS测量定位方法分类 定位模式 xff1a 绝对定位 xff08 单点定位 xff09 相对定位 差分定位 定位时接收机天线的运动状态 xff1a 静态定位 xff0d 天线相对于地固坐标系静止 动态定位 xff0d
  • c++缺省参数,函数重载详解

    c 43 43 缺省参数 xff0c 函数重载详解 缺省参数什么是缺省参数 xff1f 缺省参数的分类 1 全缺省参数 2 半缺省参数 规则 xff1a 缺省参数只能从右往左 xff0c 依次给出 xff08 这是规定 xff09 函数重载
  • 和小白一起学数据结构三之c与结构及联合

    和小白一起学数据结构 xff08 三 xff09 今天博主动笔有些晚了哈 xff0c 所以不讲太多废话了 xff0c 直接上干货 xff01 今天我们来复习c语言提供的两种聚合数据类型 xff08 aggregate data type 数
  • 持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

    文章目录 1 简介1 1 位姿的几种表示形式1 2 姿态转换在线工具 2 位姿转换接口2 1 旋转向量 转 四元数2 2 四元数 转 旋转向量2 3 四元数 与 旋转矩阵 3 机器人相关应用3 1 不同厂家协作机器人的位姿表示形式 1 简介
  • 基于MSP432P401R的MPU6050陀螺仪串口输出姿态角程序

    基于MSP432P401R的MPU6050陀螺仪串口输出姿态角程序 目录 基于MSP432P401R的MPU6050陀螺仪串口输出姿态角程序 前言 一 实验器材 二 硬件资源 1 usb转ttl 2 串口1 波特率 9600 P2 2 P2
  • 一个程序从开始运行到结束的完整过程

    目录 预编译编译汇编链接 我们平时不管是在 Windows 下的编译器直接点击执行一个代码 xff0c 还是在 Linux 下通过 gcc g 43 43 生成可执行文件并执行 xff0c 都会直接出来代码的运行结果 但实际上它还细分为以下
  • cpp-http 库的使用

    文章目录 前言 96 cpp http 96 库简介 96 cpp http 96 库使用介绍http 客户端搭建步骤http 服务端搭建步骤 96 cpp http 96 库示例服务端实现客户端实现 示例下载关于示例代码编译出错的问题 参
  • vscode编译器卡顿问题

    最近一段时间使用vscode没有了以前的丝滑的感觉 xff0c 百度了很多种办法 xff0c 比如 xff1a 在文件 gt 首选项 gt 设置 中 xff0c 将 search followSymlinks 设置为false xff0c
  • 问题解决记录集合

    1 解决pytorch下载mnist等数据集速度过慢 失败问题 xff1a https blog csdn net weixin 44414948 article details 109756003 utm medium 61 distri
  • java 通过onvif抓取海康摄像头图片

    java 通过onvif抓取海康摄像头图片 文章目录 java 通过onvif抓取海康摄像头图片前言一 把onvif jar放到自己的maven仓库二 pom文件引入jar包三 测试代码四 运行中的变量五 参考链接地址 前言 网上也有类似的
  • java常见面试题(二)

    java基础二 11 抽象类必须要有抽象方法吗 xff1f 不需要 xff0c 抽象类不一定非要有抽象方法 示例代码 xff1a abstract class Cat public static void sayHi System out
  • 2022高教社杯全国大学生数学建模竞赛B题解析(更新完结)

    2022高教社杯全国大学生数学建模竞赛B题解析 xff08 更新完结 xff09 题目解析前言问题一1 11 21 3问题二 题目 B 题 无人机遂行编队飞行中的纯方位无源定位 无人机集群在遂行编队飞行时 xff0c 为避免外界干扰 xff
  • c++的引用和指针原来是这种关系

    c 43 43 的引用和指针原来是这种关系 关于引用引用的概念 xff1a 引用的三种情况 xff1a 当引用作为返回值的时候 xff1a 引用和指针的区别 xff1a 关于引用 引用的概念 xff1a 引用不是新定义一个变量 xff0c
  • java面试题汇总一(会持续更新)

    不积跬步无以至千里 xff0c 这里会不断收集和更新Java基础相关的面试题 xff0c 目前已收集100题 1 什么是B S架构 xff1f 什么是C S架构 B S Browser Server xff0c 浏览器 服务器程序 C S
  • 【STM32】创建stm32工程中,各个文件夹及部分文件作用

    USER xff1a 存放工程文件 主函数文件 main c 以及其他包括system stm32f10x c等 CORE xff1a 用来存放核心文件和启动文件 OBJ xff1a 是用来存放编译过程文件以及hex 文件 STM32F10
  • Qt4.8类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt5.9类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt5.15类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt6.3类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • DSPF28335 SCI FIFO串口通讯

    在工作过程中 xff0c 通过串口进行上位机与控制器之间进行数据的传输 xff0c 标准的串口通讯容易造成数据的丢失和内存堆满的现象 xff0c 便使用SCI中的FIFO对数据进行中断处理 一 串口通信基本知识 F28335 处理器共有 3