|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*在通信领域内,有两种数据通信方式:并行通信和串行通信*串口的数据传输是以串行方式进行的。串口在数据通信中,一次只传输一个比特的数据。0 L, E, Y$ n: x: X0 i& ^
*串行数据的传输速度用bps或波特率来描述+ B$ J: T, i. C8 w) C* Q3 U8 ~
7 m$ t f3 f% z( C【UART】
. m1 Y3 p) u$ D发送数据时,CPU将数据写入UART,UART按照一定的格式从一个管脚TxD上串口发出;# L- `! h! `7 |8 w5 S' K5 q8 k
接受数据时,UART检测另一个管脚RxD上的信号,将串行数据放在缓冲区中,CPU即可读。5 q/ ^% G0 Z* j% q
(UART之间是以全双工方式传输数据)+ ~- L5 o5 T/ b5 g% T0 s
. Q2 F/ [* g. R8 U' t8 B5 D
UART使用标准TTL/CMOS逻辑电平表示数据+ v# h& m4 R! Y( P
*0-5v,0-3.3v,0-2.5v或0-1.8v
0 o8 L: x% @3 K$ X*高电平表示1,低电平表示0
6 b* H4 i+ H1 M' _6 `& Y. U) O# @' x% }0 r
但是在外围电平中,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平。例如可使用电平转换芯片:MAX3232- q' |- U7 p! u! E* S
RS-232逻辑电平(反逻辑)
- I6 I! b) O2 Y2 ]+ B0 m, B+ U3-12V:表示0
3 ]3 [' E$ c* |$ U-3~-12V:表示1" ], C' L- C q
; f* @" r8 P* R }传输数据前的准备(约定好波特率和传输格式)
; C$ y% D: k6 J3 C4 R*有多少个数据位
# ^8 Q* A; s/ q' `$ }; v: a7 }+ N" m*是否使用校验位
8 ` f6 E0 P* L1 q/ j2 F1 ? ^- F*是奇校验还是偶校验9 O7 v, t) A' z P9 G
*有多少个停止位
y6 e% J0 m2 P0 d$ }【奇校验/偶校验】9 ~' v" b$ F* K% @: ^9 j
奇校验:就是让原有数据数列中,(包括你要加上的一位)1的个数为奇数 ;
$ v5 g: [$ T k" Q3 Z# r8 X. K1000110(0)你必须添0这样原来的3个1已经是奇数了所以添上0还是奇数 ;1 Q. d) Q9 M H
偶校验:就是让原有数据序列中,(包括你要加上的一位)1的个数为偶数 ;
: n' G6 \& H ]3 b0 j* k$ |1000110(1)你必须加1了这样原来的3个1已经是奇数了所以添上1还是奇数 ;* r v1 ?2 }% I( {: J: t
【停止位】
' r5 s, ?& d: w- l' I有效帧之间的空闲位 ;
; S$ y& z2 O0 Q9 Z0 W( r7 E* G) T% ^ O9 i3 G! U8 {5 _ q
【异步数据传输方式】
5 z5 ]) v; B$ n7 j! x# {
" E5 Q" D8 |; O
$ ?; R& F$ C& V, g发送数据时,SOC先讲数据写入发送FIFO中,然后UART会自动将FIFO的数据复制到发送移位器中,发送移位器将数据一位一位的发送到TxDn数据线上+ {3 ^0 y8 M" o9 [ v' a
接受数据时,接收移位器将RxDn数据线上的数据一位一位的接收进来,然后复制到接受FIFO中,SOC即可从中读取数据# U: s" ?, ?8 s0 O. {
% F* U: ?) L2 \0 K2 A5 t8 q
【硬件流控制】
& X, O) D7 d, \0 J6 C' ^2 n*如果打开串口硬件流程控制后,串口A只有在nCTS被(串口B的nRTS)激活后才能把数据发送出去 ;
7 f5 \- K8 O8 W" B$ Z8 h*当串口A可以接受数据时,激活nRTS,准备好接受数据! Y: T0 F4 t0 U" q+ Q3 {; d9 w
2 n3 h# N# s5 i0 q4 V, @) Q1 X" k6 p8 \. }# S+ j
【UBRDIVn】; T1 d$ K5 o: N ]% L1 @
*在UART模块中有三个UART波特率除数因子寄存器UBRDIV0,UBRDIV1,UBRDIV2,存储在波特率除数寄存器UBRDIVn中的值用于决定波特率
% p" Q4 D; _% WUBRDIVn = (int)(UART Clock / (buad rate*16))- 10 [" b% p0 Q& O# D1 M/ b' l, w
6 R+ _7 ]8 s0 Y0 Z8 B8 p6 H
【ULCON】
1 s7 E# l( o4 J C5 [
6 p H" D3 e3 b! F& a$ f
l. Z/ {" L) V' ~' h0 @7 J( s1 R% E【UCONn】(选择UART时钟源、设置UART中断方式)3 q& g1 o6 M( @4 I$ `
- v/ Z* Z: N. w, w. j) P
# I* @1 K2 h. y# R【UFCONn】(该寄存器用于设置是否使用FIFO,设置各个FIFO的触发深度)
7 j M& Z1 J% l4 k" G* n, M" W( ^9 s( u: j
【UTRSTATn寄存器】8 r7 K7 J! g& I5 I9 v: o* K0 P
(用来表明数据是否已经被发送完毕,是否已经接收数据)! i1 [" @& n# b0 d
" i5 D# b; ~$ }3 M5 b: n3 }, Q. o
! w, U( Z Z/ ~# f
【UTXHn/URXHn】
2 \: @) u" J# KUTXHn寄存器:SOC将数据写入这个寄存器,UART会将它保存到发送位移寄存器中,并自动发送出去
! l% z& t. W9 ~URXHn寄存器:当UART收到数据时,SOC读取这个寄存器,即可获得数据2 S& F6 Y; |4 o& ~1 Z
. E/ ?' S) a7 B) R6 q c
; W- ^4 r9 N0 x9 K
1 d8 q2 Y, Q# r" u
, d& x1 f( H7 A: b; P6 I8 }
m5 E) @# h1 L3 ]5 q: h5 g
" U2 l ]! y( Q- e" n$ K" G |
|