|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*在通信领域内,有两种数据通信方式:并行通信和串行通信*串口的数据传输是以串行方式进行的。串口在数据通信中,一次只传输一个比特的数据。
; Y! j, p/ r0 \: s) f7 c: ?# M) D+ d*串行数据的传输速度用bps或波特率来描述6 M/ c8 l8 W4 M( I H- z1 L
% Q4 J; k, R* g. T) e* S
【UART】
$ b! V [7 R# B* a发送数据时,CPU将数据写入UART,UART按照一定的格式从一个管脚TxD上串口发出;5 Y0 `+ _: D1 l/ w1 A5 A- O2 e* J
接受数据时,UART检测另一个管脚RxD上的信号,将串行数据放在缓冲区中,CPU即可读。
! @) z* e0 F9 R% s' M(UART之间是以全双工方式传输数据)7 D& e k, A& g( s. h$ y
3 n6 j1 c) |# `
UART使用标准TTL/CMOS逻辑电平表示数据
& ~% Z8 B6 E9 j5 J*0-5v,0-3.3v,0-2.5v或0-1.8v' Q# ]: [7 j+ m& d5 I1 m
*高电平表示1,低电平表示0
/ ^) _! G. g' s2 L* t# I/ W M
6 k) R; R9 i8 |, a但是在外围电平中,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平。例如可使用电平转换芯片:MAX3232
! Y) M$ S& ?2 {RS-232逻辑电平(反逻辑)
/ P- L8 C6 P( m, W/ ?4 s3 F% G3-12V:表示0" t# z3 U& d g5 i/ V$ H9 `
-3~-12V:表示19 O+ ^' U8 F0 X2 `
2 M6 F% k9 P z' v3 @, L" \4 d传输数据前的准备(约定好波特率和传输格式)+ G9 g4 C& ?* b0 [5 [
*有多少个数据位! {5 r% N& P- R$ s
*是否使用校验位
8 r. S+ u" I3 m0 k2 d*是奇校验还是偶校验! O0 C) k. x& j6 q0 L; N
*有多少个停止位 V0 K6 f3 `2 a
【奇校验/偶校验】0 ~' Q- Q% B) Q8 c d! ^: Q1 O
奇校验:就是让原有数据数列中,(包括你要加上的一位)1的个数为奇数 ;
9 ~& k. [$ X" i: H1000110(0)你必须添0这样原来的3个1已经是奇数了所以添上0还是奇数 ;$ @5 `( p {$ k# t* \! }
偶校验:就是让原有数据序列中,(包括你要加上的一位)1的个数为偶数 ;8 p; V8 v$ _: t* b3 m
1000110(1)你必须加1了这样原来的3个1已经是奇数了所以添上1还是奇数 ;
* O# u( I( O* z. G) H8 A R/ S+ f【停止位】
, u, _; h; l' }1 E1 G) l) X' o有效帧之间的空闲位 ;
5 I* I/ P9 A; K ] A) F- _' h$ P z1 h1 a
【异步数据传输方式】
* ~! G0 E) S; Y$ Y, y, s {0 N9 a. n
- Z3 ^8 A3 A, u0 e y- y
发送数据时,SOC先讲数据写入发送FIFO中,然后UART会自动将FIFO的数据复制到发送移位器中,发送移位器将数据一位一位的发送到TxDn数据线上
) Q+ @! r5 {4 p; i接受数据时,接收移位器将RxDn数据线上的数据一位一位的接收进来,然后复制到接受FIFO中,SOC即可从中读取数据( c, b% E/ p' v$ f2 ~2 I% ]
7 l1 K: p: z& Q【硬件流控制】
( M" w4 f ?8 r+ i1 P6 y; _*如果打开串口硬件流程控制后,串口A只有在nCTS被(串口B的nRTS)激活后才能把数据发送出去 ;
) g. r- k1 Q. r' r; L# {2 S*当串口A可以接受数据时,激活nRTS,准备好接受数据. u* Q/ ?5 l- O0 o. \! u2 w
& h0 b8 A( j$ J% _& e5 }
1 i# K6 y( k+ J1 E6 ^' e
【UBRDIVn】
/ }2 q* @: \& m1 P/ H*在UART模块中有三个UART波特率除数因子寄存器UBRDIV0,UBRDIV1,UBRDIV2,存储在波特率除数寄存器UBRDIVn中的值用于决定波特率" W" l: S9 C3 u) ]# E
UBRDIVn = (int)(UART Clock / (buad rate*16))- 1! u( T' M" f9 j& S4 ?7 e( T
7 H3 f5 B# u9 B
【ULCON】/ a' j9 u& ~9 v" r) Y, h4 ]
5 y9 \2 y+ ?$ R. u: d' O9 V% b, s! A6 p2 P
【UCONn】(选择UART时钟源、设置UART中断方式)
' h) I6 L. f n4 v+ H7 m& T/ R" D3 T2 T0 C" ]7 L# \0 ^7 }
7 S* B- ]' R6 \( }, X3 T$ `【UFCONn】(该寄存器用于设置是否使用FIFO,设置各个FIFO的触发深度)( S* J9 m7 K: I6 l
4 P8 M( ], @& n【UTRSTATn寄存器】) c& A: S8 Q. }" S
(用来表明数据是否已经被发送完毕,是否已经接收数据). G6 h% Z" n# @: _. G2 n$ J7 z1 {
) u% {/ w2 M% S" a9 O7 O
7 h1 T6 v! S% x【UTXHn/URXHn】
& f1 j! { }# SUTXHn寄存器:SOC将数据写入这个寄存器,UART会将它保存到发送位移寄存器中,并自动发送出去( |8 V1 q$ a( P
URXHn寄存器:当UART收到数据时,SOC读取这个寄存器,即可获得数据
% x6 u, t) d D; G
3 \, E+ v* S' m( F) S! z, o Y# r; @! \* Z6 i% x4 H- ^
' B& [' M ~# ?. T! S9 a i( C' `( b$ ?
0 z; l! c" V' a: J0 d9 E6 O6 E+ K+ K8 u* g" T* J
|
|