IV. NGÀY HỒN THÀNH NHI ỆM VỤ:
2.8.2 Nhận dữliệu trên UART
Sơđồ khối bên nhận :
Bộ nhận dữ liệu chứa khối logic front-end cĩ nhiệm vụ lấy mẫu tín hiệu trên chân
RXD với tần số lấy mẫu bằng 16 lần tốc độ baud. Khi đường truyền ở trạng thái nghỉ (mức logic 1), nếu cĩ sự chuyển về “0” thì nĩ được xem là cạnh xuống của một bit start và tuần tự phát hiện bit start được khởi động. Vì bộ nhận chứa khối logic front- end lấy mẫu ở tần số bằng 16 lần tốc độ baud nên một bit sẽ được lấy mẫu 16 lần. Trong trường hợp này, khi cĩ sự chuyển mức từ trạng thái nghỉ của đường truyền xuống mức “0”, thì tuần tự phát hiện bit start sẽ căn cứnếu trong ba lần lấy mẫu 8, 9 và 10 của bit start mà hai (hoặc ba) lần là mức logic “1”, thì bit start này bị lọai bỏ và
được xem nhưmột tín hiệu nhiễu, bộ nhận bắt đầu tìm sự chuyển trạng thái từ 1-đến-0 ( 1 là trạng thái sau của bit stop chớ khơng phải là bit dữ liệu) tiếp theo.
Hình 2.40 Cấu trúc thanh ghi dữ liệu I/O UART - UDR
Khi bit stop được đưa vào bộ nhận, thì hai hoặc ba trong 3 lần lấy mẫu phải là 1 để nhận bit stop hợp lệ. Nếu trong ba lần lấy mẫu, mà nhiều hơn hai lần là mức logic “0”, thì cờ lỗi khung truyền FE (Framing Error) trong thanh ghi trạng thái UART( USR)
được thiết lập lên 1 (bằng 1). Trước khi đọc dữ liệu từ thanh ghi dữ liệu UART (UDR), người sử dụng nên kiểm tra bit FE để phát hiện lỗi khung truyền.
Cĩ hoặc khơng cĩ giá trị bit stop được phát hiện là hợp lệ thì dữ liệu cũng sẽ được truyền đến UDR và cờ nhận hoàn thành RXC được thiết lập lên 1. Thanh ghi UDR
thực chất là hai thanh ghi tách biệt về mặt vật lý, một cho dữ liệu truyền và một cho dữ liệu nhận. Khi thanh ghi UDR được đọc thì thanh ghi dữ liệu nhận (the Receive Data register)được truy cập, ngược lại, khi thanh ghi UDR được ghi thì thanh ghi dữ liệu phát (The transmit data register)được truy cập.
Nếu ta muốn truyền dữ liệu 9 bit, thì bit CHR9 trong thanh ghi điều khiển UART
(UCR) phải được thiết lập lên 1, và bit RXB8 trong thanh ghi USR sẽ được nạp vào bit 9 trong thanh ghi dịch phát khi dữ liệu được truyền đến thanh ghi UDR. Bit dữ liệu thứ 9 này sẽ được nhận tại bit RXB8 trong thanh ghi USC.