在工作过程中,通过串口进行上位机与控制器之间进行数据的传输,标准的串口通讯容易造成数据的丢失和内存堆满的现象,便使用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

DSPF28335 SCI FIFO串口通讯相关推荐

  1. TI DSP 28335 SCI FIFO中断 串口232通信

    文章目录 前言 1 SCIA FIFO 串口通信配置步骤 1.1 使能SCIA外设时钟 1.2 初始化SCIA对应GPIO 1.3 SCI工作方式 1.3.1 数据格式 1.3.2 波特率 1.3.3 ...

  2. 乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本

    代码地址如下: http://www.demodashi.com/demo/13650.html 文章目录 一.前言: 二.`esp8266`的串口分布情况: 三.`esp8266`的串口通讯时候,应 ...

  3. vb串口 任意波特率_串口通讯基本知识

    串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与 ...

  4. 串口通讯(USART)

    对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层. 物理层规定通讯系统中具有机械.电子功能部分的特性,确保原始数据在物理媒体的传输. 协议层主要规定通讯逻辑,统一收发双方的数据 ...

  5. STM32入门教程——串口通讯

    目录 1.认识串口 2.stm32串口介绍 2.1 查询方式 2.1 中断方式 2.2 DMA方式 3.使用stm32串口实现printf 串口作为嵌入式设备最常用的外设之一,被广泛的应用.本文介绍S ...

  6. 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!

    戳上方蓝字"技成电工课堂"快速关注!!! 电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗?1,什么是串口通讯? ...

  7. plc和pc串口通讯接线_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...

    电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...

  8. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01 写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是 ...

  9. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

最新文章

  1. ICRA2021|嵌入式系统的鲁棒单目视觉惯性深度补全算法
  2. centos7 利用 crontab 执行 定时任务 计划任务
  3. ibatis代码生成器
  4. 选择 GCD 还是 NSTimer ?
  5. GridView直接更新数据,kartik\grid\EditableColumn用法 [ 2.0 版本 ]
  6. matlab语言转化为python语言_matlab语言转译成python
  7. bigdecimal 加法_巧用加法的运算律,简化有理数的加法运算
  8. java并发编程笔记--Executor相关API整理
  9. echo显示文字后不换行(sep /p 和 echo 命令的一些细节)
  10. 阿里开发规范_字字珠玑,高级技术专家带你了解阿里的开发流程规范
  11. js获取访问IP、地区、、当前操作浏览器
  12. 【存档】20个正则表达式
  13. ns.ajax,UIWebView使用NSURLProtocol(拦截),ajax加载失败的问题
  14. Git 提交代码步骤总结
  15. ideaIU-2020.3.2安装教程以及导入第一个spring boot项目运行和环境配置教程
  16. 如何写一个Vue自定义指令
  17. 【PowerQuery】在Excel中手动刷新数据连接
  18. C++函数指针与成员函数指针
  19. [论文阅读]PAN++: Towards Efficient and Accurate End-to-End Spotting of Arbitrarily-Shaped Text
  20. 绿色版 MySQL 安装配置的正确操作步骤

热门文章

  1. 添加商务通的几种方式
  2. hive-jdbc-uber-2.6.5.0jar包自提
  3. 首次使用idea需要配置哪些东西?
  4. Python编程好学吗 为什么Python如此受欢迎
  5. 高清壁纸软件 FreshBackMac for Mac 1.9.2免费版
  6. 土木专业的SCI 期刊
  7. 百度搜索接口api_百度站长平台上线落地页视频转存功能,确保专业问答视频资源的质量和稳定性...
  8. Python Gdal 栅格数据处理之hgt转tif数据
  9. 【C语言】英文文章出现次数最多的单词
  10. python出租车数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb