tìm hiểu về giao tiếp nối tiếp bằng usart
Trang 1LỜI MỞ ĐẦU
Ngày nay ngành điện tử đã có mặt hình như là hầu hết các quốc gia trên thế giới điều khác biệt
là sự phát triển của nó như thế nào trong mỗi quốc gia ở Việt Nam chúng ta điện tử vẫn chưa phát triển mạnh chung ta chủ yếu nhập khẩu từ nước ngoài vào các linh kiện hay các mặt hàng điện tử vì thế chúng ta nên có hướng phát triển riêng cho chúng ta chẳng hạng như sản xuất và lập trình cho con pic, một linh kiện rất hữu ích và được sử dụng rất hữu ích hiện nay Nó góp phần vào phát triển ngành điện tử nước nhà mà còn giảm giá thành sản phẩm góp phần vào sự phát triển của quốc gia
Đó cũng chính là một trong những lý do, mà nhóm chúng tôi làm đề tài tiểu luận với nhan đề
“TÌM HIỂU VỀ GIAO TIẾP NỐI TIẾP BẰNG USART” Giao tiếp nối tiếp diễn ra bằng cách truyền và nhận dữ liệu trong một dòng xung điện liên tục đại diện cho các bit dữ liệu và mã điều khiển Hi vọng rằng qua phần tìm hiểu một mảng nhỏ về pic này sẽ giúp cho chúng ta hiểu rõ hơn về pic
Tuy nhiên với số lượng khổng lồ các kiến thức đã biết, việc lựa chọn những kiến thức nào phù hợp vào một bài tiểu luận, phù hợp với nhiều đối tượng là rất khó khăn, nên chắc chắn sẽ không tránh khỏi những thiếu sót Nhóm 7, lớp DHDT4 rất mong nhận được những ý kiến đóng góp của tất cả các thầy cô và các bạn sinh viên ở trong trường cũng như ngoài trường, để lần sau
Nhóm 7 xin chân thành cảm ơn Thầy Mã Duy Khanh, Khoa Công nghệ điện tử, Trường Đại học Công Nghiệp Thành phố Hồ Chí Minh đã giúp nhóm 7 hoàn thành bài tiểu luận này
Những chỉ dẫn và đóng góp xin gởi về Nhóm 7 - lớp DHDT4, Trường Đại học Công Nghiệp Thành phố Hồ Chí Minh, số 12 Nguyễn Văn Bảo, Phường 4, Quận Gò Vấp, Tp Hồ Chí Minh Xin chân thành cảm ơn!
Tp Hồ Chí Minh ngày 20 tháng 10 năm 2010
Mục lục
Trang 2I Usart là gì? 3
II Usart bất đồng bộ 8
1 Truyền usart bất đồng bộ 8
2 Thu bất đồng bộ 11
3 Lấy mẫu 13
III Usart đồng bộ 14
1 Usart đồng bộ master mode 14
a Truyền dữ liệu qua chuẩn giao tiếp usart đồng bộ Master Mode 14
b Nhận dữ liệu qua chuẩn giao tiếp usart đồng bộ Master Mode 18
2 Usart đồng bộ Sale Mode 21
a Truyền dữ liệu qua chuẩn giao tiếp usart đồng bộ Sale Mode 21
b Nhận dữ liệu qua chuẩn giao tiếp usart đồng bộ Sale Mode 22
IV Ví dụ 24
I Usart là gì?
USART ( Universal Synchronous Asynchronous Receiver Transmitter ) là một trong hai chuẩn giao tiếp nối tiếp USART còn được gọi là giao diện giao tiếp nối tiếp SCI (Serial Communications Interface) Có thể sử dụng giao diện này cho các giao tiếp với các thiết bị
Trang 3ngoại vi, với các vi điều khiển khác hay với máy tính Các dạng của giao diện USART ngoại vi bao gồm:
Bất đồng bộ
Đồng bộ_ Master mode
Đồng bộ_Slave mode
Hai chân dung cho giao diện này là RC6/TX/CK và RC/7/RX/DT, trong đó RC6/TX/CK dùng
để truyền xung clock và RC7/RX/DT dung để truyền dữ liệu Trong trường hợp này ta phải set bit TRISC<7:6> và SPEN (RCSTA<7>) để cho phép giao diện USART
PIC 16F877A được tích hợp sẵn bộ tạo tốc độ baud BRG ( Baud Rate Genetator ) 8 bit dùng cho giao diện USART BRG thực chất là một bộ đếm có thể được sử dụng cho cả hai dạng đồng bộ và bất đồng bộ và được điều khiển bởi thanh ghi PSBRG Ở dạng bất đồng bộ, BRG còn được điều khiển bởi bit BRGH ( TXSTA<2> ) Ở dạng đồng bộ tác động của bit BRGH được bỏ qua Tốc độ baud do BRG tạo ra được tính theo công thức sau:
SYNC BRGH = 0 (Low Speed) BRGH = 1 (High Speed)
0
1
(Asynchronous) Baud Rate = Fosc/(64(X+1))
(Synchronous) Baud Rate = Fosc/(4(X+1))
Baud Rate = Fosc/(16(X+1)) N/A
Trong đó X là giá trị của thanh ghi RSBRG ( X là số nguyên và 0<X<255 )
Cấu trúc đơn giản hóa của usart:
Hình 1: cấu trúc đơn giản của usart
Các thanh ghi liên quan đến BRG bao gồm:
Trang 41 TXSTA ( địa chỉ 98h ) : Thanh ghi điều khiển và tình trạng truyền dữ liệu
Bit 7 CSRC : Clock Source Select bit
Ở chế độ bất đồng bộ: Không cần bận tâm
Ở chế độ đồng bộ:
CSRC = 1 Master mode (Xung clock được lấy từ bộ tạo xung BRG)
CSRC = 0 Slave mode ( Xung clock được nhận từ bên ngoài)
Bit 6 TX9 : 9 bit Transmit Enable bit
1 = truyền dữ liệu 9 bit
0 = truyền dữ liệu 8 bit
Bit 5 TXEN : Transmit Enable bit
1 = cho phép truyền
0 = không cho phép truyền
Bit 4 SYNC USART Mode Select bit
Bit 1 TRMT: Transmit Shift Register Status bit
1= Thanh ghi TSR không chứa dữ liệu
0= thanh ghi TSR bị đầy
Bit 0 TX9D : Bit này chứa bit dữ liệu thứ 9 khi dữ liệu truyền nhận là 9 bit Có thể làm bit chẵn lẻ
2 RCSTA ( địa chỉ 18h): Thanh ghi chứa các bit trạng thái và điều khiển quá trình nhận dữ
liệu qua chuẩn giao tiếp USART
Trang 5Bit 7: SPEN: Serial Port Enable bit
1= Cho phép cổng giao tiếp USART ( chân RC7/RX/DT và RC6/TX/CK)
0= không cho phép cổng giao tiếp USART
Bit 6: RX9: 9-bit Receive Enable bit
1= Nhận 9 bit dữ liệu
0= Nhận 8 bit dữ liệu
Bit 5: SREN: Single Receive Enable bit
ở chế độ bất đồng bộ: bit này không cần quan tâm
ở chế độ USART Master đồng bộ:
1= cho phép nhận 1 byte dữ liệu
0= không cho phép nhận 1 byte dữ liệu
Bit này phải được xóa sau khi nhận hoàn thành
ở chế độ USART Slave đồng bộ: không dùng trong chế độ này
Bit 4: CREN: Continuous Receive Enable bit
Ở chế độ bất đồng bộ:
1= Cho phép nhận 1 chuỗi dữ liệu liên tục
0= không cho phép nhận 1 chuổi dữ liệu liên tục
Ở chế độ đồng bộ:
1= Cho phép nhận dữ liệu cho tới khi xóa bit CREN
0= không cho phép nhận chuỗi dữ liệu
Bit 3: ADDEN : Address Detect Enable bit
Trang 61= Xuất hiện lỗi “Framing”
0= không xuất hiện lỗi “Framing”
Bit 1: OERR: Overrun Error bit
1= Xuất hiện lỗi “Overrun” ( có thể xóa bằng cách xóa bit CREN)
0= Không xuất hiện lỗi “Overrun”
Bit 0: RX9D : Bit này chứa bit dữ liệu thứ 9 của dữ liệu truyền nhận, có thể là bit chẵn lẻ
Bảng 1: tốc độ truyền cho chế độ đồng bộ:
Bảng 2: Tốc độ truyền cho chế độ bất đồng bộ (BRGH=0)
Trang 7Bảng 3: Tốc độ truyền cho chế độ bất đồng bộ (BRGH=1)
II Usart bất đồng bộ:
Trong chế độ này, USART sử dụng chuẩn “nonreturn-to-zero” (NRZ) format ( 1 bit khởi đầu, 8 hoặc 9 bit dữ liệu và 1 bit kết thúc) Dạng dữ liệu thường dùng nhất là 8-bit Bộ truyền tốc độ 8-bit trên chip có thể sử dụng tiêu chuẩn tốc độ truyền tần số từ bộ dao động USART truyền và nhận bit thấp trước Nhận và truyền là hai chức năng độc lập nhau nhưng sử dụng cùng dạng dữ liệu và tốc độ truyền Bộ truyền tốc độ sinh ra clock x16 hoặc x64 của bit tốc độ dịch chuyển, phụ thuộc vào bit BRGH (TXSTA<2>) Chẵn lẻ không được hỗ trợ bởi
Trang 8phần cứng, nhưng có thể bổ xung trong phần mềm ( lưu trữ dạng 9-bit dữ liệu) Chế độ bất đồng
bộ bị dừng lại trong SLEEP
Chế độ bất đồng bộ được sử dụng bằng cách xóa bit SYNC (TXSTA<4>)
Module USART bất đồng bộ bao gồm những thành phần quan trọng sau:
Hình (a): sơ đồ khối truyền USART
Sơ đồ khối của USART truyền trong hình 1 Trung tâm của truyền dữ liệu là truyền tải (nối tiếp) thanh ghi dịch (TSR) Thanh ghi dịch bao gồm dữ liệu của nó từ đọc/ghi bộ đệm truyền tải.Thanh ghi TXREG nạp dữ liệu vào phần mềm Thanh ghi TSR không đưa dữ liệu vào cho tới khi STOP bit được truyền từ lần đưa dữ liệu trước Ngay sau khi bit STOP được truyền, thanh ghi TSR đưa dữ liệu mới từ thanh ghi TXREG (nếu có sẵn) Sau khi thanh ghi TXREG
Trang 9chuyển dữ liệu đến thanh ghi TSR ( xuất hiện trong một TCY), thanh ghi TXREG rỗng và bit cờ TXIF được set Ngắt này có thể được cho phép bằng cách setting/clearing bit TXIE Bit cờ TXIF sẽ được set bất chấp tình trạng của bit TXIE và không thể xóa trong phần mềm.Nó sẽ reset chỉ khi dữ liệu mới đươc đưa vào thanh ghi TXREG Trong khi bit TXIF biểu thị tình trạng của thanh ghi TXREG, bit TRMT (TXSTA<1>) cho thấy tình trạng của thanh ghi TSR Bit trạng thái TRMT chỉ được đọc, nó được set khi thanh ghi TSR rỗng Không có logic ngắt ở bit này, vì thế người dùng có thể kiểm tra bit này đươc xác định nếu thanh ghi TSR rỗng.
sẽ trở lại trở kháng cao
Để chọn chuyển 9-bit , bit chuyển TX9 (TXSTA<6>), nên set và bit thứ 9 nên ghi vào bit TX9D (TXSTA<0>) Bit thứ 9 phải được ghi trước khi ghi 8-bit data đến thanh ghi TXREG Bởi vì dữ liệu ghi đế thanh ghi TXREG có kết quả ngay khi truyền dữ liệu đến thanh ghi TSR ( nếu thanh ghi TSR rỗng) Trong trường hợp này, bit dữ liệu thứ 9 không đúng có thể load vào thanh ghi TSR
Các bước sau khi truyền bất đồng bộ:
a Đầu tiên, thanh ghi SPBRG cho xuất hiện tốc độ truyền Nếu tốc độ truyền cao được ra lệnh, set bit BRGH
b Cho phép cổng nối tiếp bất đồng bộ bằng cách xóa bit SYNC và set bit SPEN
c Nếu ngắt được mong đợi, thì set TXIE, GIE và PEIE
d Nếu truyền 9-bit được dùng thì set bit TX9
e Cho phép truyền bằng cách set bit TXEN, cái sẽ set bit TXIF
f Nếu truyền 9-bit được chọn, bit thứ 9 nên load vào bit TX9D
Trang 10g Đưa dữ liệu vào thanh ghi TXREG ( bắt đầu truyền).
Hình (b): Truyền bất đồng bộ Master
Hình (c): Truyền Back to Back
Bảng 4: các thanh ghi truyền bất đồng bộ
2 Thu bất đồng bộ:
Hình d:Sơ đồ khối USART nhận
Trang 11Sơ đồ khối nhận USART bất đồng bộ được thấy trên hình d Dữ liệu nhận vào chân RX/DT và thành the data recovery block The data recovery block ở tốc độ dịch cao x16 tốc độ truyền, trong khi mà nhận dữ liệu dịch chính tại tốc độ bit hoặc FOSC.
Khi chế độ bất đồng bộ được chọn, sự nhận được cho phép bằng cách set bit CREN (RCSTA<4>)
Trung tâm của bộ nhận là nhận (nối tiếp) thanh ghi dịch (RSR) Sau khi lấy mẫu chân RX/TX cho bit STOP, việc nhận dữ liệu trong RSR là chuyển đến thanh ghi RCREG (nếu nó trống) Nếu sự chuyển đến hoàn thành, bit RCIF sẽ được set Ngắt thực sự có thể được cho phép bằng cách setting/clearing bit RCIE Bit RCIF chỉ được đọc và được xóa bằng phần cứng Nó được xóa khi thanh ghi RCREG được đọc và trống Thanh ghi RCREG là thanh ghi đệm gấp đôi, nghĩa là có 2 deep FIFO Nó có thể cho 2 byte của dữ liệu được nhận và chuyển đến RCREG FIFO và byte thứ 3 bắt đầu dịch vào thanh ghi RSR Trong lúc phát hiện bit STOP của byte thứ 3, nếu thanh ghi RCREG vẫn đầy thì bit tràn lỗi, OERR (RCSTA<1>), sẽ được set Word trong RSR sẽ bị mất.Thanh ghi RCREG có thể đọc hai lần để thử 2 byte trong FIFO Bit OERR sẽ được xóa bằng phần mềm Nó sẽ được thực hiện khi resetting logic nhận ( bit CREN được xóa và rồi set) Nếu bit OERR được set, việc truyền từ thanh ghi RSR đến thanh ghi RCREG bị cấm, vì thế nó cần thiết xóa bit OERR khi nó được set Bit lỗi Framing, FERR (RCSTA<2>), được set nếu bit STOP được phát hiện ở mức thấp bit FERR và bit nhận thứ 9 được đệm giống như nhận dữ liệu Đọc RCREG sẽ load RX9D và FERR với giá trị mới, vì thế
nó cần thiết cho người dùng đọc thanh ghi RCSTA trước khi đọc thanh ghi RCREG kế tiếp để
nó không bị mất thông tin cũ ở FERR và RX9D
Các bước sau khi cài đặt chế độ nhận bất đồng bộ
a Đầu tiên, thiết lập tốc độ truyền bằng thanh ghi SPBRG Nếu ở tốc độ truyền cao thì set bit BRGH
Trang 12b Cho phép cổng giao tiếp bất đồng bộ nối tiếp bằng cách xóa bit SYNC và set bit SPEN
c Nếu ngắt được mong đợi thì set các bit SCIE, GIE, PEIE
d Nếu nhận 9-bit được dùng thì set bit RX9
e Cho phép nhận bằng cách set bit CREN
f Bit RCIF sẽ được set khi nhận được hoàn thành và ngắt sẽ được sinh ra nếu bit RCIE đã được set
g Đọc thanh ghi RCSTA để đọc bit dữ liệu thứ 9 (Nếu được cho phép) và xác định nếu bất
kỳ lỗi nào xuất hiện trong lúc nhận
h Đọc 8-bit dữ liệu nhận bằng cách đọc thanh ghi RCREG
i Nếu có bất kỳ lỗi nào xuất hiện thì xóa lỗi bằng cách xóa bit CREN
Hình (f) Lấy mẫu ở chân RX, BRGH = 0 hoặc BRGH=1
Trang 13III Usart đồng bộ:
USART cho phép hai chế độ truyền và nhận dữ liệu là Master Mode và Slave Mode Master Mode được kích hoạt bằng cách set bit CSRC (TXSTA<7>) (=1), Slave Mode được kích hoạt bằng cách clear bit CSRC (TXSTA<7>) (=0) Điểm khác biệt duy nhất giữa hai chế
độ này là Master Mode sẽ lấy xung clock đồng bộ từ bộ tạo xung BRG (Baud Rate Generator) còn Slave Mode lấy xung clock đồng bộ từ nguồn bên ngoài qua chân RC6/TX/CK Điều này cho phép Slave Mode hoạt động ngay cả khi vi điều khiển đang ở chế độ Sleep
1 Usart đồng bộ master mode:
Giao diện USART đồng bộ được kích hoạt bằng cách thiết lập bit SYNC (TXSTA<4>) =
1 Cổng giao tiếp nối tiếp vẫn là hai chân RC7/RX/DT, RC6/TX/CK và được cho phép bằng cách thiết lập bit SPEN (RCSTA<7>) = 1 để đưa hai chân này đến đường dữ liệu DT(Data) và xung CK(Clock) tương ứng Master Mode chỉ ra rằng bộ xử lí chuyển phát những xung chủ (chính) đến những đường CK Master Mode được kích hoạt bằng cách set bit CSRC (TXSTA<7>) (=1)
a Truyền dữ liệu qua chuẩn giao tiếp usart đồng bộ Master Mode:
Sơ đồ khối sự truyền dữ liệu qua chuẩn giao tiếp USART
USART RECEIVER BLOCK DIAGRAM
Trang 14Thành phần quan trọng của khối truyền dữ liệu là thanh ghi dịch truyền TSR( Transmit Shift Register) Thanh ghi này chứa dữ liệu của nó từ thanh ghi đệm TXREG Thanh ghi TXREG thì được nạp dữ liệu vào phần mềm Thanh ghi TSR thì không được nạp cho đến khi bit cuối cùng được truyền vào từ thanh ghi trước đó được nạp Ngay khi bit cuối cùng được truyền vào thì thanh ghi TSR được nạp dữ liệu từ thanh ghi TXREG (nếu khả dụng) Cờ hiệu của khối truyền dữ liệu là bit TXIF (chỉ thị trạng thái thanh ghi TXREG), cờ hiệu này được gắn với một ngắt và biến điều khiển ngắt này là TXIE Đôi khi thanh ghi TXREG truyền dữ liệu đến thanh ghi TSR(xảy ra chỉ trong một chu kỳ) thì hết dữ liệu và bit ngắt TXIF (PIR1<4>) được set Bộ ngắt có thể được cho phép hoặc không cho phép bằng cách thiết lập set hay clear cho bit enable TXIE(PIE1<4>) Bit cờ TXIF sẽ được set bất chấp tình trạng của bit enable TXIE và sẽ không thể được clear trong phần mềm Nó sẽ chỉ đặt lại khi dữ liệu mới được đưa vào thanh ghi TXREG Trong khi bit cờ TXIF chỉ ra tình trạng của thanh ghi TXREG thì một bit khác TRMT(TXSTA<1>) chỉ ra tình trạng của thanh ghi TSR TRMT là một bit chỉ đọc được set khi thanh ghi TSR không có dữ liệu Vì không có ngắt logic liên kết đến bit này vì vậy người dùng phải thăm dò kiểm tra bit này để xác định khi thanh ghi TSR không có dữ liệu Thanh ghi TSR không được lập vị trí xác định trong bộ nhớ dữ liệu vì vậy nó không khả dụng với người dùng.
Việc truyền dữ liệu được cho phép bằng cách set bit enable TXEN(TXSTA<5>) Việc truyền dữ liệu thực tế sẽ không xảy ra cho đến khi thanh ghi TXREG được nạp dữ liệu Bit dữ liệu đầu tiên sẽ được dịch chuyển ra cạnh lên có sẵn kế tiếp của xung clock trên đường CK Dữ liệu ra thì ổn định xung quanh cạnh xuống của xung đồng bộ Hình minh họa:
SYNCHRONOUS TRANSMISSION
Trang 15Việc truyền cũng có thể được bắt đầu bằng cách trước hết là nạp dữ liệu vào thanh ghi TXREG và sau đó set bit TXEN Hình minh họa:
SYNCHRONOUS TRANSMISSION(THROUGH TXEN)
Điều này thuận lợi khi tốc độ truyền thấp được chọn vì bộ phát sinh tốc độ Baud BRG được giữ ở trạng thái Reset khi những bit TXEN ,CREN và SREN được clear Việc set bit enable TXEN sẽ bắt đầu bộ BRG, tạo ra một xung dịch ngay lập tức Thông thường khi việc truyền dữ liệu được bắt đầu lần đầu tiên, thanh ghi TSR sẽ trống dữ liệu vì vậy việc chuyển dữ liệu đến thanh ghi TXREG sẽ dẫn đến kết quả là việc chuyển dữ liệu ngay lập tức đến thanh ghi TSR, kết quả là thanh ghi TXREG trống dữ liệu
Việc xóa bit enable TXEN trong suốt quá trình truyền dữ liệu sẽ làm cho việc truyền bị ngừng lại và sẽ reset lại máy phát Chân dữ liệu DT và chân clock CK sẽ phục hồi lại trạng thái
có trở kháng cao Nếu bit CREN hoặc bit XREN được set trong suốt quá trình truyền dữ liệu thì việc truyền sẽ ngừng lại và chân dữ liệu DT sẽ khôi phục lại trạng thái trở kháng cao (cho quá