Bộ giao tiếp truyền thông nối tiếp UART Lite chuẩn RS232 là một thành phần của hệ vi xử lý cần triển khai. Để kết nối cổng RS232 với khối giao tiếp bus PLB của lõi xử lý mềm MicroBlaze, EDK hỗ trợ bộ giao tiếp mềm XPS UART Lite, bộ giao tiếp này có nhiệm vụ chuyển đổi dữ liệu song song 32 bit trên khối giao tiếp bus PLB thành tín
hiệu nối tiếp đƣa tới chân tín hiệu truyền Tx và ngƣợc lại nó sẽ chuyển đổi dữ liệu nối tiếp nhận đƣợc từ chân Rx thành 32 bit song song chuyển đến khối giao tiếp bus PLB. Sơ đồ kết nối RS232 và hệ thống bus PLB qua khối XPS UART Lite đƣợc chỉ ra nhƣ Hình 25. Giao diện PLB PLB Các thanh ghi UART Lite Điều khiển UART Rx Tx
Hình 25: Sơ đồ khối bộ giao tiếp UART Lite.
Trong đó:
Khối giao tiếp PLB: Cung cấp giao tiếp tới PLB và các giao thức logic PLB. Đây là một giao tiếp không định hƣớng giữa core IP của ngƣời sử dụng và hệ thống bus PLB chuẩn.
Khối các thanh ghi UART Lite: Khối này bao gồm tất cả các thanh ghi sắp xếp bộ nhớ. Nó giao tiếp với PLB thông qua khối giao tiếp PLB. Khối này bao gồm thanh ghi trạng thái 8 bit, thanh ghi điều khiển 8 bit và một cặp thanh ghi truyền/nhận dữ liệu 8 bit FIFO. Tất cả các thanh ghi này đều truy nhập trực tiếp với PLB thông qua khối giao tiếp PLB.
Để bộ giao tiếp truyền thông nối tiếp UART Lite thực hiện đƣợc việc truyền/nhận dữ liệu nhƣ đã mô tả ở trên, ta phải xét các thanh ghi truyền/nhận dữ liệu, thanh ghi trạng thái và cấu hình cho thanh ghi điều khiển của khối này. Các thanh ghi đƣợc miêu tả cụ thể nhƣ sau:
Thanh ghi nhận dữ liệu FIFO: Có địa chỉ là “địa chỉ cơ sở + 0x0”. Đây là thanh ghi chỉ đọc đƣợc dùng để lƣu trữ dữ liệu nhận về của khối UART Lite. Thanh ghi này là thanh ghi 32 bit, trong đó 8 bit (từ bit 24 đến bit 31 dùng để lƣu trữ dữ liệu nhận), 8 bit còn lại (từ bit 0 đến 23) đƣợc dành riêng cho những mục đích khác.
Thanh ghi truyền dữ liệu FIFO: Có địa chỉ là “địa chỉ cơ sở + 0x4”. Đây là thanh ghi chỉ viết đƣợc dùng để lƣu trữ dữ liệu từ khối UART Lite truyền ra ngoài. Dữ liệu trƣớc khi truyền đi sẽ đƣợc ghi vào thanh ghi này. Cũng nhƣ thanh ghi nhận dữ liệu, thanh ghi này là thanh ghi 32 bit, trong đó có (từ bit 24 đến bit 31 dùng để chứa dữ liệu truyền), 8 bit còn lại (từ bit 0 đến bit 23) đƣợc dành riêng cho những mục đích khác.
Nhƣ vậy mỗi lần khối UART Lite sẽ truyền/nhận đƣợc 8 bit dữ liệu.
Thanh ghi trạng thái khối UART Lite: Có địa chỉ là “địa chỉ cơ sở + 0x8”. Thanh ghi này dùng để mô tả trạng thái của bộ đệm truyền và bộ đệm nhận dữ liệu FIFO, đây là thanh ghi chỉ đọc. Nếu giá trị đọc ra trên bit số 29 của thanh ghi trạng thái bằng 1 thì bộ đệm truyền rỗng, ta có thể thực hiện việc ghi dữ liệu vào thanh ghi truyền dữ liệu để tiến hành truyền dữ liệu. Tƣơng tự khi giá trị đọc ra trên bit số 31 của thanh ghi trạng thái có giá trị bằng 1 thì bộ đệm nhận có dữ liệu, ta có thể thực hiện việc đọc dữ liệu từ thanh ghi nhận dữ liệu. Nhƣ vậy, trƣớc khi thực hiện việc truyền hoặc nhận dữ liệu ta phải đọc giá trị các bit này để kiểm tra trạng thái của bộ đệm truyền, bộ đệm nhận.
Thanh ghi điều khiển UART Lite: Có địa chỉ là “địa chỉ cơ sở + 0xC”. Đây là thanh ghi 32 bit chỉ đƣợc dùng để viết, nó có chứa bit cho phép ngắt và các chân Reset cho bộ đệm truyền và bộ đệm nhận dữ liệu FIFO. Nếu một yêu cầu đọc đƣợc đƣa ra để điều khiển thanh ghi thì việc đọc dữ liệu sẽ đƣợc xác nhận. Trong 32 bit của thanh ghi điều khiển UART Lite có 29 bit (từ bit 0 đến bit 26, bit 28 và bit 29) đƣợc dành riêng, 3 bit còn lại dùng để cho phép ngắt và reset/clear bộ đệm truyền/nhận. Để truyền hoặc nhận dữ liệu thì ta phải lựa chọn giá trị viết các bit này với cấu hình không cho phép ngắt (bit 29=‟0‟) và không reset bộ đệm truyền/nhận (bit 30,31 =‟0‟). Nhƣ vậy giá trị viết vào thanh ghi này là 0x00000000.
Khối điều khiển UART: Khối điều khiển UART gồm một khối truyền dữ liệu Tx, một khối nhận dữ liệu Rx, một khối tạo tốc độ Baud BRG và một khối điều khiển. Nó kết hợp việc khởi tạo trạng thái máy với logic điều khiển bit start, stop của khung truyền dữ liệu.
Kit Spartan-3E FPGA thực thi trong thiết kế gồm 2 cổng nối tiếp RS232: một cổng cái DB9 và một cổng đực DB9[8]. Cổng cái đƣợc sử dụng để kết nối điều khiển với các ngoại vi RS232 khác nhƣ modem, máy in hoặc thực hiện một vòng lặp kiểm tra đơn giản qua DCE. Sự kết nối giữa kit FPGA và hai cổng nối tiếp DB9 đƣợc chỉ ra nhƣ Hình 26.
FPGA hỗ trợ dữ liệu đầu ra nối tiếp tƣơng ứng với mức logic của họ TTL hoặc CMOS tới thiết bị Maxim, chuyển đổi các giá trị logic thành các mức điện áp RS232 thích hợp. Tƣơng tự thiết bị Maxim chuyển đổi dữ liệu đầu vào nối tiếp tới các mức logic TTL tƣơng ứng trên FPGA. Giữa chân đầu ra Maxim và chân RXD trên FPGA có một điện trở bảo vệ để tránh xung đột mức logic.
Hệ vi xử lý triển khai trong đề tài thực hiện truyền thông dữ liệu hai chiều với máy tính PC. Nhƣ vậy ở đây ta sử dụng hai tín hiệu truyền/nhận của cổng cái. Các tín hiệu truyền/nhận Tx và Rx từ khối UART sẽ đƣợc kết nối tƣơng ứng với tín hiệu truyền (RS232_TXD, chân M14 của chip FPGA trên kit Spartan-3E) và tín hiệu nhận (RS232_RXD, chân R7 của chip FPGA trên kit Spartan-3E) của cổng nối tiếp RS232 trên kit FPGA.
Việc gán các chân tín hiệu và xác định hƣớng truyền dữ liệu đƣợc chỉ ra trong file UCF (User constrain File), MHS của Project nhƣ Hình 27.
Hình 27: Minh họa kết nối các chân tín hiệu RS232 với hệ thống.
Để thực hiện việc truyền/nhận dữ liệu giữa hệ vi xử lý và máy tính chính xác ta xác lập các tiêu chí kỹ thuật cho RS232 nhƣ sau :
Chuẩn về điện
Chuẩn về điện của giao diện RS - 232C quy định giá trị cực đại và giá trị cực tiểu của mức lôgic „0‟ và „1‟. Khác với mức lôgic TTL, tín hiệu RS -232 là âm so với đất. Mức lôgic cao là điện thế trong khoảng từ +3V đến +25V, mức lôgic đảo cực có điện thế trong khoảng từ -3V đến -25V.
Lôgic trên đƣờng truyền số liệu Tx và Rx đƣợc đổi thành mức lôgic âm, nghĩa là mức lôgic 1 có điện thế âm so với đất (từ -3V đến -25V), mức lôgic 0 có điện thế dƣơng so với đất (từ +3V đến +25V). Tất cả các lối ra đều có đặc tính chống chập mạch và có thể cung cấp dòng từ 10mA đến 20mA. Với các lối ra này, các đèn LED có thể đƣợc đấu trực tiếp. Trên thực tế đo đƣợc ở các lối ra thấy mức lôgic cao có điện áp trong khoảng từ +10V đến +12V, mức lôgic đảo cực từ -10V đến -12V.
Net fpga_0_RS232_DCE_RX_pin LOC=R7;
Net fpga_0_RS232_DCE_RX_pin IOSTANDARD = LVCMOS33; Net fpga_0_RS232_DCE_TX_pin LOC=M14;
Net fpga_0_RS232_DCE_TX_pin IOSTANDARD = LVCMOS33;
UCF
PORT fpga_0_RS232_DCE_RX_pin = fpga_0_RS232_DCE_RX, DIR = I PORT fpga_0_RS232_DCE_TX_pin = fpga_0_RS232_DCE_TX, DIR = O
Định dạng khung truyền dữ liệu trên RS232
Dữ liệu truyền trên đƣờng truyền nối tiếp đƣợc định dạng theo khung truyền, mỗi khung truyền bao gồm một nhóm bit dữ liệu kết hợp với một số bit đồng bộ nhƣ bit Start, Stop, chẵn lẻ... Ở đây ta sử dụng một khung truyền 8 bit bao gồm: 1 bit Start luôn ở mức lôgic thấp, 1 bit Stop luôn ở mức lôgic cao, 1 bit chẵn lẻ, 5 bit dữ liệu. Loại bit chẵn lẻ là bit lẻ.
Tốc độ truyền số liệu
Tốc độ truyền số liệu nối tiếp đƣợc đo bằng số bit truyền trên giây (bit per second - bps), gọi là tốc độ Baud. Khi hai thiết bị truyền thông tin cho nhau qua giao diện nối tiếp RS -232, tốc độ Baud phải thiết lập trên hai thiết bị nhƣ nhau. Ở đây để thuận tiện cho việc triển khai ứng dụng của đề tài qua RS232 ta sử dụng một tốc độ Baund cố định là 9600 với hệ số chia là 00C0h cho cả PC và MicroBlaze. Định dạng khung truyền dữ liệu và tốc độ truyền dữ liệu RS232 trong thiết kế đƣợc chỉ ra nhƣ Hình 28.
Hình 28: Thiết lập định dạng khung và tốc độ truyền dữ liệu RS232.