28335之SCI模块

1.介绍

TMS320F28335内部有三个SCI模块,SCIA、SCIB、SCIC。

每一个SCI模块都有一个接收器和发送器,SCI的接收器和发送器各有一个16级的FIFO(First In First Out先入先出)队列,它们都还有自己独立的使能位和中断位;可以工作在半双工或全双工模式;

串行通信的三种方式:

2.SCI深入

A. GPIO的管脚对应如下:

SCIA对应GPIO28/29和GPIO35/36两组可选

  SCIB有四组管脚可以选择,分别是 O9/11,GPIO14/15,GPIO18/19,GPIO22/23;

  SCIC对应的是GPIO62/63。

在编程初始化时,需要先将对应的GPIO管脚配置为SCI模式,才能使得这些管脚具有SCI功能;

B. SCI通信中带有格式信息的数据字符叫帧,下面是典型的数据帧格式

C. 下面单独介绍一下SCI波特率设置寄存器SCIHBAUD和SCILBAUD,0-15是高字节与低字节连在一起,构成16位波特率设置寄存器BRR。

BRR = SCIHBAUD + SCILBAUD

如果1<= BRR <=65535,那么SCI波特率=LSPCLK / ( (BRR+1) * 8 ),由此,可以带入你需要的波特率,既可以得到BRR的值;

如果BRR = 0,那么SCI波特率=LSPCLK/ 16

D. SCI模块发送和接受数据的原理:

3.SCI串口编程

A.先初始化IO管脚 (以SCI-A为例,SCI-B、SCI-C的初始化方法一样,就是照着改对应的管脚就行)

void InitSciaGpio()    //初始化SCIA的GPIO管脚为例子
{EALLOW;
//根据硬件设计决定采用GPIO28/29和GPIO35/36中的哪一组。这里以35/36为例
//定义管脚为上拉GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;    GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;    //定义管脚为异步输入GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; //配置管脚为SCI功能管脚GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;   EDIS;
}

B.SCI初始化配置

