3232|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

TMS320F28379D 使用心得之 SCI [复制链接]

一、SCI 简介
SCI(Serial Communication Interface)意为"串行通信接口",是相对于并行通信的,是串行通信技术的一种总称,最早由 Motorola 公司提出的。它是一种通用异步通信接口 UART,与 MCS‐51 的异步通信功能基本相同。(以上内容来自百度)

二、28379D 的 SCI 模块简介
2.1 模块功能
基本就是 UART,数据格式可编程。28398D 的 SCI 和其他 28 系列的产品基本一样,有两个增强功能。一个是发送和接收缓冲,FIFO。如果启用了发送 FIFO,就可以将要发送的字节先储存在发送 FIFO 里,待发送 FIFO 里的字节数达到设置的上限后,再一起发送出去。如果启用了接收 FIFO,就可以将接收的字节先存在接收 FIFO 里,待接收 FIFO 里的字节数达到设置的上限后,再产生中断来处理接收的数据。另一个是波特率自动检测功能,这个一般不用。


2.2 28379D 的 SCI 模块引脚
28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID。每个 SCI 的发送引脚和接收引脚都有很多个,如下表:

     发送Tx    接收Rx
SCIA    GPIO8/29/36/42/48/65/84/135    GPIO9/28/35/43/49/64/85/136
SCIB    GPIO9/10/14/18/22/54/70/86/137    GPIO11/15/19/23/55/71/87/138
SCIC    GPIO12/38/56/63/72/89/106/140    GPIO13/39/57/62/73/90/107/139
SCID    GPIO47/76/93/104/142    GPIO46/77/94/105/141

三、SCI 配置步骤
3.1 配置 GPIO
配置相应的 GPIO 为 SCIx 的复用引脚。


3.2 配置 SCI 的数据格式
配置发送和接收的数据格式,一般是:1 位停止位,无奇偶校验,无回环,空闲线模式(两个对象之间通讯,如果是三个及以上,得用地址线模式),8 位数据位。


3.3 配置波特率
配置波特率,不多说。


3.4 配置 FIFO
首先得使能 FIFO,然后根据需要,进行配置。比如使能接收 FIFO 中断,设置 FIFO 的级数,基本的就这些。还可以配置波特率自检的一些设置,不过一般不用。


3.5 使能 SCI
复位一些标志,比如 SCICTL1 寄存器的 SWRESET,必须被置 1,等等。


3.6 配置 PIE
首先使能 PIE,然后修改 PIE 向量表,然后使能对应的 PIE,以及 CPU 中断。


四、代码示例
示例使用了 SCIB,引脚使用 GPIO18 为 Tx,GPIO19 为 Rx。
4.1 配置 GPIO

EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO18=0;//开启上拉电阻
    GpioCtrlRegs.GPAPUD.bit.GPIO19=0;//开启上拉电阻
    GpioCtrlRegs.GPADIR.bit.GPIO19=0;
    GpioCtrlRegs.GPADIR.bit.GPIO18=1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO19=0;
    GpioCtrlRegs.GPAMUX2.bit.GPIO18=2;//复用为 SCIB 的输出
    GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//复用为 SCIB 的输入
EDIS;

4.2 配置数据格式

ScibRegs.SCICCR.all = 0x0007;//1 位停止位,无奇偶校验,无回环测试,空闲线模式,8 位数据位

4.3 配置波特率

ScibRegs.SCIHBAUD.bit.BAUD=0x0000;//波特率 115200
ScibRegs.SCILBAUD.bit.BAUD=0x0036;//波特率 115200

4.4 配置 FIFO

ScibRegs.SCIFFTX.bit.SCIFFENA=1;//使能 FIFO
ScibRegs.SCIFFRX.bit.RXFFIENA = 1;//使能 FIFO 接收中断
ScibRegs.SCIFFRX.bit.RXFFIL=1;//FIFO 接收字节 1
ScibRegs.SCIFFCT.all = 0x0;

4.5 重新使能 SCI

ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 重启sci

4.6 配置 PIE

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能 PIE
EALLOW;
PieVectTable.SCIB_RX_INT=&ScibInterrupt;//修改中断向量表
EDIS;
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能 PIE 中断
IER |= M_INT9;//使能 CPU 中断

 

4.7 接收中断函数 ScibInterrupt 如下:

interrupt void ScibInterrupt(void)
{
    int i=0,data;
    for(i=0;i<ScibLegnth;i++)
    {
        data=ScibRegs.SCIRXBUF.bit.SAR;//接收的数据
    }
    ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // 清接收中断标志
    PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;// 清接收中断标志
}

 

4.8 发射函数
 

int ScibSend(int data)
{
     while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
     ScibRegs.SCITXBUF.bit.TXDT=0x06;
     return 0;
}
5、注意

1、请检查自己工程的配置,系统时钟是否是200M,如果不是,则波特率不对,具体的配置方式请参百度

2、本文代码是基于硬件TMS320F28379D,如果你是使用的其他硬件,则代码一般是不能用的
 

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表