找回密码
 注册
关于网站域名变更的通知
查看: 318|回复: 5
打印 上一主题 下一主题

TMS320F28379D 之 SCI

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-10 10:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
8 p& R* z9 ?+ n
一、SCI 简介
4 s0 R% Q4 {% C7 {: S; A! n& ZSCI(Serial Communication InteRFace)意为"串行通信接口",是相对于并行通信的,是串行通信技术的一种总称,最早由 Motorola 公司提出的。它是一种通用异步通信接口 UART,与 MCS‐51 的异步通信功能基本相同。(以上内容来自百度)
3 M8 a7 q2 c& ]- `# w3 h7 S: ?- h7 b7 t
二、28379D 的 SCI 模块简介
' g7 o0 y; E+ e+ D0 O2.1 模块功能
8 e# g0 I+ W7 p9 F( l8 T2 c( e基本就是 UART,数据格式可编程。28398D 的 SCI 和其他 28 系列的产品基本一样,有两个增强功能。一个是发送和接收缓冲,FIFO。如果启用了发送 FIFO,就可以将要发送的字节先储存在发送 FIFO 里,待发送 FIFO 里的字节数达到设置的上限后,再一起发送出去。如果启用了接收 FIFO,就可以将接收的字节先存在接收 FIFO 里,待接收 FIFO 里的字节数达到设置的上限后,再产生中断来处理接收的数据。另一个是波特率自动检测功能,这个一般不用。
! ?5 \$ U5 G1 Q8 _
2 L6 T. ?, z+ ?9 O! y
* |0 i( a& D; [& l8 i7 l2.2 28379D 的 SCI 模块引脚
! n6 _, J" d3 h% F0 }5 q! H0 x28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID。每个 SCI 的发送引脚和接收引脚都有很多个,如下表:
8 O. f( ]$ Y" B  J5 a

4 K* c. I  _' U3 \# l( w+ n三、SCI 配置步骤: s8 t. I  o7 T- r$ E, d- y7 d& ?
3.1 配置 GPIO, t# \! V# ]* T7 ~. t( f1 N- [
配置相应的 GPIO 为 SCIx 的复用引脚。! C7 `4 A- i* {0 d

/ ?+ K* g0 f/ o8 @3 y
4 w" ~1 l6 O. j8 d6 {3.2 配置 SCI 的数据格式
7 W  ?, V: f4 I" o: J配置发送和接收的数据格式,一般是:1 位停止位,无奇偶校验,无回环,空闲线模式(两个对象之间通讯,如果是三个及以上,得用地址线模式),8 位数据位。% u9 t' G9 p. @7 ^# k5 k

7 q1 X3 d0 c" K- l$ Y2 z- z9 T' a# N  N$ T( ]" [
3.3 配置波特率
- I7 i5 m' d; ]. E  {" _配置波特率,不多说。. V4 Y! g- y4 y8 u
) t& S$ ~) |3 U5 ^0 G' n, s8 p

6 A7 J3 X9 J  o7 q: G5 _+ i7 D3.4 配置 FIFO2 G: ]7 ^5 j) q* a* G
首先得使能 FIFO,然后根据需要,进行配置。比如使能接收 FIFO 中断,设置 FIFO 的级数,基本的就这些。还可以配置波特率自检的一些设置,不过一般不用。. c2 h# |0 k- }6 X

