Lập trình cho 8237A

Một phần của tài liệu ghep noi va dieu khien thiet bi ngoai vi (Trang 71 - 73)

CHƯƠNG 5: GHĨP NỐI VĂO RA đ IỀU KHIỂN BẰNG DMA 5.1 Khâi niệm DMA cơ bản

5.2.3 Lập trình cho 8237A

a. Chương trình truyền dữ liệu giữa bộ nhớ-bộ nhớ bằng DMA

Vắ dụ cần chuyển khối nhớ có ựịa chỉ 1000h-13FFh tới khối nhớ 1400h-17FFh thông qua DMA. Chương trình sẽ gồm câc bước sau:

- Xoâ flip-flop con trỏ byte về 0.

- Lập trình cho câc kắnh 0 vă 1: đưa ựịa chỉ nguồn vă ựắch văo kắnh 0 vă 1. - đặt giâ trị bộ ựếm bằng số byte cần chuyển -1

- Lập trình thông qua thanh ghi chế ựộ cho kắnh 0 vă 1 - Lập trình cho thanh ghi lệnh

- Cho phĩp kắnh 0 vă ựưa ra yắu cầu DMA

- Kiểm tra bit hết dữ liệu. Nếu ựê xong thì kết thúc DMA. Xâc ựịnh ựịa chỉ câc thanh ghi:

Tăi liệu môn học: Ghĩp nối vă ựiều khiển thiết bị ngoại vi

port[addr_pFF]=$00;// xoâ con tr FF v 0. // đặt ựịa ch ngun văo kắnh 0

port[addr_chanel0] =$00; port[addr_chanel0] =$10; // đặt ựịa chỉựắch văo kắnh 1

port[addr_pFF]=$01;// xoâ con tr FF v 0. port[addr_chanel1] =$00;

port[addr_chanel1] =$14;

//Chỉựịnh s byte cn chuyn 4000

port[addr_pFF]=$01;// xoâ con tr FF v 0. port[addr_CT1] =$00;

port[addr_CT1] =$40;

// đặt chếựộ: kắnh 0 ựọc 1011 1000b= B8h ; kắnh 1 ghi: 1011 0101=B5h port[addr_pFF]=$01;// xoâ con tr FF v 0.

port[addr_MR]=$B8; port[addr_MR]=$B5;

// Lp trình thanh ghi lnh cho phĩp truyn M-M= 01h Port[addr_CR]=$01;

// B mt n che chn kắnh 0 = 0000 1110 b=0Eh port[addr_MKR]= $0E;

//Yắu cu DMAC = 0000 0100 b=04h port[addr_RR] = $04;

//Kim tra trng thâi kết thúc ựếm: kắnh 0 ê truyn hết d liu (D0=1) =01h Repeat

Var1=port[addr_SR]; Until ((var1 and $01)=$01); //kết thúc truyn

Return;

Sau khi khởi ựộng, hệ thống DMAC sẽ tự hoạt ựộng mă không cần thắm chương trình phụ năo nữa.

Một phần của tài liệu ghep noi va dieu khien thiet bi ngoai vi (Trang 71 - 73)

Tải bản đầy đủ (PDF)

(128 trang)