EDA365电子论坛网

标题: TMS320F28379D 之 SCI [打印本页]

作者: RNGxiaohu    时间: 2021-12-10 10:37
标题: TMS320F28379D 之 SCI
; m' c( h5 R5 H5 K. v
一、SCI 简介
8 B  b5 y! {7 i& [: y6 ]  pSCI(Serial Communication Interface)意为"串行通信接口",是相对于并行通信的,是串行通信技术的一种总称,最早由 Motorola 公司提出的。它是一种通用异步通信接口 UART,与 MCS‐51 的异步通信功能基本相同。(以上内容来自百度)
: e+ D2 d3 ^% E" a$ j4 f$ O. C
' j' S5 z& o+ e二、28379D 的 SCI 模块简介
# e) Z  u, h( z; ^) ]: M2.1 模块功能8 p( Q6 t/ F9 |! w0 V/ e! v+ a
基本就是 UART,数据格式可编程。28398D 的 SCI 和其他 28 系列的产品基本一样,有两个增强功能。一个是发送和接收缓冲,FIFO。如果启用了发送 FIFO,就可以将要发送的字节先储存在发送 FIFO 里,待发送 FIFO 里的字节数达到设置的上限后,再一起发送出去。如果启用了接收 FIFO,就可以将接收的字节先存在接收 FIFO 里,待接收 FIFO 里的字节数达到设置的上限后,再产生中断来处理接收的数据。另一个是波特率自动检测功能,这个一般不用。
) t2 [  Z, r- d& C9 w0 ], }- ]: M, n. q$ L7 ]
8 _1 G# m8 T* Z' q# f& F
2.2 28379D 的 SCI 模块引脚
, H" C7 [3 e# }: l28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID。每个 SCI 的发送引脚和接收引脚都有很多个,如下表:
5 G/ d2 ?' j. y: n, ?+ r( b
  ?9 l. x  R9 _5 R& u