void scia_init()
{SciaRegs.SCICCR.all =0x0007;   // 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.bit.TXINTENA =1; //发送中断使能SciaRegs.SCICTL2.bit.RXBKINTENA =1;//接收中断使能SciaRegs.SCIHBAUD    =0x0001; // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD    =0x00E7;SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}

C.接着进行中断的配置

EALLOW;    // This is needed to write to EALLOW protected registersPieVectTable.SCIRXINTA = &sciaRxIsr;PieVectTable.SCITXINTA = &sciaTxIsr;PieVectTable.SCIRXINTB = &scibRxIsr;PieVectTable.SCITXINTB = &scibTxIsr;
EDIS;   // This is needed to disable write to EALLOW protected registers

D.上面是将SCIA和SCIB的中断服务程序连到PIE的中断表中,发生中断就会跑到你的ISR去了, 下面是开中断:

 PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE blockPieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIE Group 9, int1PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIE Group 9, INT2PieCtrlRegs.PIEIER9.bit.INTx3=1;     // PIE Group 9, INT3PieCtrlRegs.PIEIER9.bit.INTx4=1;     // PIE Group 9, INT4IER = 0x100;    // Enable CPU INTEINT;

这样串口基本就OK了。

上面的配置是配置典型的串口中断程序;

下面是一个SCI例程:

/** Serial.c**  Created on: 2014-12-8*      Author: SCOTT*/#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"     // CPU_FRQ_100MHZ is in it!void scib_fifo_init()
{ScibRegs.SCIFFTX.all = 0xe040;ScibRegs.SCIFFRX.all = 0x204f;ScibRegs.SCIFFCT.all = 0x0;
}/*
void scib_echoback_init()
{ScibRegs.SCICCR.all = 0x0007;             // one stop bit,8 data bit,No parity, No LookbackScibRegs.SCICTL1.all = 0x0003;            // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKEScibRegs.SCICTL2.all =0x0003;ScibRegs.SCICTL2.bit.TXINTENA = 1;     // TX interrupt enableScibRegs.SCICTL2.bit.RXBKINTENA =1;
#if (CPU_FRQ_150MHZ)ScibRegs.SCIHBAUD    =0x0001;              // 9600 baud @LSPCLK = 37.5MHz. 150/4 = 37.5MHZScibRegs.SCILBAUD    =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)ScibRegs.SCIHBAUD    =0x0001;              // 9600 baud @LSPCLK = 20MHz.ScibRegs.SCILBAUD    =0x0044;
#endifScibRegs.SCICTL1.all =0x0023;            // Relinquish SCI from Reset
}*/void scib_echoback_init()
{ScibRegs.SCICCR.all = 0x0007;             // one stop bit,8 data bit,No parity, No LookbackScibRegs.SCICTL1.all = 0x0003;            // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKEScibRegs.SCICTL2.all =0x0003;            // RX TX Interrupt enableScibRegs.SCICTL2.bit.TXINTENA = 1;        // TX interrupt enableScibRegs.SCICTL2.bit.RXBKINTENA =1;      // RX interrupt enable
#if (CPU_FRQ_150MHZ)ScibRegs.SCIHBAUD    =0x0001;              // 9600 baud @LSPCLK = 37.5MHz. 150/4 = 37.5MHZScibRegs.SCILBAUD    =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)ScibRegs.SCIHBAUD    =0x0001;              // 9600 baud @LSPCLK = 20MHz.ScibRegs.SCILBAUD    =0x0044;
#endifScibRegs.SCIFFTX.all = 0xC020;ScibRegs.SCIFFRX.all = 0x0021;                  // Receive FIFO generates interrupt when the FIFO status bits (RXFFST4–0) and FIFO level bits//(RXFFIL4–0) match (i.e., are greater than or equal to). Default value of these bits after reset                                                        //–11111. This will avoid frequent interrupts, after reset, as the receive FIFO will be empty mos                                                        // t of the time.ScibRegs.SCIFFCT.all = 0x00;ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;ScibRegs.SCIFFRX.bit.RXFIFORESET=1;ScibRegs.SCICTL1.all =0x0023;              // Relinquish SCI from Reset
}void scib_xmit(int c)
{//while (ScicRegs.SCIFFTX.bit.TXFFST != 0) {} //==0 -> transmit BUF is empty,can receive new datawhile(ScibRegs.SCICTL2.bit.TXRDY != 1){}     //also right,but the way of tool's display is differentScibRegs.SCITXBUF = c;
}void scib_msg(char *msg)
{int i;i = 0;while('\0' != msg[i]){scib_xmit(msg[i]);i++;}
}Uint16 scib_rvc()
{Uint16 data = 0x0000;while(ScibRegs.SCIFFRX.bit.RXFFST == 0){}data = ScibRegs.SCIRXBUF.all;while(ScibRegs.SCICTL2.bit.TXRDY != 1){}ScibRegs.SCITXBUF = (data & 0xff);return data;
}/*No More*/

TMS320F28335项目开发记录10_28335之SCI模块相关推荐

  1. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  2. TMS320F28335项目开发记录1_CCS的使用介绍

    CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...

  3. TMS320F28335项目开发记录6_28335之cmd文件详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/scottly1/article/de ...

  4. TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总

    CCS与仿真器连接问题 实际使用过程中.仿真器和CCS连接可能出现这样或那样的问题,或许你的连接非常成功,没碰到过什么问题.但我的问题的确不少,可能与电脑配置有关吧,也可能与人品有关吧. 以下的自己的 ...

  5. 尚硅谷——谷粒商城项目开发记录——2021.11.19

    尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...

  6. 尚硅谷——谷粒商城项目开发记录——2021.11.22

    尚硅谷--谷粒商城项目开发记录--2021.11.22 概念: 1.对象优化: 新增的API: ES6 给 Object 拓展了许多新的方法,如: keys(obj): 获取对象的所有 key 形成的 ...

  7. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  8. 尚硅谷——谷粒商城项目开发记录——2021.11.21

    尚硅谷--谷粒商城项目开发记录--2021.11.21 概念: 1.var和let的区别: 作用域: var 声明的变量往往会越域 let 声明的变量有严格局部作用域 声明次数: var 可以声明多次 ...

  9. 尚硅谷——谷粒商城项目开发记录——2021.11.20

    尚硅谷--谷粒商城项目开发记录--2021.11.20 概念: 1.SpringCloud Alibaba: 简介: Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此 ...

最新文章

  1. DotNetNuke(DNN)网站发布、部署、迁移和重建
  2. oracle xclock xmanager
  3. 设计模式-行为-迭代器
  4. clustering
  5. unzip 分包_建筑总包企业计量分包成本时,未取得相应分包发票,增值税如何处理?...
  6. baseline来啦!第三届厦门国际银行数创金融杯金融营销建模大赛(奖金34万!)
  7. MATLAB GUI引用了不存在的字段
  8. 【深入浅出etcd系列】3. 日志同步
  9. 跑monkey需要安装什么_智能门锁安装时需要注意什么?
  10. 基于PHP+Web+Mysql的在线问卷调查系统
  11. carry函数在C语言中用法,动词carry用法小归纳
  12. 【DVB】【Cert】DVD相关认证简介
  13. three points 1(平面几何 三角形)
  14. 7-163 判断正整数n是否同时含有奇数和偶数
  15. jmeter 聚合报告里面是什么意思
  16. java 判断ftp文件是否存在_java如何检验ftp服务器中指定文件是否存在
  17. 计算机组成原理八位全加器,计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...
  18. 手机(小米10s)接收微信语音\视频通话时,蓝牙耳机(小米Air2s)无法使用,手机仍外放
  19. xUnit-Moq框架
  20. Linux平台采用ar指令打包释放文件,解压.deb格式包,抽取释放指定文件,获取control内的版本、包名等信息

热门文章

  1. 下拉框的连动、传值使用
  2. avg是java关键字_浅谈AVG游戏中的脚本
  3. BENET2.0教材 组建与维护企业邮件系统
  4. (imdb数据集)电影评论分类实战:二分类问题
  5. Bugku 密室逃脱 WP
  6. C# SolidWorks 二次开发 API---提高草图绘制效率
  7. 极光开发者周刊【No.0716】
  8. 一篇文章让你瞬间知道Mybatis框架是如何使用的
  9. 计算机病毒论文课题内容,计算机病毒毕业论文开题报告.doc
  10. 自己用计算机唱的歌,电脑唱歌录音软件 怎么在电脑上自己录歌