TMS320F28377的SCI通信

TMS320F28377的SCI通信

参考文章:

1,TI官网函数库

2,TMS320F28379D 使用心得之 SCI

在使用官方给的SCI历程中,有出现第一次发送一包信息就出现丢包的情况,导致后面数据处理错误,在此做一个记录,以及提供一份TMS320F28377D的SCI通信例程,对初学者较好。
程序例程

第一步:初始化SCI的GPIO

EALLOW;
//SCIB,用作MODBUS通讯
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 2;//SCITXDB
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 2;//SCIRXDB
GpioCtrlRegs.GPAGMUX2.bit.GPIO19 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;//MODBUS接收或发送引脚,低电平接收,高电平发送
GpioCtrlRegs.GPAGMUX2.bit.GPIO17 = 0;
EDIS;

做以下解释:

第一行与最后一行:与最后一行连用,说明改动中间被保护的寄存器

中间行:根据芯片手册对GPyGMUXn.GPIOz and GPyMUXn.GPIOz寄存器的描述,这几行代码将18,19,17设置成了SCITXDB,SCIRTDB,GPIO

注:我的代码中GPIO17用于了485的收发控制,可略

请添加图片描述

第二步:中断函数配置

2.1:SCIB中断名配置

该代码为将interrupt void scibRxFifoIsr(void)配置为SCIB的接收中断函数

EALLOW;
PieVectTable.SCIB_RX_INT = &scibRxFifoIsr;
EDIS;
2.2:中断函数
interrupt void scibRxFifoIsr(void)
{
    Uint16 ReceivedChar1;
    ReceivedChar1 = ScibRegs.SCIRXBUF.bit.SAR;
    ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;   // Clear Overflow flag
    ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;   // Clear Interrupt flag
    PieCtrlRegs.PIEACK.all = 0x100;       // Issue PIE ack
}

做以下解释:

2.2.1:第二行
ReceivedChar1 = ScibRegs.SCIRXBUF.bit.SAR;

将接收到的数据0:7位传递给ReceivedChar1,定义成16位也没事,传递低8位

接收到的数据在SCIFIFO中可以配置接收多少位数据,配置好FIFO,然后改为ReceivedChar1 = ScibRegs.SCIRXBUF.all;可接受16位。

2.2.2:第三,四,五行
 ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;   // Clear Overflow flag
 ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;   // Clear Interrupt flag
 PieCtrlRegs.PIEACK.all = 0x100;       // Issue PIE ack

清除溢出标志位,清除中断标志位,发布PIE应答

第三步:配置PIE

PieCtrlRegs.PIEIER9.bit.INTx3=1;     //SCIB
IER |= M_INT9;

查芯片手册的PIE表可知,SCIB的接收中断为第九列第三个

在这里插入图片描述

第四步:配置SCIB的FiFO

    ScibRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
    ScibRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
    ScibRegs.SCICTL2.bit.RXBKINTENA =1;

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

    ScibRegs.SCIHBAUD.all    =0x0002;//波特率9600
    ScibRegs.SCILBAUD.all    =0x008B;

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

    ScibRegs.SCICTL1.all =0x0023;     // 重启SCIB
    ScibRegs.SCIFFRX.bit.RXFIFORESET=1;

第一行:配置为,一停止位,无校验为,8字节,具体看后面英文注释

第二行:初始化SCIB时钟,具体看后面英文注释

第三行:接收缓存区使能

后面均有相关注释

完结!!!可以用了!!!接收到的数据在 ScibRegs.SCIRXBUF.bit.SAR 寄存器里

如有问题随时提问,一起学习呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值