三、SCI 配置步骤
: i. Y- s# o) j0 X( U5 ]3.1 配置 GPIO: J) X9 H" d3 R
配置相应的 GPIO 为 SCIx 的复用引脚。: I& P; U& {* i" o0 ~7 e
1 q5 Y; d: V- E

; @0 g2 j. j- I! R7 o0 ~/ n8 a3.2 配置 SCI 的数据格式5 j4 x. l) P0 q0 t7 {. u1 U2 Q
配置发送和接收的数据格式,一般是:1 位停止位,无奇偶校验,无回环,空闲线模式(两个对象之间通讯,如果是三个及以上,得用地址线模式),8 位数据位。2 l" z, P1 R# x+ U& Z3 u$ P1 @
1 T4 K' ^- l0 D, W: C5 |- U# _

' [8 N1 h0 d; e5 c/ o) A% \3.3 配置波特率
# {( e+ i1 j5 q) ^: |配置波特率,不多说。- }/ w+ A+ s( t$ A( A

; d- o2 R  J. ^! M9 I! M
$ r( E( D6 H" T3.4 配置 FIFO, s# u5 B, R/ B0 o, {5 w
首先得使能 FIFO,然后根据需要,进行配置。比如使能接收 FIFO 中断,设置 FIFO 的级数,基本的就这些。还可以配置波特率自检的一些设置,不过一般不用。8 Y( y( |; |- [4 d

8 X% Y' a0 V. M
8 w' l# n7 m+ |' C+ f1 f3 E3.5 使能 SCI; s( ~4 Y; R! ]* a
复位一些标志,比如 SCICTL1 寄存器的 SWRESET,必须被置 1,等等。
) d* a( D) L2 i* W  e, n4 g# u8 i+ `( R2 V

# t8 {) Y: f- L) Y4 l3.6 配置 PIE
& R# f5 A) V1 A* u, u, m# d首先使能 PIE,然后修改 PIE 向量表,然后使能对应的 PIE,以及 CPU 中断。' I& K5 R' I/ v. V5 M: @; V: v

0 S: x4 t" I3 B  k1 y- m! F( @3 R; n4 B* @! n- Z
四、代码示例2 d- w% {" j" T; G0 ?- S# b
示例使用了 SCIB,引脚使用 GPIO18 为 Tx,GPIO19 为 Rx。
3 Z( m0 k* ~( h4.1 配置 GPIO) C' `5 n( \& x5 }8 ^& z$ R
; z' w; X6 f( L0 m/ j4 Q1 d/ D( Y0 G
EALLOW;
+ _* ?( C6 ~3 K* [, h    GpioCtrlRegs.GPAPUD.bit.GPIO18=0;//开启上拉电阻9 E: P* N4 D* q& |9 A+ @* M
    GpioCtrlRegs.GPAPUD.bit.GPIO19=0;//开启上拉电阻
( `. T& M' i' g6 G9 P+ m    GpioCtrlRegs.GPADIR.bit.GPIO19=0;
) g# s/ Z' m0 r- t    GpioCtrlRegs.GPADIR.bit.GPIO18=1;0 O' K2 t  `# u( J( S- `
    GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0;
' c9 \4 |0 U) J5 H4 ]    GpioCtrlRegs.GPAGMUX2.bit.GPIO19=0;. d3 ~! a. G' r! K6 ], a
    GpioCtrlRegs.GPAMUX2.bit.GPIO18=2;//复用为 SCIB 的输出' @6 }6 c4 C) ?7 o
    GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//复用为 SCIB 的输入, J: W7 @( c7 s- G; S9 K" m) P; b
EDIS;# T1 o- R" x8 c: ~; o5 T+ _
  K! x& l+ F$ E9 E; H
4.2 配置数据格式
; n" k: r& L3 x! P- S+ _( J6 |  w" {/ v; v# t; V3 k( C
ScibRegs.SCICCR.all = 0x0007;//1 位停止位,无奇偶校验,无回环测试,空闲线模式,8 位数据位
- E5 e* Q, D' F3 I% z$ f3 D0 C9 Y+ |+ K( j! t& d9 C
4.3 配置波特率
" c3 N3 h2 A! q) }, ?8 `/ a# G( s$ k
ScibRegs.SCIHBAUD.bit.BAUD=0x0000;//波特率 115200
4 O# A9 [. `3 m! M0 mScibRegs.SCILBAUD.bit.BAUD=0x0036;//波特率 115200
- U; e8 q! q1 |: E2 r( A( G+ z! `5 N) x! e& T5 n2 t4 M$ i
4.4 配置 FIFO
  L6 P# v8 f1 h4 [4 s$ K' l) e
; ^; w" O9 J3 G0 o* `: [" z# fScibRegs.SCIFFTX.bit.SCIFFENA=1;//使能 FIFO
$ F, H2 S/ h# z, v6 q5 ~9 kScibRegs.SCIFFRX.bit.RXFFIENA = 1;//使能 FIFO 接收中断1 c* i' x5 {' T5 ?
ScibRegs.SCIFFRX.bit.RXFFIL=1;//FIFO 接收字节 1$ _  t$ ~5 o# n- l
ScibRegs.SCIFFCT.all = 0x0;
2 p1 Z2 N: _: g* c; h; H5 ^
: a1 m$ r7 y9 ~5 k9 n4.5 重新使能 SCI6 M# A; \+ H, I$ j1 q* g3 w

7 G0 x3 z# n/ q" {1 o/ I2 ZScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 重启sci
9 C9 |+ |. P  A9 r
# r) x4 {4 p6 \( o4.6 配置 PIE& [7 o. v% a' C2 E
: X6 Q# r5 f8 D
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能 PIE
1 |+ H. [, d) B) ZEALLOW;
* S% {, W( a3 E; GPieVectTable.SCIB_RX_INT=&ScibInterrupt;//修改中断向量表/ u6 j: y1 Z& M% ?7 d1 G2 W; W
EDIS;* r" f6 Q5 |& `. s
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能 PIE 中断
% M4 j% W2 E' T$ FIER |= M_INT9;//使能 CPU 中断
2 P) Y, T; c- f
; {3 _" `* Z" X, z" i2 P- B# N  s4 U5 ]" n; Q# R3 \+ U8 c
4.7 接收中断函数 ScibInterrupt 如下:
. _8 Y. k% ~% h1 Z$ {0 k8 q: u) K/ P# {3 z9 w
interrupt void ScibInterrupt(void)
- P: s: t. [, `% y& S. j{7 o( H% H5 k# H& g
    int i=0,data;
! Y4 I9 W9 {9 m6 g    for(i=0;i<ScibLegnth;i++)& Y0 s- x" Z! Z8 T, s9 `
    {
/ \2 i0 g: [% Q$ b: Q3 Z1 m        data=ScibRegs.SCIRXBUF.bit.SAR;//接收的数据! U& K* }; A8 i; f9 }
    }* R% |) H5 n( i0 u" d
    ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // 清接收中断标志0 }% S6 ?7 S' J$ a7 ^/ A; t3 o
    PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;// 清接收中断标志
! Q) ~6 J& ?" X+ `9 R9 K}
$ n' O0 ]+ R% j7 i( ^2 I. u
; E5 S. \& }  }! T# b: I) z6 P1 P1 }! f" B) D, n' C2 E# f
4.8 发射函数: R9 q1 |! v! g' {/ V2 @" }# A; t
' F$ ]( l1 P# m! m

+ Q. I( T5 {! B0 ^6 V, X2 s) B, \int ScibSend(int data)" J$ m+ H, d  ]9 X' j; m
{
( n* a! V0 s  l$ L. j: w( O     while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
) x2 K) G4 R) O, R( ]     ScibRegs.SCITXBUF.bit.TXDT=0x06;
  S% X  W0 a2 E     return 0;
' i/ ^( P; O& q}( n+ R7 R/ |' y5 m

6 I. p1 B% N0 \7 {. B* j0 e/ B4 t

作者: MLXG    时间: 2021-12-10 11:10
28398D 的 SCI 和其他 28 系列的产品基本一样,有两个增强功能
作者: guanshen    时间: 2021-12-10 11:10
首先得使能 FIFO,然后根据需要,进行配置
作者: xiananUZI    时间: 2021-12-10 11:11
28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID
作者: CLBuu    时间: 2021-12-10 11:11
配置相应的 GPIO 为 SCIx 的复用引脚
作者: faker12    时间: 2021-12-10 11:12
很实用的文章




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2