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 ] p
SCI(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; ^) ]: M
2.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 w
0 ], }- ]: M, n. q$ L7 ]
8 _1 G# m8 T* Z' q# f& F
2.2 28379D 的 SCI 模块引脚
, H" C7 [3 e# }: l
28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID。每个 SCI 的发送引脚和接收引脚都有很多个,如下表:
5 G/ d2 ?' j. y: n, ?+ r( b
9.png
(45.89 KB, 下载次数: 6)
下载附件
保存到相册
2021-12-10 10:37 上传
?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 a
3.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" T
3.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 E
3.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 l
3.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* ~( h
4.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+ _( J
6 | w" {/ v; v# t; V3 k( C
ScibRegs.SCICCR.all = 0x0007;//1 位停止位,无奇偶校验,无回环测试,空闲线模式,8 位数据位
- E5 e* Q, D' F3 I% z$ f3 D0 C
9 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 m
ScibRegs.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# f
ScibRegs.SCIFFTX.bit.SCIFFENA=1;//使能 FIFO
$ F, H2 S/ h# z, v6 q5 ~9 k
ScibRegs.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 n
4.5 重新使能 SCI
6 M# A; \+ H, I$ j1 q* g3 w
7 G0 x3 z# n/ q" {1 o/ I2 Z
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 重启sci
9 C9 |+ |. P A9 r
# r) x4 {4 p6 \( o
4.6 配置 PIE
& [7 o. v% a' C2 E
: X6 Q# r5 f8 D
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能 PIE
1 |+ H. [, d) B) Z
EALLOW;
* S% {, W( a3 E; G
PieVectTable.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$ F
IER |= M_INT9;//使能 CPU 中断
2 P) Y, T; c- f
; {3 _" `* Z" X, z" i2 P- B# N s
4 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