|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 串口 # W# h, m4 c$ s7 O* W/ ^
% V8 d/ \: l4 U5 G M
4 W( V+ C! d. ?: l9 K4 g L* D
; }2 J( D. _9 }7 V( k# e/ \ 串行接口分为异步串行接口和同步串行接口两种。异步串行接口统称为通用异步收发器(UART)接口,同步串行接口有SPI和I2C等,同步串行接口除了包含数据线外,还包含时钟线。) N9 E8 |% N; m& [: s; x
本次实验中我们使用的是UART,也就是异步串行通信接口。UART的相关标准规定了接口的机械特性、电气特性和功能特性等,UART的电气特性标准包括 RS-232C、RS-422、RS-423和RS-485等,其中RS-232C是最常用的串行通信标准。RS-232C是数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准,其中DTE包括微机、微控制器和打印机等,DCE包括调制解调器MODEM、GSM模块和Wi-Fi模块灯。
( {5 i% h+ Z5 C. o3 B" l RS-232C机械特性规定使用25针D型连接器,后来简化为9针D型连接器。RS-232C的电气特性采用负逻辑:逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V,这个TTL的正逻辑(逻辑“1”表示高电平,逻辑“0”表示低电平)不同,因此通过RS-232C和TTL器件通信时必须进行电平转换。0 D0 y$ |( N. H2 [/ i
目前微控制器的UART接口采用的是TTL正逻辑,和TTL器件连接不需要电平转换。和采用负逻辑的计算机相连接时需要进行电平转换(我们一般使用USB转串模块)。: g$ a4 D$ O4 q3 \
CC3200包含两个可编程UART接口(UARTA0~1),主要特性如下:
: W: h8 h- g7 g3 a, y4 M a、可编程的波特率发生器,允许速度高达3Mbps;2 F+ Q9 x9 o# h {' P
b、独立的16*8发送和接口FIFO,减轻CPU中断处理负载;! G6 h3 a; q# c* [; e( P4 y! _
c、可编程FIFO长度,包括提供传统双缓冲接口的单字节操作;' N$ {, V+ w& Q) c/ k4 C
d、FIFO触发阈值包括1/8、1/4、1/2、3/4和7/8;) w/ t) \, P# }- c& e2 ]$ B
e、标准的异步通信起始、停止和奇偶校验位。
) h) s, V9 D! i0 ?, } CC3200的UART接口具有以下可编程串行接口特性:' N! f/ d+ S# w
a、可编程的5、6、7或8位数据;1 F+ ?$ A! p2 M$ ]" @
b、偶、奇或无校验生成/检测;% A- W% g) }4 X' c% T, F
c、1或2个停止位生成;6 y2 E) [1 a( D7 C8 z+ F
d、支持RTS和CTS调制解调器握手;
. L- @ Z% R; c! ~! o4 E2 B } e、标准的FIFO阈值中断和传输结束中断。/ B4 X" Y# A- [
CC3200的UART支持DMA,使用DMA可实现高效传输,UART具有单独的DMA发送和接收通道。支持当FIFO中有数据的单个请求接收和可编程FIFO阈值的突发请求接收以及FIFO中有空间的单个请求发送和可编程FIFO阈值的突发请求发送。9 |0 v6 w, s+ ]
1.1寄存器
9 c: g8 [# m2 p: o UARTDR为数据寄存器(也是FIFOs的接口)。
8 L3 {4 c' v9 E; [, k 在发送数据时,如果FIFO使能了,则写入该寄存器的数据会发送到发送FIFO 中。如果FIFO关闭,数据会被存储在发送保持寄存器中(发送FIFO最低一个字)。写该寄存器意味着通过串口发送。% c; ]- `1 i7 i3 R) L) K' o
在接收数据时,如果FIFO使能了,数据字节和4位状态位被发送到12位宽的接收FIFO中。如果FIFO关闭,数据字节和状态被存储在接收保持寄存器中(接收FIFO中的最低一个字)。可以通过读取该寄存器来获取接收数据。如图1.0.1所示为UARTDR寄存器,如图1.0.2为其位定义。! _$ N' R- \2 S2 `% |
' q" ~" {5 }% ?- j$ d, B1 o
8 r5 _( s) }" g4 g) g2 y, ?
图1.0.1 UARTDR寄存器
% P/ u/ e3 T6 G% z$ V7 e$ L
0 i$ ^; b6 n$ J) w# i
' K. d( a& N0 C& l( S& H$ F
图1.0.2 UARTDR寄存器位定义
4 c) `& j, _$ m7 U8 K$ f' e/ p UARTRSR_UARTECR是接收状态寄存器/错误清除寄存器。除了UARTDR寄存器之外,接收的状态位也可以通过UARTRSR寄存器获取。如果从该寄存器读取状态信息,则状态信息对应与在读取UARTRSR寄存器之前的UARTDR的状态信息。当有溢出条件发生时,状态位中的溢出标志位会立刻被置位。UARTRSR寄存器不能被写。写任何值到寄存器UARTECR中将会清除帧、校验、打断和溢出错误。复位会清零所有的位。如图1.0.3所示为UARTRSR_UARTECR寄存器,如图1.0.4为其位定义。9 c! I0 ?' ^& {* E
: _0 R5 F. v: \ [( J) h! Y3 W. I0 G
- c2 a0 u. ]6 J* [' Q: v 图1.0.3 UARTRSR_UARTECR寄存器/ o$ H" \" O. C3 F3 q6 H6 k2 {
: ?0 M$ ~1 e' @/ P' z0 G
- a y+ L2 C7 j2 y! t" ?+ [7 y
图1.0.4 UARTRSR_UARTECR寄存器位定义
- X+ ^, F7 `2 j# m2 s: d+ L: \4 J UARTFR为标志寄存器。在复位之后,TXFF、RXFF和BUSY标志位为0,TXFE 和RXFE位为1。RI和CTS位指示调制解调器的控制流和状态。这里需要注意的是,调制解调位只在UART1中有效,在UART0中是保留位。如图1.0.5所示为UARTFR,图1.0.6为其位定义。
u" O5 z7 _3 Y2 y) b
: V# k( J b$ E* b, T: l
( _, `4 W7 M& k h% J
图1.0.5 UARTFR寄存器
' I% y; a/ M+ m- _; U5 v* I5 J# \0 f* x! ], j- m% S) d% d0 S
6 N5 ?" X7 R& [) w4 a/ n6 Z
图1.0.6 UARTFR寄存器位定义
5 m0 y% O+ Z5 o$ O9 ] UARTIBRD寄存器是波特率除数的整数部分。复位之后所有的位被清零。最小值为1(当UARTIBRD为0时),此时UARTFBRD寄存器无效。当改变UARTIBRD 寄存器时,只有在当前的字节传输完成之后才生效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.7所示为UARTIBRD寄存器。, F3 t7 V/ \) c& S' v' l
- ?* B! Z5 ~0 Y4 U( v# K) e
' S- f! g( v- }0 a/ J 图1.0.7 UARTIBRD寄存器- J, _/ K: D) e6 k
UARTFBRD寄存器是波特率除数的小数部分。复位之后所有的位被清零。当修改UARTFBRD寄存器的值时,只有在当前字节发送或者接收完成之后才会有效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.8所示为UARTFBRD寄存器。
5 Q* A* C3 T* P T$ S' R( u) ^: n/ j
$ b+ M6 s: {0 e8 c7 R
1 m+ d7 D2 i6 a( x; k) ]$ @1 Z O" t
图1.0.8 UARTFBRD寄存器
4 B$ ~3 m, t. R6 R. P9 {" i UARTLCRH寄存器是线控制寄存器。该寄存器控制串口的数据长度、校验和停止位的选择。当更新波特率除数寄存器的时候,必须也要重写该寄存器。因为波特率除数寄存器的写选通信号和该寄存器是连接在一起的。如图1.0.9所示为UARTLCRH寄存器,图1.1.0为其位定义。
0 i1 Z* W5 b2 R' q! e" P- ?8 K" d5 L5 M# Z g1 j
. p; k: r( E+ v( c/ E 图1.0.9 UARTLCRH寄存器
$ W4 n; i: {) a8 T5 O- V2 Y: H9 h
/ E O7 Q7 o6 g: O
, Z' |/ ]8 i* ~; S! ?
图1.1.0 UARTLCRH寄存器位定义
" j& p2 H0 J: a0 H8 `; } UARTCTL是控制寄存器。在复位之后,除了发送和接收使能位之外,其它位都被清零。UARTEN位用于使能UART模块。在配置串口模块时必须将该位清零。如果在串口进行发送或者接收的操作时关闭串口模块功能,则在完成当前发送或者接收操作之后才关闭。如图1.1.1所示为UARTCTL寄存器,如图1.1.2为其位定义。
# a7 X0 F q: j( G; ^. ]* X$ L 注意:在UART使能的状态下,UARTCTL寄存器不能被改变,否则结果是无法预测的。修改UARTCTL寄存器时建议按照下面的操作进行:: i1 B" C2 H1 }1 J( Q
1、关闭UART;( E. I- B6 I# l
2、等待当前字节的发送或者接收操作完成;: o9 c5 M# d$ {! \" d5 b7 @! p7 n* ?
3、通过清零UARTLCRH寄存器中的FEN位来清除发送FIFO;
6 o v0 B; _- R2 w* V! j+ n 4、重新写控制寄存器;
3 [4 K5 Y0 I' X; r' i: [ 5、使能UART模块。! `' C" J* n; K7 e. h* t+ A
( z1 `6 R+ G! V( T" n
! w P9 P0 G# I+ D, [ 图1.1.1 UARTCTL寄存器8 i% y# x i. W; A
% O! W# \! r2 w1 ^/ m
( H2 f( h+ j6 D- F0 u4 E
图1.1.2 UARTCTL寄存器位定义: v* o( H- U3 j9 S# u. G
UARTIFLS是选择FIFO产生中断阈值的寄存器。可以使用该寄存器来定义FIFO的阈值,同时UARTRIS寄存器中的TXRIS和RXRIS位被触发。产生中断是基于一个发送操作超过阈值而不是等于阈值。也就是说FIFO中的数据超过规定的阈值之后才会产生中断。例如,如果接收的触发阈值设置为一般(8字节),那么在串口模块接收到第9个字节的时候才会产生中断。在复位之后,TXIFLSEL和RXIFLSEL位被配置,所以FIFOs在接收一半时触发中断。如图1.1.3所示为UARTRIS寄存器及其位定义。
; R4 z$ a# t+ o# u' n) [9 U; i
9 E0 `5 U+ E& w& V: O
' ]0 Y3 _$ T/ T9 U" j% k( q 图1.1.3 UARTIFLS及其位定义
8 Y6 j9 N( G' ~6 w( `& M$ u UARTIM是中断掩码置位/清零寄存器。读取该寄存器则获得当前中断的掩码值。进行置位时,对应的中断将被发送到中断控制器。清零操作则对应的中断不会被发送到中断控制器。如图1.1.4所示为UARTIM寄存器,如图1.1.5为其位定义。, h' \% S! n$ b) {& f% o6 J
6 Z2 n4 x9 {! d- [
: b$ N5 ?( M& O3 J& x3 t 图1.1.4 UARTIM寄存器
+ d, m! T! C1 ?" I4 h% |2 p) \5 T+ j6 m; k3 s3 q/ p
1 ^% `; a l$ z, K 图1.1.5 UARTIM寄存器位定义
3 \* h0 ^ R; A. |2 y4 f$ z+ Y UARTRIS是源中断状态寄存器。可以读取到当前中断源。写操作无效,如图1.1.6所示为UARTRIS寄存器,如图1.1.7为其位定义。
3 {) F& \5 ]' @! t0 l# z6 q0 h' A
8 h4 k: m4 C; c6 A3 J5 m
' K: s; P( [) \, F3 \( s. T9 ]) A: t4 a) E& _ 图1.1.6 UARTRIS寄存器' |7 f$ P1 C: e9 ^# }, E6 H- c
4 x# l) O# ?1 N% B" U' X5 R! R
( `" t2 d0 Y( _4 X! A
图1.1.7 UARTRIS寄存器位定义
9 W% l, ]3 j( `) r- x( m UARTMIS是中断掩码状态寄存器。读该寄存器获取对应中断的掩码值。写操作无效。如图1.1.8所示为UARTMIS寄存器,如图1.1.9为其位定义。0 L; ]0 m$ d' A0 [& Q
! h+ M! J4 |' b- L& k, `
q. q6 N5 G6 H4 y& z2 b5 ]" W
图1.1.8 UARTMIS寄存器
6 U2 A5 T2 K4 ^: {/ S
- _6 k: @& `- Z5 \ H1 k: i1 J
& j( q6 Z8 ~: o0 `3 x8 `
图1.1.9 UARTMIS寄存器位定义
9 {* _5 p# o" S R2 ~3 q0 G6 b" i UARTICR是中断清零寄存器。置位则对应的中断被清除(清除中断源寄存器和中断掩码寄存器中对应的位),清零操作无效。如图1.2.0所示是为UARTICR寄存器,如图1.2.1为其位定义。6 I# I9 ?2 ^# \( a" \
) z0 u2 ?# T1 @# x5 h
1 n5 G+ V- m5 a9 d 图1.2.0 UARTICR寄存器( [) f: \; p2 g1 Z4 B+ d9 {+ {4 Q
2 E# B! K* n2 M+ T, D+ i
; A. X- z1 A2 V( a+ Z- X* c* x 图1.2.1 UARTICR寄存器位定义
7 Y" S0 j; f- x' b UARTDMACTL是DMA控制寄存器。如图1.2.2所示为UARTDMACTL寄存器及其位定义。8 n% K& _3 v( a
' D& U+ k1 a; m2 _$ H4 V
6 s. l6 H/ A# o: p4 ]4 A- E
图1.2.2 UARTDMACTL寄存器及其位定义( o/ [" s( t: J
1.2实验现象
0 D# [/ X8 U3 z2 x4 R: w$ h 打开CC3200_Uart_Demo文件夹里的工程,该工程主要是把CC3200的UARTA0的波特率为115200bps,8位数据位,1个停止位,无奇偶校验位,如图1.2.3所示。7 b) W* L! h* [+ q+ ^, N
* E4 T3 x+ H* `3 ^* F
4 K3 g% O0 A$ ~2 j; Q3 U 图1.2.3 串口参数设置
6 y7 l3 p8 R, x! ?( O; L V/ ~ 当串口接收到数据后,把接收到的数据再通过串口发送出去,编译工程,打开Uniflash,把bin文件下载到CC3200板子上(具体步骤请参考GPIO小节)。: A1 @5 i9 C7 u' X' @4 z7 t: S
把“CH340G_VCC”和串口选择的第一个“RXD”和第二个“TXD”拨码开关均拨到“ON”。 P$ T- Q; R+ Z+ P2 j8 y
插上USB数据线接到电脑,打开串口助手,选择串口号,波特率设置为115200bps,按下板子的复位可见串口打印,如图1.2.4所示。
8 {2 Y; I6 X7 ~) W5 m! a' u0 b# E$ B
, c+ B& P" d$ F: G4 G3 t) O# g
图1.2.4 复位时串口打印4 v' m$ E# k: Q+ y7 J4 u
在发送框内输入疯壳的网址,点击发送,串口助手收到CC3200的回传,如图1.2.5所示。$ _7 l/ V, ?0 k7 e
! A' Z* } S; f2 o9 t
, }8 U# ?2 `2 B' X- g7 U
图1.2.5 串口助手收到回传* U' |& x" ]. O- b3 ^( |+ a# W6 }0 x
) U' m V3 i# N! J3 Y9 A/ u) ?+ P* C- x
! ? L2 V# T( f* g/ f9 X
文件下载请点击:
【4】串口.pdf
(2.72 MB, 下载次数: 0)
! Z. ^1 W1 Z: v* ?4 @; Q6 i6 m W
6 m9 T; P6 d8 ~. K; u1 k8 V! W! @ |
|