TMS320F28335项目开发记录10_28335之SCI模块
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模块相关推荐
- TMS320F28335项目开发记录9_28335之中断系统
TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...
- TMS320F28335项目开发记录1_CCS的使用介绍
CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...
- TMS320F28335项目开发记录6_28335之cmd文件详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/scottly1/article/de ...
- TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
CCS与仿真器连接问题 实际使用过程中.仿真器和CCS连接可能出现这样或那样的问题,或许你的连接非常成功,没碰到过什么问题.但我的问题的确不少,可能与电脑配置有关吧,也可能与人品有关吧. 以下的自己的 ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.19
尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.22
尚硅谷--谷粒商城项目开发记录--2021.11.22 概念: 1.对象优化: 新增的API: ES6 给 Object 拓展了许多新的方法,如: keys(obj): 获取对象的所有 key 形成的 ...
- Anytime项目开发记录0
Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.21
尚硅谷--谷粒商城项目开发记录--2021.11.21 概念: 1.var和let的区别: 作用域: var 声明的变量往往会越域 let 声明的变量有严格局部作用域 声明次数: var 可以声明多次 ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.20
尚硅谷--谷粒商城项目开发记录--2021.11.20 概念: 1.SpringCloud Alibaba: 简介: Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此 ...
最新文章
- DotNetNuke(DNN)网站发布、部署、迁移和重建
- oracle xclock xmanager
- 设计模式-行为-迭代器
- clustering
- unzip 分包_建筑总包企业计量分包成本时,未取得相应分包发票,增值税如何处理?...
- baseline来啦!第三届厦门国际银行数创金融杯金融营销建模大赛(奖金34万!)
- MATLAB GUI引用了不存在的字段
- 【深入浅出etcd系列】3. 日志同步
- 跑monkey需要安装什么_智能门锁安装时需要注意什么?
- 基于PHP+Web+Mysql的在线问卷调查系统
- carry函数在C语言中用法,动词carry用法小归纳
- 【DVB】【Cert】DVD相关认证简介
- three points 1(平面几何 三角形)
- 7-163 判断正整数n是否同时含有奇数和偶数
- jmeter 聚合报告里面是什么意思
- java 判断ftp文件是否存在_java如何检验ftp服务器中指定文件是否存在
- 计算机组成原理八位全加器,计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...
- 手机(小米10s)接收微信语音\视频通话时,蓝牙耳机(小米Air2s)无法使用,手机仍外放
- xUnit-Moq框架
- Linux平台采用ar指令打包释放文件,解压.deb格式包,抽取释放指定文件,获取control内的版本、包名等信息