0 S" w/ k/ M/ q+ T+ T% @1 U4 M5 X; Q4 \. [8 N
3.5 使能 SCI5 b. ?% ^4 J, m0 P8 s
复位一些标志,比如 SCICTL1 寄存器的 SWRESET,必须被置 1,等等。) V. t7 j5 d8 Z/ s( |) L
+ E, e8 {2 G( U9 a# f6 Q4 O

+ B% H3 i$ u$ _  I3.6 配置 PIE% D& _3 @3 G2 m/ \9 ]
首先使能 PIE,然后修改 PIE 向量表,然后使能对应的 PIE,以及 CPU 中断。+ c/ A" ^6 ~6 @" z8 e+ z; w: e, q

7 ^( {5 f0 X/ C9 W% W+ x. E" ]9 m5 m# v. O% b9 E
四、代码示例
9 v/ D, d7 b. s& [2 k$ R, u/ Q示例使用了 SCIB,引脚使用 GPIO18 为 Tx,GPIO19 为 Rx。3 o) v1 p/ }: ~  _& F  `9 D
4.1 配置 GPIO  E+ Z( N# y2 J, s3 S2 j7 v/ G
" L0 m" H( b( j- R) c3 N
EALLOW;6 P% F% U$ x% V( ]2 t( m
    GpioCtrlRegs.GPAPUD.bit.GPIO18=0;//开启上拉电阻
& B% H) W' {/ p9 `% Y8 d* F- p    GpioCtrlRegs.GPAPUD.bit.GPIO19=0;//开启上拉电阻  P- z8 J) v, ^6 {% U% |' ~/ S
    GpioCtrlRegs.GPADIR.bit.GPIO19=0;& n# f# F9 v4 l& m+ z
    GpioCtrlRegs.GPADIR.bit.GPIO18=1;7 e0 P7 S4 v* g1 [1 v
    GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0;5 Z& @8 `9 l, C* U  _
    GpioCtrlRegs.GPAGMUX2.bit.GPIO19=0;
% j, m8 F+ I" b9 x$ M) O# r1 T( {    GpioCtrlRegs.GPAMUX2.bit.GPIO18=2;//复用为 SCIB 的输出- h& {: p" g7 |" R1 i* D# _
    GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//复用为 SCIB 的输入2 e- t* T: {# B$ _  b  B6 ?" c
EDIS;
2 M( y* C7 l& f) U- ]5 O& f, Q: Y
- N4 [' o6 ~8 {2 C4.2 配置数据格式
, l+ n4 J2 z$ P2 k+ g+ w- f5 G* g' q4 W
- j; _5 Y+ y/ `0 H  q  P9 `- kScibRegs.SCICCR.all = 0x0007;//1 位停止位,无奇偶校验,无回环测试,空闲线模式,8 位数据位
2 f* r; N" |2 A2 {6 }0 `5 Q: M
1 {7 d- @9 w/ U! R6 R+ g4.3 配置波特率
9 U! o( Z: {7 Y5 v
" @+ m) t7 s. `6 T9 N) iScibRegs.SCIHBAUD.bit.BAUD=0x0000;//波特率 115200
# q$ F) D% Z1 C/ S" b2 X  oScibRegs.SCILBAUD.bit.BAUD=0x0036;//波特率 115200
# d7 w2 U; Q8 |& }
; @# S: h8 R& S8 I% g( G8 c4 ]4.4 配置 FIFO4 z) T5 w' F* j  g# x+ I; F

% P# A6 y4 h+ Z4 zScibRegs.SCIFFTX.bit.SCIFFENA=1;//使能 FIFO: p) e9 t! G. U" H: s  A
ScibRegs.SCIFFRX.bit.RXFFIENA = 1;//使能 FIFO 接收中断
4 ?- }9 x; z. K/ z0 h% IScibRegs.SCIFFRX.bit.RXFFIL=1;//FIFO 接收字节 1% `9 L( H. P5 H( v0 ]. N- e
ScibRegs.SCIFFCT.all = 0x0;
% e3 R# t, F9 S
) m, ]& y- e5 C% v$ f; B0 V4.5 重新使能 SCI2 Z. T% Q  T& K2 q. H; K/ t, [$ _
! C+ i$ j' Z, a, _
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 重启sci5 _0 e! g  B4 Q1 `7 o- m: f/ k
6 `- W9 J+ K/ k# x
4.6 配置 PIE
& {1 y* j% z" R: k3 O6 S6 R8 b& q. w+ {2 l, @' Q* t. s( g, g. P
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能 PIE
3 N1 o; C4 s5 C. I7 `EALLOW;; e, K! t& f9 ^* o7 W' Z& g
PieVectTable.SCIB_RX_INT=&ScibInterrupt;//修改中断向量表
' ~& l) M% g' f! jEDIS;
  \' S5 u  ]/ L8 s! ?; i1 ]PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能 PIE 中断
6 c2 ]8 L7 `9 z8 c$ BIER |= M_INT9;//使能 CPU 中断8 U; s% c" o  i- L; X
# ]. j% r3 H* }+ y) s4 o/ E  ~9 e
3 A% R7 |, |/ O2 X$ v
4.7 接收中断函数 ScibInterrupt 如下:
8 y4 ?3 q6 H1 B5 A2 _% k8 S
! ?# i5 S( u. n3 p* hinterrupt void ScibInterrupt(void)
, `+ ]+ P3 I& z+ x2 ]6 L' _: n{/ o: l/ o; j7 r
    int i=0,data;
  G& n' N7 Q1 \0 n4 Q    for(i=0;i<ScibLegnth;i++)$ `5 z6 F- O3 ]$ Y! j" u5 q, a" D9 K8 R
    {
* B8 L+ W7 ]& h4 j& I5 h        data=ScibRegs.SCIRXBUF.bit.SAR;//接收的数据
( [* u: B" F: L' F, q1 j" k/ B    }
. d% h$ w& ?/ P5 R    ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // 清接收中断标志" S" B) o' T5 P: B4 M7 B
    PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;// 清接收中断标志" T& c* Y8 X2 c" _7 U0 r/ F
}/ A/ M7 K. F0 j- e! l: g8 t9 q
4 J( [; J7 A( j: F  w+ E9 l4 ]

& ?' k/ X# D' b6 N9 k1 U4.8 发射函数* X: ~8 x( l) i& y1 ~

" x* @& g* c1 n+ b$ I
: K3 N% k) i2 H$ qint ScibSend(int data)
* `" d& l& ~) w6 V! G3 k- q  l{
' a# l& n: Y* A" G, i* a     while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}) b* I- i' ?2 q4 Z& w& g
     ScibRegs.SCITXBUF.bit.TXDT=0x06;- m4 S9 v8 `" h  b" `4 }
     return 0;" [- D% C8 V, a& I- o5 K( O
}0 e" p6 z  z, q

6 ?6 ]" x( {2 X& r* @! B, g6 K8 K% h- w' G9 W

该用户从未签到

2#
发表于 2021-12-10 11:10 | 只看该作者
28398D 的 SCI 和其他 28 系列的产品基本一样,有两个增强功能

该用户从未签到

3#
发表于 2021-12-10 11:10 | 只看该作者
首先得使能 FIFO,然后根据需要,进行配置

该用户从未签到

4#
发表于 2021-12-10 11:11 | 只看该作者
28379D 有 4 个 SCI,即 SCIA,SCIB,SCIC,SCID

该用户从未签到

5#
发表于 2021-12-10 11:11 | 只看该作者
配置相应的 GPIO 为 SCIx 的复用引脚

该用户从未签到

6#
发表于 2021-12-10 11:12 | 只看该作者
很实用的文章
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 23:27 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表