| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> DSPF28335 SCI FIFO串口通讯 -> 正文阅读 |
|
[嵌入式]DSPF28335 SCI FIFO串口通讯 |
在工作过程中,通过串口进行上位机与控制器之间进行数据的传输,标准的串口通讯容易造成数据的丢失和内存堆满的现象,便使用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 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:17:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |