|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*在通信领域内,有两种数据通信方式:并行通信和串行通信*串口的数据传输是以串行方式进行的。串口在数据通信中,一次只传输一个比特的数据。- H6 G; U3 I0 P: e" E6 @" H) B
*串行数据的传输速度用bps或波特率来描述! G4 E) ~* D- t( i! x2 T. N$ p' \
8 v# S0 e& v7 U# b【UART】
~1 Q; Q! Q: ]4 W8 q2 L发送数据时,CPU将数据写入UART,UART按照一定的格式从一个管脚TxD上串口发出;
' B3 Q) U% G' H: N# W接受数据时,UART检测另一个管脚RxD上的信号,将串行数据放在缓冲区中,CPU即可读。
' \% N4 U/ c) y6 [: C+ @(UART之间是以全双工方式传输数据)6 b. O) p: N* Z# G
+ f1 s; i6 s0 z' B6 _6 N. Y) sUART使用标准TTL/CMOS逻辑电平表示数据
8 J6 S7 c7 Y- j" ^% n$ E*0-5v,0-3.3v,0-2.5v或0-1.8v* |, A; J& ~ d- @* Q# e+ l
*高电平表示1,低电平表示0
0 Z5 i* O0 G3 q1 R- _& @5 B. s+ I; p7 E7 J6 X" T6 }
但是在外围电平中,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平。例如可使用电平转换芯片:MAX3232, U; o( T" a4 U" ~# d
RS-232逻辑电平(反逻辑). Y3 o* s- p0 S/ q4 Q- u0 S3 }* }
3-12V:表示0
3 B0 v0 f A( j* ~# U-3~-12V:表示16 K9 r# c$ E3 L: d
9 f' V) a: h& z传输数据前的准备(约定好波特率和传输格式)
# f3 @4 B5 O3 v/ A* u*有多少个数据位3 ]& a9 s& b) @$ x8 \+ h5 J& W
*是否使用校验位
9 X, b2 w" B: S*是奇校验还是偶校验
0 {. S0 }1 S; y7 F*有多少个停止位) H0 Z/ ^1 S3 g$ j* |3 m
【奇校验/偶校验】% Y# }: [, C0 k8 u P
奇校验:就是让原有数据数列中,(包括你要加上的一位)1的个数为奇数 ;
7 U* ^+ I- D" _ D7 K9 d, J1000110(0)你必须添0这样原来的3个1已经是奇数了所以添上0还是奇数 ;. m# b* Z) L0 G# N3 f
偶校验:就是让原有数据序列中,(包括你要加上的一位)1的个数为偶数 ;
- O6 Q! C$ q m' u0 r7 b T1000110(1)你必须加1了这样原来的3个1已经是奇数了所以添上1还是奇数 ;
( `5 q2 Z! ^1 m2 ~4 n! w! s7 H【停止位】3 a" G: l) A! W* _" K! W
有效帧之间的空闲位 ;8 h( i* [4 m7 \
) g/ ?5 b$ F. ?; b8 e7 I
【异步数据传输方式】
4 @) |& ?* ^8 a) H# e& j" \' F3 `8 \. x4 G9 u4 V) W7 h. L
( `6 }% \0 B: T2 R2 m% v& A+ x
发送数据时,SOC先讲数据写入发送FIFO中,然后UART会自动将FIFO的数据复制到发送移位器中,发送移位器将数据一位一位的发送到TxDn数据线上: ]0 f9 D7 k# e7 E% B
接受数据时,接收移位器将RxDn数据线上的数据一位一位的接收进来,然后复制到接受FIFO中,SOC即可从中读取数据. A5 b2 t) Q' B' N2 A/ |& b
& k4 Z- n, Y8 j! ~$ ^$ M9 r【硬件流控制】
7 k3 f# ?% e/ c) l6 z, Q, O*如果打开串口硬件流程控制后,串口A只有在nCTS被(串口B的nRTS)激活后才能把数据发送出去 ;, P! T! {; E' {
*当串口A可以接受数据时,激活nRTS,准备好接受数据
8 p; k8 ^5 m3 z. i* Z0 H; T* i2 M0 H& p+ ^! r# [
7 S- |5 F5 o% g& a8 d: B
【UBRDIVn】3 v4 \# @: P A
*在UART模块中有三个UART波特率除数因子寄存器UBRDIV0,UBRDIV1,UBRDIV2,存储在波特率除数寄存器UBRDIVn中的值用于决定波特率
& u, L- l9 b' C" s9 A8 t# zUBRDIVn = (int)(UART Clock / (buad rate*16))- 1
5 S; F2 l" c+ @8 ~% H! F8 `
v1 Y2 ]/ W- u2 D; A' k8 y【ULCON】; j1 V1 U8 \ g3 V
3 \% }# N* Y7 H I! X
' T4 _" T) f) D& J【UCONn】(选择UART时钟源、设置UART中断方式)9 F- F9 E6 O p [7 d$ X4 A6 ~
9 s8 R/ v* B' ?3 K5 G! U8 c' n$ b/ `
【UFCONn】(该寄存器用于设置是否使用FIFO,设置各个FIFO的触发深度) g% i! K5 S* [% w
4 G; E: j* F1 [, L9 H
【UTRSTATn寄存器】" n' O; B1 L. P9 K$ ~
(用来表明数据是否已经被发送完毕,是否已经接收数据)
( A9 d6 m7 @! B7 T7 | g" K
8 n2 w3 v3 S& B2 ]. L/ l1 v5 X |" x" X2 n% z, O
【UTXHn/URXHn】
, ^4 N, G: t" v$ b6 SUTXHn寄存器:SOC将数据写入这个寄存器,UART会将它保存到发送位移寄存器中,并自动发送出去8 [- x. d8 F0 |* y" q
URXHn寄存器:当UART收到数据时,SOC读取这个寄存器,即可获得数据
1 j9 z4 d& C' @' X- Q5 `
: f9 K1 y }* z# W( b% I2 B1 ^
3 Y6 r) C! c, l, n" ^- C! @( d6 r' x7 ?" K
! {) `* ]3 {( h. }- K# l0 \1 R" s* ]: M$ j3 Z; x$ K/ }
! F5 ~& d3 f; j |
|