TI DSP TMS320F280025 Note15:串口SCI的使用

TMS320F280025 串口SCI的使用


`

文章目录

  • TMS320F280025 串口SCI的使用
  • 框图分析
  • 串口特点
  • 可编程数据格式
  • SCI端口中断
  • 非FIFO/FIFO模式下SCI中断的操作/配置
    • UartDriver.c
    • UartDriver.h


在这里插入图片描述

串口时钟由PCLKCR7控制使能,默认位系统时钟4分频
串口接收与发送都可以触发中断
串口使用的引脚需要配置GPIO复用

框图分析

在这里插入图片描述

串口配置包括数据格式设置、通讯速率设置、FIFI设置、中断设置
对于发送和接受都可以选择是否使用FIFO
对于发送和接收都可以设置是否触发中断和FIFO中断,对于接收可以检测数据是否正确,如数据错误产生对应标志位

其主要功能单元如下:
①一个发送器(TX) 及相关寄存器。
–SICTXBUF: 发送数据缓冲寄存器, 存放所要发送的数据(由 CPU 装载) 。
–TXSHF 寄存器: 发送移位寄存器, 从 SCITXBUF 寄存器接收数据, 并将数据移位到 SCITXD 引脚上, 每次移 1 位数据。
②一个接收器(RX) 及相关寄存器。
–SCIRXBUF: 接收数据缓冲寄存器, 存放 CPU 所要读取的数据, 来自远程处理器的数据装入寄存器 RXSHF, 然后又装入接收数据缓冲寄存器 SCIRXBUF 和接收仿真缓冲寄存器 SCIRXEMU 中。
–RXSHF 寄存器: 接收移位寄存器, 从 SCIRXD 引脚移入数据, 每次移 1 位。
③一个可编程的波特率产生器。

串口特点

SCI模块的功能包括:
SCI模块的功能包括:
•两个外部针(针都可以用作GPIO,如果不是用于SCI):

  • SCITXD: SCI transmit-output
    –SCIRXD: SCI接收输入
    •波特率可编程64 k不同利率
    •数据字格式-一个起始位数据字长度可编程从一到八个比特—
    —可选的偶数/奇数/不校验位
    -一个或两个停止位区分地址和一个额外的数据(地址模式)
    •四个错误检测标志:
    •两种唤醒多处理器模式:空闲线和地址位
    •半双工或全双工操作
    •双缓冲接收和发送功能
    •发送和接收操作可以通过中断驱动或轮询算法与状态标志来完成
    •发送和接收中断的单独启用位(BRKDT除外)
    •NRZ(非归零)格式增强功能包括:
    •16级发送/接收FIFO

可编程数据格式

SCI数据的接收和发送都采用NRZ (non-return-to-zero)格式。如图26-3所示,NRZ数据格式包括:
•1个起始位
•1 ~ 8个数据位
•一个奇偶校验位(可选)
•一个或两个停止位
•一个用来区分数据和地址的额外位(仅限地址位模式)
数据的基本单位称为字符,长度为1 ~ 8位。数据的每个字符都用一个起始位、一个或两个停止位以及可选的奇偶校验位和地址位进行格式化。带格式化信息的数据字符称为帧,如图26-3所示。
在这里插入图片描述

SCI端口中断

SCI接收和发送可以中断控制。SCICTL2寄存器有一个标志位(TXRDY),它表示活动的中断条件,SCIRXST寄存器有两个中断标志位(RXRDY和BRKDT),加上RX ERROR中断标志,它是FE、OE、BRKDT和PE条件的逻辑或。发送器和接收器具有单独的中断启用位。如果不启用,则不会断言中断;但是,条件标志保持活动状态,反映传输和接收状态。
SCI对于接收端和发送端具有独立的外围中断向量。外围中断请求可以是高优先级的,也可以是低优先级的。这是由外设输出到PIE控制器的优先级位表示的。当RX和TX中断请求处于相同的优先级时,接收端总是比发送端具有更高的优先级,从而减少了接收端溢出的可能性。
外围中断的操作在系统控制和中断一章的外围中断一节中描述。
•如果RX/BK INT ENA位(SCICTL2, bit 1)被设置,当发生以下事件之一时,接收方外设中断请求被断言:—SCI接收到一个完整的帧,并将RXSHF寄存器中的数据传输到SCIRXBUF寄存器中。这个动作设置RXRDY标志(SCIRXST,位6)并启动中断。
-发生中断检测条件(SCIRXD在缺少停止位后的9.625位周期内处于低电平)。这个动作设置BRKDT标志位(SCIRXST,第5位)并启动中断。
•如果设置了TX INT ENA位(SCICTL2.0),当SCITXBUF寄存器中的数据被转移到TXSHF寄存器时,发送器外设中断请求被断言,表明CPU可以写SCITXBUF;这个动作设置TXRDY标志位(SCICTL2,位7)并启动中断。

SCI模块中断反应时间-如果在应用程序中发生紧时序,可能会发生偶尔的BRKDT或其他错误,如FE/PE被触发。
中断不会被触发,直到大约7/8的停止位被检测到(大约0.875位时间)。ISR表项前的实际延迟值为:((7BAUD_CLK_PERIOD)/
8+3
SYSCLK_PERIOD)。 在RX
ISR完成之前,SCI不会开始读取额外的位/字符,所以在下一个字节的起始位开始之前完成ISR。不管中断原因是什么,这留下了大约1/8比特时间(大约0.125比特时间)来完成整个ISR。
如果ISR在下一个起始位开始之前没有完成(在RX线再次变低之前),SCI模块在错误的位置开始读取起始位,因此可能会错误地读取所有位,直到下一个正确对齐的起始位(当ISR有足够的时间在再次开始位之前处理)。
避免错误的推荐方法(以适应ISR开始所需的0.875位时间):

  1. 保持RX ISR短。RX ISR必须仅用于将FIFO/缓冲区中的数据移动到内存中,在内存中数据可以在另一个时间要求较低的函数中进行处理。
  2. 避免在SCI RX ISR中过多地嵌套其他中断。不要允许嵌套延迟SCI RX ISR完井超过大约0.125位的时间窗口。
  3. 如果需要额外的时间(超过大约0.125比特的时间),在将额外的数据传输到C2000设备的SCI RX引脚之前,可以在其他设备的固件中添加延迟。 其他设备可以通过以下方式增加延迟:
    a.向C2000设备发送带有2个停止位的字节,为C2000 RX ISR完成提供大约1.125位的处理时间。
    b.在发送一个字节后,在发送到C2000设备的另一个设备的固件中增加手动延迟,为C2000 RX
    ISR完成提供(延迟+大约0.125比特时间)处理时间。 c.在每次C2000
    RX中断发生后,在发送到C2000设备的另一个设备的固件中增加手动延迟,为C2000 RX
    ISR完成提供(延迟+大约0.125比特时间)处理时间。这很难实现,因为需要另一个设备来预测传输的数据何时触发C2000设备上的RX中断。触发RX中断的例子有:到达RX-
    fifo水平、发送BRKDT、发生RXERROR等。

RXRDY和BRKDT位的中断产生由RX/BK INT ENA位(SCICTL2,位1)控制。RX ERROR位的中断产生由RX ERR
INT ENA位(SCICTL1,位6)控制。

非FIFO/FIFO模式下SCI中断的操作/配置

在这里插入图片描述
在这里插入图片描述

①复位: 在上电复位时, SCI 工作在标准 SCI 模式, 禁止 FIFO 功能。 FIFO的寄存器 SCIFFTX、 SCIFFRX 和 SCIFFCT 都被禁止。
②标准 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 的发送和接收提供一个可编程的中断触发逻辑。

UartDriver.c

/** UartDriver.c**  Created on: 2024年8月8日*      Author: Paranoid*/#include "main.h"//
// Defines
//
// Define AUTOBAUD to use the autobaud lock feature
//#define AUTOBAUD//
// Globals
//
uint16_t loopCounter = 0;//
// Function Prototypes
//__interrupt void Scia_RX_INT_ISR(void);
__interrupt void Scia_TX_INT_ISR(void);
//
// Main
//
void SciaDriver_Init(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438253.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

【C语言】指针篇 | 万字笔记

写在前面 在学习C语言过程,总有一个要点难点离不开,那就是大名鼎鼎的C语言指针,也是应为有指针的存在,使得C语言一直长盛不衰。因此不才把指针所学的所有功力都转换成这个笔记。希望对您有帮助🥰🥰 学习指…

基于Springboot+Vue的饮食营养管理信息系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

Hystrix学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

MAC M1 安装brew 配置环境变量,安装dart

一. 下载 brew 1. 终端输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2. 如遇到下载失败情况,需要VPN/代理 curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 8 m…

MongoDB简介

1、说到MongoDB就必须说下什么是NoSQL? NoSQL(NoSQL Not Only SQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系…

Java | Leetcode Java题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; class Solution {public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {Map<Integer, Integer> countAB new HashMap<Integer, Integer>();for (int u : A) {for (int v : B) {countAB.put(u v, countAB.getOrDefa…

被字节恶心到了

字节 日常逛 xhs 看到一篇吐槽贴&#xff0c;表示被公司恶心到了&#xff1a; 这位网友表示&#xff0c;最近是公司举办了 Q2 和 H1 的优秀员工表彰&#xff0c;自己的 1&#xff08;直属领导&#xff09;评上了&#xff0c;但仔细一看&#xff0c;1 获奖的所有产出都是自己的&…

实时数字人DH_live使用案例

参看: https://github.com/kleinlee/DH_live ubuntu 测试 apt install ffmpeg 下载安装: git clone https://github.com/kleinlee/DH_live.git cd DH_liveconda create -n dh_live python=3.12 conda activate dh_live pip install -r requirements.txt pip install torch …

突发:Sam万字长文,OpenAI o1超越人类,o1模型训练原理、微调、能力来源-AI已死,大模型当立

OpenAl o1大模型&#xff1a;原理、突破、前景及影响 北京时间2024年9月13日凌晨&#xff0c;OpenAI正式发布了新的人工智能模型o1&#xff08;o是orion猎户座&#xff0c;1代表从头再来&#xff0c;也意味着后续将出现更多序列&#xff09;&#xff0c;就是此前OpenAI一直在高…

银河麒麟V10 SP1如何进入救援模式?

银河麒麟V10 SP1如何进入救援模式&#xff1f; 1、准备工作2、进入BIOS/UEFI进入救援模式注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟高级服务器操作系统V10 SP1时&#xff0c;如果遇到系统无法正常启动或需要进…

240 搜索二维矩阵 II

解题思路&#xff1a; \qquad 解这道题最重要的是如何利用从左到右、从上到下为升序的性质&#xff0c;快速找到目标元素。 \qquad 如果从左上角开始查找&#xff0c;如果当前matrix[i][[j] < target&#xff0c;可以向右、向下扩展元素都是升序&#xff0c;但选择哪个方向…

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…

初步认识产品经理

产品经理 思考问题的维度 1️⃣为什么要抓住核心用户&#xff1f; 所有和产品有关系的群体就是用户&#xff0c;存在共性和差异了解用户的付费点&#xff0c;更好的优化产品是否使用&#xff1a;&#xff08;目标用户-已使用产品&#xff1a;种子用户-尝鲜&#xff1b;核心用…

【在Linux世界中追寻伟大的One Piece】命名管道

目录 1 -> 命名管道 1.1 -> 创建一个命名管道 1.2 -> 匿名管道与命名管道的区别 1.3 -> 命名管道的打开规则 1.4 -> 例子 1 -> 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据&…

C++多重继承

C多重继承 一个类可以从多个类继承&#xff0c;只需在类的基类列表中&#xff08;即冒号后&#xff09;指定更多的基类&#xff0c;用逗号分隔即可。例如&#xff0c;如果程序有一个名为Output的特定类要在屏幕上打印&#xff0c;我们希望派生类Rectangle&#xff08;长方形&a…

Netgear-WN604 downloadFile.php 信息泄露复现(CVE-2024-6646)

0x01 产品描述&#xff1a; NETGEAR WN604是一款功能强大的双频AC1200无线路由器,非常适合中大型家庭和企业使用。它支持最新的802.11ac无线标准,能提供高达1200Mbps的无线传输速度。路由器具备千兆有线网口和3个100Mbps有线网口,可满足有线和无线设备的接入需求。此外,它还内置…

JavaWeb——Vue组件库Element(5/6):案例:组件实现(概述、Form表单、Table表格、Pagination 分页、效果展示、完整代码)

目录 概述 Form表单 Table表格 Pagination 分页 效果展示 完整代码 概述 在刚才制作出来的页面当中&#xff0c;上面项目的名称已制作好&#xff0c;左侧的菜单栏也已配置好。 接下来主要处理的是右侧主展示区域当中的组件编写。 在右侧的主展示区域&#xff0c;主要有…

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

数据结构--绪论

1.数据结构的基本概念 1.1数据结构基本概念以及术语 &#xff08;1&#xff09;数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 &#xff08;2&#xff09;数据对象是具有相同性质的数据元素的集合&#xff0c;是数据的一个子集。 &#xff08;3&#xff09;数…