|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 串口 $ y% \: {- F. l
& [5 A7 ?, L2 v ^8 E
+ k9 k1 w: N: h; z! V
6 [9 b4 N, ]: m: y: e& P4 X4 o1 [
串行接口分为异步串行接口和同步串行接口两种。异步串行接口统称为通用异步收发器(UART)接口,同步串行接口有SPI和I2C等,同步串行接口除了包含数据线外,还包含时钟线。
# ^! f8 W& P0 s T* v4 G) G2 \2 f 本次实验中我们使用的是UART,也就是异步串行通信接口。UART的相关标准规定了接口的机械特性、电气特性和功能特性等,UART的电气特性标准包括 RS-232C、RS-422、RS-423和RS-485等,其中RS-232C是最常用的串行通信标准。RS-232C是数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准,其中DTE包括微机、微控制器和打印机等,DCE包括调制解调器MODEM、GSM模块和Wi-Fi模块灯。 ! h6 w8 G5 D5 x0 s I& y# g
RS-232C机械特性规定使用25针D型连接器,后来简化为9针D型连接器。RS-232C的电气特性采用负逻辑:逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V,这个TTL的正逻辑(逻辑“1”表示高电平,逻辑“0”表示低电平)不同,因此通过RS-232C和TTL器件通信时必须进行电平转换。8 o" [, l+ n4 R! |8 a; {
目前微控制器的UART接口采用的是TTL正逻辑,和TTL器件连接不需要电平转换。和采用负逻辑的计算机相连接时需要进行电平转换(我们一般使用USB转串模块)。$ c" R$ t, p. k# M
CC3200包含两个可编程UART接口(UARTA0~1),主要特性如下:
+ @7 |5 P6 f% y. j a、可编程的波特率发生器,允许速度高达3Mbps;5 w9 H9 h- `: @" i/ z% n5 B
b、独立的16*8发送和接口FIFO,减轻CPU中断处理负载;
5 j A6 q# P4 ~1 n' `' g' r" N' ~ c、可编程FIFO长度,包括提供传统双缓冲接口的单字节操作;
# C% J& D" j6 D* h7 d d、FIFO触发阈值包括1/8、1/4、1/2、3/4和7/8;
e- d T5 }" G- T e、标准的异步通信起始、停止和奇偶校验位。* E# g% o. ^/ }) J
CC3200的UART接口具有以下可编程串行接口特性:. ?+ {& m* T0 @, j @
a、可编程的5、6、7或8位数据;+ ^" m0 m! [ t2 C- Z! p Y
b、偶、奇或无校验生成/检测;
) J! O- }2 O& c% V. Z9 o2 [ c、1或2个停止位生成;8 G+ ?8 {% {) k
d、支持RTS和CTS调制解调器握手;
% n2 t* }' P/ Y$ D, M* t e、标准的FIFO阈值中断和传输结束中断。
/ V) U' W7 f* h, Q3 ^. l7 J1 r CC3200的UART支持DMA,使用DMA可实现高效传输,UART具有单独的DMA发送和接收通道。支持当FIFO中有数据的单个请求接收和可编程FIFO阈值的突发请求接收以及FIFO中有空间的单个请求发送和可编程FIFO阈值的突发请求发送。
6 y4 P q! P6 \: G$ S; c 1.1寄存器
3 u3 g1 @" R5 P! t8 R9 p UARTDR为数据寄存器(也是FIFOs的接口)。
9 R1 D' s! C- }$ Q% U+ X9 d0 ? 在发送数据时,如果FIFO使能了,则写入该寄存器的数据会发送到发送FIFO 中。如果FIFO关闭,数据会被存储在发送保持寄存器中(发送FIFO最低一个字)。写该寄存器意味着通过串口发送。
. g; T% c7 J: z0 {3 |$ _ b 在接收数据时,如果FIFO使能了,数据字节和4位状态位被发送到12位宽的接收FIFO中。如果FIFO关闭,数据字节和状态被存储在接收保持寄存器中(接收FIFO中的最低一个字)。可以通过读取该寄存器来获取接收数据。如图1.0.1所示为UARTDR寄存器,如图1.0.2为其位定义。
$ t. i. k, P' r7 ]5 h3 `/ N! K
7 q9 z* \# X. ?% ?) C
. ?* r$ U. C+ N( a9 p, ]
图1.0.1 UARTDR寄存器. y) t# a( ?* u9 t+ U' B- E% o
! q7 x A7 k. J
1 g+ I, h) }) i/ L9 S 图1.0.2 UARTDR寄存器位定义' k9 A* k! G1 E3 ^" `9 C0 E! X
UARTRSR_UARTECR是接收状态寄存器/错误清除寄存器。除了UARTDR寄存器之外,接收的状态位也可以通过UARTRSR寄存器获取。如果从该寄存器读取状态信息,则状态信息对应与在读取UARTRSR寄存器之前的UARTDR的状态信息。当有溢出条件发生时,状态位中的溢出标志位会立刻被置位。UARTRSR寄存器不能被写。写任何值到寄存器UARTECR中将会清除帧、校验、打断和溢出错误。复位会清零所有的位。如图1.0.3所示为UARTRSR_UARTECR寄存器,如图1.0.4为其位定义。! h/ m. B0 s4 g
3 h; h9 v# o Y0 N3 m
. g4 G' m# e: m% Y' P: g
图1.0.3 UARTRSR_UARTECR寄存器- p6 x y1 r5 Y6 F( W
% h% z3 I5 \+ l3 `7 p
0 ?7 X% I j: ]# ^! v 图1.0.4 UARTRSR_UARTECR寄存器位定义& \2 J# z* a7 X8 j
UARTFR为标志寄存器。在复位之后,TXFF、RXFF和BUSY标志位为0,TXFE 和RXFE位为1。RI和CTS位指示调制解调器的控制流和状态。这里需要注意的是,调制解调位只在UART1中有效,在UART0中是保留位。如图1.0.5所示为UARTFR,图1.0.6为其位定义。
# K7 K% U5 K. u v0 V
4 Y9 w4 U2 I9 ?
2 s2 P: p- ^1 m) l8 T
图1.0.5 UARTFR寄存器
7 P1 Y2 k' v& r+ k8 _: E! s/ S* E# k _# r2 H+ K5 j
1 L8 O" Z0 m7 ~- \ 图1.0.6 UARTFR寄存器位定义! A& x' ^, d! s
UARTIBRD寄存器是波特率除数的整数部分。复位之后所有的位被清零。最小值为1(当UARTIBRD为0时),此时UARTFBRD寄存器无效。当改变UARTIBRD 寄存器时,只有在当前的字节传输完成之后才生效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.7所示为UARTIBRD寄存器。
# c: u% a$ }4 N, n2 g/ P. q* M1 }! M4 h# W
% S5 Q; o" x, R 图1.0.7 UARTIBRD寄存器3 G# o( [. E% S- P8 ^! l
UARTFBRD寄存器是波特率除数的小数部分。复位之后所有的位被清零。当修改UARTFBRD寄存器的值时,只有在当前字节发送或者接收完成之后才会有效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.8所示为UARTFBRD寄存器。" X0 @ o$ ~! l0 Z. E) u: Y
' h, V1 O, }: T
( i$ ?3 F' \; q2 I5 \0 i7 m- p 图1.0.8 UARTFBRD寄存器
; `3 g2 L6 H4 h4 y% w$ ]2 ]/ G UARTLCRH寄存器是线控制寄存器。该寄存器控制串口的数据长度、校验和停止位的选择。当更新波特率除数寄存器的时候,必须也要重写该寄存器。因为波特率除数寄存器的写选通信号和该寄存器是连接在一起的。如图1.0.9所示为UARTLCRH寄存器,图1.1.0为其位定义。
8 K0 A9 O ~" Z; I+ c4 O" I7 `. E
+ |$ m7 [) \& g# Z. `! u 图1.0.9 UARTLCRH寄存器) h0 r' t/ C% }( A- z5 g
+ s0 P! X: r. D2 U2 C. E- ~9 {1 n* q
7 o. ~; p3 v w/ U
% i* [9 o" O; S* p, d' M, A _ 图1.1.0 UARTLCRH寄存器位定义
P5 \0 g/ z4 \# ^$ ?0 z/ x( u UARTCTL是控制寄存器。在复位之后,除了发送和接收使能位之外,其它位都被清零。UARTEN位用于使能UART模块。在配置串口模块时必须将该位清零。如果在串口进行发送或者接收的操作时关闭串口模块功能,则在完成当前发送或者接收操作之后才关闭。如图1.1.1所示为UARTCTL寄存器,如图1.1.2为其位定义。( F, G- k9 l0 y" y/ x# H0 w
注意:在UART使能的状态下,UARTCTL寄存器不能被改变,否则结果是无法预测的。修改UARTCTL寄存器时建议按照下面的操作进行:9 B1 W7 X' Q8 |9 @8 s' X1 {
1、关闭UART;
& C3 J3 Z( f" W0 k% f$ j3 z; e. q 2、等待当前字节的发送或者接收操作完成;4 R: d2 Y0 X! i7 g
3、通过清零UARTLCRH寄存器中的FEN位来清除发送FIFO;
9 f8 T7 P# P# f- E 4、重新写控制寄存器;- o; Z0 Z" N* S2 v6 j
5、使能UART模块。+ a7 h! s7 m, W1 T: p/ p" I8 I
' b, M, ^ T- c1 v3 R, Q
% [* Z' e; o0 f" A4 g
图1.1.1 UARTCTL寄存器, R) p) c4 }" z% K) p* Q
' e2 B% b' v6 o6 t: m0 b
3 Q" @5 I t6 Z/ ^ 图1.1.2 UARTCTL寄存器位定义. m! x# x( B/ w% q, \1 U; S
UARTIFLS是选择FIFO产生中断阈值的寄存器。可以使用该寄存器来定义FIFO的阈值,同时UARTRIS寄存器中的TXRIS和RXRIS位被触发。产生中断是基于一个发送操作超过阈值而不是等于阈值。也就是说FIFO中的数据超过规定的阈值之后才会产生中断。例如,如果接收的触发阈值设置为一般(8字节),那么在串口模块接收到第9个字节的时候才会产生中断。在复位之后,TXIFLSEL和RXIFLSEL位被配置,所以FIFOs在接收一半时触发中断。如图1.1.3所示为UARTRIS寄存器及其位定义。% K& R5 J- z- ~9 d$ |
( K5 c: T+ j0 z* D2 B
& J' A( _; w) E 图1.1.3 UARTIFLS及其位定义
& i" i$ ^. e+ n1 w% Z* r UARTIM是中断掩码置位/清零寄存器。读取该寄存器则获得当前中断的掩码值。进行置位时,对应的中断将被发送到中断控制器。清零操作则对应的中断不会被发送到中断控制器。如图1.1.4所示为UARTIM寄存器,如图1.1.5为其位定义。. v; ?, s( ?+ N0 y% v
6 ]$ _$ }+ X5 o* z/ h8 ]0 n" E9 S& C
1 i5 U6 @+ b1 s) G1 u. O/ j 图1.1.4 UARTIM寄存器1 X( |- t$ p; z- g, _: b
9 P! Y: w! k5 \5 K2 f& L+ E, c
* W9 M/ m- }8 ^2 H5 `5 Y/ Y
图1.1.5 UARTIM寄存器位定义" p# w$ N' A' [8 W1 y
UARTRIS是源中断状态寄存器。可以读取到当前中断源。写操作无效,如图1.1.6所示为UARTRIS寄存器,如图1.1.7为其位定义。
# h4 u2 B6 w ]# {' W8 }
k y4 ?# N6 ]$ G3 L! m
# i; x/ E2 M2 Z; a3 r# H$ B
图1.1.6 UARTRIS寄存器
- i1 |7 N; q# m) M
/ G" R. H* D o
9 T/ U1 f( j9 c 图1.1.7 UARTRIS寄存器位定义
9 A* O' U5 P) a UARTMIS是中断掩码状态寄存器。读该寄存器获取对应中断的掩码值。写操作无效。如图1.1.8所示为UARTMIS寄存器,如图1.1.9为其位定义。
. Q( {, x6 f( n$ A0 y+ y6 G. A
5 t& i& o0 \- P. _1 h0 z
% q( N! d, F U 图1.1.8 UARTMIS寄存器
2 u3 b- P. A' b+ |: T% \& g9 f6 ~& @
5 M1 T7 p& y. F; A, O0 h7 S
图1.1.9 UARTMIS寄存器位定义( l3 `. o) \5 v: |
UARTICR是中断清零寄存器。置位则对应的中断被清除(清除中断源寄存器和中断掩码寄存器中对应的位),清零操作无效。如图1.2.0所示是为UARTICR寄存器,如图1.2.1为其位定义。& \) G! m& _0 ~, S6 _& t
& |: A8 E# r& }; p9 C7 J
' d4 N* T2 U& p0 p/ i$ B
图1.2.0 UARTICR寄存器' O+ z% w; t g( y# S G4 ?. z
9 ^' U: z* T0 ]8 n% [: [" b
$ |! d; {! [7 Z. u9 w 图1.2.1 UARTICR寄存器位定义
k! D2 l, v0 V9 q l UARTDMACTL是DMA控制寄存器。如图1.2.2所示为UARTDMACTL寄存器及其位定义。) [. @3 n) D4 @! ~6 e! Z
1 \, `( J6 |7 O
) g' ^( [$ i6 c* W8 F 图1.2.2 UARTDMACTL寄存器及其位定义
' Y/ M2 a( }3 ` 1.2实验现象
3 I5 s1 A7 |. u, p% y 打开CC3200_Uart_Demo文件夹里的工程,该工程主要是把CC3200的UARTA0的波特率为115200bps,8位数据位,1个停止位,无奇偶校验位,如图1.2.3所示。. u/ x C+ `+ k9 K$ j9 {
0 Z9 Z) G6 o. u! e9 _) g* P
8 ~% c7 B5 D2 F
图1.2.3 串口参数设置& x9 s: f; ?! S8 s( k# @
当串口接收到数据后,把接收到的数据再通过串口发送出去,编译工程,打开Uniflash,把bin文件下载到CC3200板子上(具体步骤请参考GPIO小节)。% q; j6 Z0 r9 A6 G3 D
把“CH340G_VCC”和串口选择的第一个“RXD”和第二个“TXD”拨码开关均拨到“ON”。
7 w& t3 p9 d' ^2 v! Q 插上USB数据线接到电脑,打开串口助手,选择串口号,波特率设置为115200bps,按下板子的复位可见串口打印,如图1.2.4所示。
( v* h6 q7 t( a6 s Q$ O5 x" ]0 n( x. [$ x
9 x3 k/ Y* k4 r4 Y 图1.2.4 复位时串口打印
+ A' H: i5 N9 T8 s 在发送框内输入疯壳的网址,点击发送,串口助手收到CC3200的回传,如图1.2.5所示。
7 \& `4 s1 ^" S, {/ y5 K$ E& V# W' E1 l8 }5 S( ^5 e g7 c: j
2 @, m$ e D% A9 C, n1 @5 k1 e 图1.2.5 串口助手收到回传
, p5 Z) r! U9 r C$ N1 J; t; c% _/ O5 {
( a+ N* l2 k; S( B) B
4 a& L6 ]* D* P8 V' x( X" i: E
文件下载请点击:
【4】串口.pdf
(2.72 MB, 下载次数: 0)
9 W1 l$ P3 X; Y5 L% l1 b% E" [9 x+ o* n& ]8 T2 C- n0 F
|
|