intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương 8 - Vào/ra Dữ liệu bằng DMA

Chia sẻ: Kun | Ngày: | Loại File: PDF | Số trang:18

273
lượt xem
56
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nguyên tắc của việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách thâm nhập trực tiếp vào bộ nhớ (DMA) Trong các cách điều khiển việc trao đổi dữ liệu giữa thiết bị ngoại vi và hệ vi xử lý bằng cách thăm dò trạng thái sẵn sàng của thiết bị ngoại vi hay bằng cách ngắt bộ vi xử lý đã đ-ợc nói đến ở các ch-ơng tr-ớc, dữ liệu th-ờng đ-ợc chuyển từ bộ nhớ qua bộ vi xử lý để rồi từ đó ghi vào thiết bị ngoại vi hoặc ng-ợc lại, từ thiết...

Chủ đề:
Lưu

Nội dung Text: Chương 8 - Vào/ra Dữ liệu bằng DMA

  1. Ch−¬ng 8 Vμo/ra D÷ liÖu b»ng DMA 1. Nguyªn t¾c cña viÖc trao ®æi d÷ liÖu víi thiÕt bÞ ngo¹i vi b»ng c¸ch th©m nhËp trùc tiÕp vμo bé nhí (DMA) Trong c¸c c¸ch ®iÒu khiÓn viÖc trao ®æi d÷ liÖu gi÷a thiÕt bÞ ngo¹i vi vμ hÖ vi xö lý b»ng c¸ch th¨m dß tr¹ng th¸i s½n sμng cña thiÕt bÞ ngo¹i vi hay b»ng c¸ch ng¾t bé vi xö lý ®· ®−îc nãi ®Õn ë c¸c ch−¬ng tr−íc, d÷ liÖu th−êng ®−îc chuyÓn tõ bé nhí qua bé vi xö lý ®Ó råi tõ ®ã ghi vμo thiÕt bÞ ngo¹i vi hoÆc ng−îc l¹i, tõ thiÕt bÞ ngo¹i vi nã ®−îc ®äc vμo bé vi xö lý ®Ó råi tõ ®ã ®−îc chuyÓn ®Õn bé nhí. V× thÕ tèc ®é trao ®æi d÷ liÖu phô thuéc rÊt nhiÒu vμo tèc ®é thùc hiÖn cña c¸c lÖnh MOV, IN vμ OUT cña bé vi xö lý vμ do ®ã viÖc trao ®æi d÷ liÖu kh«ng thÓ tiÕn hμnh nhanh ®−îc. Trong thùc tÕ cã nh÷ng khi ta cÇn trao ®æi d÷ liÖu thËt nhanh víi thiÕt bÞ ngo¹i vi: nh− khi cÇn ®−a d÷ liÖu hiÖn thÞ ra mμn h×nh hoÆc trao ®æi d÷ liÖu víi bé ®iÒu khiÓn ®Üa. Trong c¸c tr−êng hîp ®ã ta cÇn cã ®−îc kh¶ n¨ng ghi/®äc d÷ liÖu trùc tiÕp víi bé nhí (direct memory access, DMA - th©m nhËp vμo bé nhí trùc tiÕp kh«ng th«ng qua CPU) th× míi ®¸p øng ®−îc yªu cÇu vÒ tèc ®é trao ®æi d÷ liÖu. §Ó lμm ®−îc ®iÒu nμy c¸c hÖ vi xö lý nãi chung ®Òu ph¶i dïng thªm m¹ch chuyªn dông ®Ó ®iÒu khiÓn viÖc th©m nhËp trùc tiÕp vμo bé nhí (direct memory access controller, DMAC). Cã thÓ lÊy 1 thÝ dô cô thÓ ®Ó minh ho¹ ®iÒu nμy. Trong khi mét m¹ch DMAC nh− 8237A-5 cña Intel cã thÓ ®iÒu khiÓn viÖc chuyÓn 1 byte trong 1 m¶ng d÷ liÖu tõ 232
  2. bé nhí ra thiÕt bÞ ngo¹i vi chØ hÕt 4 chu kú ®ång hå th× bé vi xö lý 8088 ph¶i lμm hÕt cì 40 chu kú: ; Sè chu kú ®ång hå Lap: MOV AL,[SI] ; 10 OUT PORT,AL ; 10 ; 2 inc SI ; 17 Looop Lap ;Céng: 39 chu kú §Ó hç trî cho viÖc trao ®æi d÷ liÖu víi thiÕt bÞ ngo¹i vi b»ng c¸ch th©m nhËp trùc tiÕp vμo bé nhí, t¹i mçi vi m¹ch CPU th−êng tån t¹i ch©n yªu cÇu treo HOLD ®Ó thiÕt bÞ ngo¹i vi, mçi khi cã yªu cÇu dïng bus cho viÖc trao ®æi d÷ liÖu víi bé nhí th× th«ng qua ch©n nμy mμ b¸o cho CPU biÕt. §Õn l−ît CPU, khi nhËn ®−îc yªu cÇu treo th× nã tù treo lªn (tù t¸ch ra khái hÖ thèng b»ng c¸ch ®−a c¸c bus vμo tr¹ng th¸i trë kh¸ng cao) vμ ®−a xung HLDA ra ngoμi ®Ó th«ng b¸o CPU cho phÐp sö dông bus. S¬ ®å khèi cña mét hÖ vi xö lý cã kh¶ n¨ng trao ®æi d÷ liÖu theo kiÓu DMA ®−îc thÓ hiÖn trªn h×nh 8.1. Bus A CPU Bus D DMAC MEM. I/O HOLD HRQ D RQ DRQ HLDA HACK DACK DACK Bus C (c¸c tÝn hiÖu quan träng: IOR, IOW, MEMR, MEMW) H×nh 8.1. HÖ vi xö lý víi DMAC. Ta nhËn thÊy trong hÖ thèng nμy, khi CPU tù t¸ch ra khái hÖ thèng b»ng viÖc tù treo (øng víi vÞ trÝ hiÖn thêi cña c¸c c«ng t¾c chuyÓn m¹ch) ®Ó trao quyÒn sö dông bus cho DMAC th× DMAC ph¶i chÞu tr¸ch nhiÖm ®iÒu khiÓn toμn bé ho¹t ®éng trao ®æi d÷ liÖu cña hÖ thèng. §Ó lμm ®−îc ®iÒu ®ã DMAC ph¶i cã kh¶ n¨ng t¹o ra ®−îc c¸c tÝn hiÖu ®iÒu khiÓn cÇn thiÕt gièng nh− c¸c tÝn hiÖu cña CPU vμ b¶n th©n nã ph¶i 233
  3. lμ mét thiÕt bÞ lËp tr×nh ®−îc (®Ó CPU "dÆn dß" nã b»ng c¸ch ®−a vμo c¸c tõ ®iÒu khiÓn tr−íc khi nã cã thÓ ho¹t ®éng ®éc lËp). Qu¸ tr×nh ho¹t ®éng cña hÖ thèng trªn cã thÓ ®−îc tãm t¾t nh− sau: Khi thiÕt bÞ ngo¹i vi cã yªu cÇu trao ®æi d÷ liÖu kiÓu DMA víi bé nhí, nã ®−a yªu cÇu DRQ=1 ®Õn DMAC, DMAC sÏ ®−a yªu cÇu treo HRQ=1 ®Õn ch©n HOLD cña CPU. NhËn ®−îc yªu cÇu treo, CPU sÏ treo c¸c bus cña m×nh vμ tr¶ lêi chÊp nhËn treo qua tÝn hiÖu HLDA=1 ®Õn ch©n HACK cña DMAC. DMAC sÏ th«ng b¸o cho thiÕt bÞ ngo¹i vi th«ng qua tÝn hiÖu DACK=1 lμ nã cho phÐp thiÕt bÞ ngo¹i vi trao ®æi d÷ liÖu kiÓu DMA. Khi qu¸ tr×nh DMA kÕt thóc th× DMAC ®−a ra tÝn hiÖu HRQ=0. Trong thùc tÕ tån t¹i 3 kiÓu trao ®æi d÷ liÖu b»ng c¸ch th©m nhËp trùc tiÕp vμo bé nhí nh− sau: + Treo CPU mét kho¶ng thêi gian ®Ó trao ®æi c¶ m¶ng d÷ liÖu. + Treo CPU ®Ó trao ®æi tõng byte. + TËn dông thêi gian kh«ng dïng bus cña CPU ®Ó trao ®æi d÷ liÖu. Ta sÏ lÇn l−ît giíi thiÖu qua c¸c kiÓu trao ®æi d÷ liÖu nμy. • Trao ®æi c¶ mét m¶ng d÷ liÖu Trong chÕ ®é nμy CPU bÞ treo trong suèt qu¸ tr×nh trao ®æi m¶ng d÷ liÖu. ChÕ ®é nμy ®−îc dïng khi ta cã nhu cÇu trao ®æi d÷ liÖu víi æ ®Üa hoÆc ®−a d÷ liÖu ra hiÖn thÞ. C¸c b−íc thñ tôc ®Ó chuyÓn mét m¶ng d÷ liÖu tõ bé nhí ra thiÕt bÞ ngo¹i vi: 1. CPU ph¶i ghi tõ ®iÒu khiÓn vμ tõ chÕ ®é lμm viÖc vμo DMAC ®Ó quy ®Þnh c¸ch thøc lμm viÖc, ®Þa chØ ®Çu cña m¶ng nhí, ®é dμi cña m¶ng nhí ... 2. Khi thiÕt bÞ ngo¹i vi cã yªu cÇu trao ®æi d÷ liÖu, nã ®−a DRQ=1 ®Õn DMAC. 3. DMAC ®−a ra tÝn hiÖu HRQ ®Õn ch©n HOLD cña CPU ®Ó yªu cÇu treo CPU. TÝn hiÖu HOLD ph¶i ë møc cao cho ®Õn hÕt qu¸ tr×nh trao ®æi d÷ liÖu. 4. NhËn ®−îc yªu cÇu treo, CPU kÕt thóc chu kú bus hiÖn t¹i, sau ®ã nã treo c¸c bus cña m×nh vμ ®−a ra tÝn hiÖu HLDA b¸o cho DMAC ®−îc toμn quyÒn sö dông bus. 5. DMAC ®−a ra xung DACK ®Ó b¸o cho thiÕt bÞ ngo¹i vi biÕt lμ cã thÓ b¾t ®Çu trao ®æi d÷ liÖu. 6. DMAC b¾t ®Çu chuyÓn d÷ liÖu tõ bé nhí ra thiÕt bÞ ngo¹i vi b»ng c¸ch ®−a ®Þa chØ cña byte ®Çu ra bus ®Þa chØ vμ ®−a ra tÝn hiÖu MEMR=0 ®Ó ®äc 1 byte tõ bé nhí ra bus d÷ liÖu. TiÕp ®ã DMAC ®−a ra tÝn hiÖu IOW=0 ®Ó ghi d÷ liÖu ra thiÕt bÞ ngo¹i vi. DMAC sau ®ã gi¶m bé ®Õm sè byte cßn ph¶i chuyÓn, cËp nhËt ®Þa chØ cña byte cÇn ®äc tiÕp, vμ lÆp l¹i c¸c ®éng t¸c trªn cho tíi khi hÕt sè ®Õm (TC). 234
  4. 7. Khi qu¸ tr×nh DMA kÕt thóc, DMAC cho ra tÝn hiÖu HRQ=0 ®Ó b¸o cho CPU biÕt ®Ó CPU dμnh l¹i quyÒn ®iÒu khiÓn hÖ thèng. • Treo CPU ®Ó trao ®æi tõng byte Trong c¸ch trao ®æi d÷ liÖu nμy CPU kh«ng bÞ treo l©u dμi trong mét lÇn nh−ng thØnh tho¶ng l¹i bÞ treo trong mét kho¶ng thêi gian rÊt ng¾n ®ñ ®Ó trao ®æi 1 byte d÷ liÖu (CPU bÞ lÊy mÊt mét sè chu kú ®ång hå). Do bÞ lÊy ®i mét sè chu kú ®ång hå nh− vËy nªn tèc ®é thùc hiÖn mét c«ng viÖc nμo ®ã cña CPU chØ bÞ suy gi¶m chø kh«ng bÞ dõng l¹i. C¸ch ho¹t ®éng còng t−¬ng tù nh− phÇn tr−íc, chØ cã ®iÒu mçi lÇn DMAC yªu cÇu treo CPU th× chØ cã 1 byte ®−îc trao ®æi. • TËn dông thêi gian CPU kh«ng dïng bus ®Ó trao ®æi d÷ liÖu Trong c¸ch trao ®æi d÷ liÖu nμy, ta ph¶i cã c¸c logic phô bªn ngoμi cÇn thiÕt ®Ó ph¸t hiÖn ra c¸c chu kú xö lý néi bé cña CPU (kh«ng dïng ®Õn bus ngoμi) vμ tËn dông c¸c chu kú ®ã vμo viÖc trao ®æi d÷ liÖu gi÷a thiÕt bÞ ngo¹i vi víi bé nhí. Trong c¸ch lμm nμy th× DMAC vμ CPU lu©n phiªn nhau sö dông bus vμ viÖc th©m nhËp trùc tiÕp bé nhí kiÓu nμy kh«ng ¶nh h−ëng g× tíi ho¹t ®éng b×nh th−êng cña CPU. 2. DMAC 8237A-5 trong hÖ vi xö lý 8088 2.1. TÝn hiÖu HOLD vμ HLDA trong CPU 8088 Hai tÝn hiÖu dïng ®Ó yªu cÇu treo vμ tr¶ lêi chÊp nhËn yªu cÇu treo trong chÕ ®é MIN cña CPU 8088 lμ HOLD vμ HLDA. Quan hÖ gi÷a 2 tÝn hiÖu ®ã ®−îc thÓ hiÖn trªn h×nh 8.2. T4 hoÆc T1 CLK HOLD HLDA H×nh 8.2. Quan hÖ gi÷a HOLD vμ HLDA. 235
  5. TÝn hiÖu yªu cÇu treo HOLD ®−îc lÊy mÉu t¹i s−ên lªn cña xung ®ång hå tr−íc chu kú T4 hoÆc T1. Khi nhËn ®−îc yªu cÇu treo, CPU kÕt thóc chu kú bus hiÖn t¹i, ®−a ra tÝn hiÖu HLDA vμ treo c¸c tÝn hiÖu cña bus A, bus D vμ bus C (trõ tÝn hiÖu ALE=0) ®Ó nh−êng quyÒn sö dông c¸c bus nμy cho DMAC. CÇn l−u ý r»ng ®Çu vμo HOLD cã møc −u tiªn cao h¬n c¸c ®Çu vμo yªu cÇu ng¾t INTR vμ NMI nh−ng l¹i thÊp h¬n so víi ®Çu vμo RESET. §Ó ®¶m b¶o viÖc ®ång bé tÝn hiÖu yªu cÇu treo cña thiÕt bÞ ngo¹i vi víi tÝn hiÖu ®ång hå cña hÖ thèng tr−íc khi ®−a vμo ch©n HOLD cña 8088 ng−êi ta th−êng dïng m¹ch trªn h×nh 8.3. yªu cÇu treo +5V tõ thiÕt bÞ ngo¹i vi pr D Q ®Õn HOLD cña 8088 CLK clk clr RESET H×nh 8.3. §ång bé tÝn hiÖu yªu cÇu treo ®Ó ®−a ®Õn CPU 8088 2.2 M¹ch DMAC 8237A-5 cña Intel Tr−íc khi tr×nh bμy kü vÒ m¹ch DMAC 8237A-5 cña Intel ta nãi qua vÒ c¸c thay ®æi cÇn cã trong nhãm tÝn hiÖu ®iÒu khiÓn ghi/®äc cña hÖ vi xö lý víi CPU 8088 ë chÕ ®é MIN ®Ó sö dông ®−îc m¹ch 8237A-5 lμm DMAC. Nh− trªn h×nh 8.1 ®· thÓ hiÖn t−¬ng ®èi râ, ®Ó thùc hiÖn ®−îc chøc n¨ng DMA trong hÖ, bus ®iÒu cña hÖ vi xö lý víi CPU 8088 ph¶i ®−îc thay ®æi chót Ýt ®Ó cã ®−îc c¸c tÝn hiÖu cÇn thiÕt cho DMAC vμ c¸c bé phËn kh¸c ho¹t ®éng. §ã chÝnh lμ viÖc c¸c tÝn hiÖu RD, WR vμ IO/M ®−îc sö dông ®Ó t¹o c¸c tÝn hiÖu ®iÒu khiÓn míi IOR, IOW, MEMR, MEMW t−¬ng thÝch víi c¸c tÝn hiÖu cña DMAC 8237A-5. H×nh 8.4 tr×nh bμy mét kh¶ n¨ng t¹o ra c¸c tÝn hiÖu ®iÒu khiÓn nh− vËy dïng m¹ch dån kªnh 74LS257. Trong 74LS257 gåm 4 m¹ch ®ån kªnh 2 ®−êng. C¸c tÝn hiÖu RD, WR vμ IO/M ®−îc bè trÝ sao cho khi ®Çu vμo cña m¹ch 74LS257 lμ B=1 th× ta lμm viÖc (ghi/®äc) víi thiÕt bÞ ngo¹i vi víi c¸c xung IOR vμ IOW, ng−îc l¹i khi B=0 th× ta lμm viÖc víi bé nhí víi c¸c xung MEMR vμ MEMW. Trªn h×nh 8.4 ta cßn thÊy tÝn hiÖu AEN cña DMAC còng ®−îc dïng ®Ó kho¸ c¸c tÝn hiÖu ®iÒu khiÓn míi do CPU t¹o ra khi DMAC ®· n¾m quyÒn ®iÒu khiÓn bus. 236
  6. A0 +5V B0 Y0 IOR A1 B1 Y1 IOW '257 A2 RD B2 Y2 MEMR A3 WR B3 Y3 MEMW B OE tõ AEN cña 8237A-5 IO/M H×nh 8.4. Mét c¸ch t¹o c¸c tÝn hiÖu ®iÒu khiÓn míi cho hÖ thèng 8088 ®Ó lμm viÖc víi DMAC 8237A-5 DMAC 8237A-5 th−êng ®−îc dïng ®Ó ®iÒu khiÓn viÖc truyÒn d÷ liÖu gi÷a bé nhí vμ thiÕt bÞ ngo¹i vi. M¹ch 8237A-5 cã thÓ ®iÒu khiÓn truyÒn d÷ liÖu theo 3 kiÓu. A0-A3 Bé gi¶m Bé t¨ng §Öm I/O EOP Thanh ghi t¹m Thanh ghi t¹m Khèi RESET bé ®Õm sè tõ cho ®Þa chØ CS t¹o nhÞp READY A4-A7 §Öm ra CLK AEN vμ §Öm ®äc §Öm ghi/®äc ADSTB MEMW ®iÒu §Þa chØ Sè tõ §Þa chØ Sè tõ MENR c¬ së c¬ së hiÖn t¹i hiÖn t¹i IOR khiÓn IOW A8-A15 §Öm ®äc §Öm ghi HLDA DB0-DB7 Bé m· ho¸ B §Öm I/O T.g. lÖnh HRQ møc −u tiªn DRQ0- vμ logic DRQ3 t¹o −u tiªn Tg mÆt n¹ Th.ghi Thanh T.g.tr¹ng lu©n phiªn ChÕ ®é ghi t¹m DACK0- th¸i DACK3 Tg yªucÇu H×nh 8.5. S¬ ®å khèi cÊu tróc cña DMAC 8237A-5. 237
  7. Trong chÕ ®é truyÒn kiÓu ®äc th× d÷ liÖu ®−îc ®äc tõ bé nhí råi ®−a ra thiÕt bÞ ngo¹i vi. Trong chÕ ®é truyÒn kiÓu ghi th× d÷ liÖu ®−îc ®äc tõ thiÕt bÞ ngo¹i vi råi ®−a vμo bé nhí. Khi 8237A-5 lμm viÖc ë chÕ ®é kiÓm tra th× tuy ®Þa chØ ®−îc ®−a ®Õn bé nhí nh−ng DMAC kh«ng t¹o ra c¸c xung ®iÒu khiÓn ®Ó tiÕn hμnh c¸c thao t¸c ghi/®äc bé nhí hay thiÕt bÞ ngo¹i vi. Ngoμi ra m¹ch 8237A-5 cßn hç trî viÖc trao ®æi d÷ liÖu gi÷a c¸c vïng kh¸c nhau cña bé nhí vμ còng chØ riªng trong chÕ ®é lμm viÖc nμy, d÷ liÖu cÇn trao ®æi míi ph¶i ®i qua DMAC nh−ng víi tèc ®é cao h¬n khi ®i qua CPU (trong tr−êng hîp nμy ta cã thÓ ®äc ®−îc d÷ liÖu ®ã trong thanh ghi t¹m). S¬ ®å khèi cÊu tróc bªn trong cña m¹ch 8237A-5 ®−îc thÓ hiÖn trªn h×nh 8.5. M¹ch DMAC 8237A-5 chøa 4 kªnh trao ®æi d÷ liÖu DMA víi møc −u tiªn lËp tr×nh ®−îc. DMAC 8237A-5 cã tèc ®é truyÒn 1 MB/s cho mçi kªnh, mét kªnh cã thÓ truyÒn 1 m¶ng cã ®é dμi 64 KB. • Giíi thiÖu c¸c ch©n tÝn hiÖu cña 8237A-5 + CLK[I]: tÝn hiÖu ®ång hå cña m¹ch. §Ó m¹ch cã thÓ lμm viÖc tèt víi hÖ 8088 th× tÝn hiÖu CLK cña hÖ thèng th−êng ®−îc ®¶o tr−íc khi ®−a vμo CLK cña 8237A-5. + CS [I]: tÝn hiÖu chän vá cña 8237A-5. Ch©n nμy th−êng ®−îc nèi víi ®Çu ra cña bé gi¶i m· ®Þa chØ. Bé gi¶i m· ®Þa chØ nμy kh«ng cÇn dïng ®Õn ®Çu vμo IO/M v× b¶n th©n DMAC ®· ®−îc cung cÊp c¸c xung ®iÒu khiÓn míi cña hÖ thèng. + RESET[I]: tÝn hiÖu nèi víi tÝn hiÖu khëi ®éng hÖ thèng. Khi m¹ch 8237A-5 ®−îc khëi ®éng riªng thanh ghi mÆt n¹ ®−îc lËp cßn c¸c bé phËn sau ®©y bÞ xo¸: - thanh ghi lÖnh - thanh ghi tr¹ng th¸i - thanh ghi yªu cÇu DMA - thanh ghi t¹m thêi - m¹ch lËt byte ®Çu/byte cuèi (First/Last) . + READY [I]: tÝn hiÖu s½n sμng, nèi víi READY cña hÖ thèng ®Ó g©y ra c¸c chu kú ®îi ®èi víi c¸c thiÕt bÞ ngo¹i vi hoÆc bé nhí chËm. + HLDA [I]: tÝn hiÖu b¸o chÊp nhËn yªu cÇu treo tõ CPU. + DRQ0-DRQ3 [I]: c¸c tÝn hiÖu yªu cÇu treo tõ thiÕt bÞ ngo¹i vi. Cùc tÝnh cña c¸c tÝn hiÖu nμy cã thÓ lËp tr×nh ®−îc. Sau khi khëi ®éng c¸c tÝn hiÖu nμy ®−îc ®Þnh nghÜa lμ c¸c tÝn hiÖu kÝch ho¹t møc cao (tÝch cùc cao). + DB0-DB7 [I,O]: tÝn hiÖu 2 chiÒu nèi ®Õn bus ®Þa chØ vμ bus d÷ liÖu cña hÖ thèng, c¸c tÝn hiÖu nμy ®−îc dïng khi lËp tr×nh cho DMAC vμ khi DMAC ho¹t ®éng. Khi DMAC ho¹t ®éng c¸c ch©n nμy chøa 8 bit ®Þa chØ cao A8-A15 cña m¶ng nhí d÷ 238
  8. liÖu cÇn chuyÓn. Trong chÕ ®é chuyÓn d÷ liÖu gi÷a c¸c vïng cña bé nhí t¹i c¸c ch©n nμy cã c¸c d÷ liÖu ®−îc chuyÓn. + IOR [I,O] vμ IOW [I,O]: lμ c¸c ch©n tÝn hiÖu 2 chiÒu dïng trong khi lËp tr×nh cho DMAC vμ trong c¸c chu kú ®äc vμ ghi. + EOP [I,O]: lμ tÝn hiÖu 2 chiÒu. Khi lμ ®Çu vμo nã ®−îc dïng ®Ó b¾t buéc DMAC kÕt thóc qu¸ tr×nh DMA. Khi lμ ®Çu ra nã ®−îc dïng ®Ó b¸o cho bªn ngoμi biÕt mét kªnh nμo ®ã ®· chuyÓn xong sè byte theo yªu cÇu (Terminal count, TC), lóc nμy nã th−êng ®−îc dïng nh− mét yªu cÇu ng¾t ®Ó CPU xö lý viÖc kÕt thóc qu¸ tr×nh DMA. +A0-A3 [I,O]: lμ c¸c tÝn hiÖu 2 chiÒu dïng ®Ó chän c¸c thanh ghi trong 8237A- 5 khi lËp tr×nh vμ khi ®äc (®Çu vμo), hoÆc ®Ó chøa 4 bit ®Þa chØ thÊp nhÊt cña ®Þa chØ m¶ng nhí cÇn chuyÓn (®Çu ra). +A4-A7 [O]: c¸c ch©n ®Ó chøa 4 bit ®Þa chØ phÇn cao trong byte ®Þa chØ thÊp cña ®Þa chØ m¶ng nhí cÇn chuyÓn. + HRQ [O]: tÝn hiÖu yªu cÇu treo ®Õn CPU. TÝn hiÖu nμy th−êng ®−îc ®ång bé víi tÝn hiÖu CLK cña hÖ thèng råi ®−îc ®−a ®Õn ch©n HOLD cña 8088. +DACK0-DACK3 [O]: lμ c¸c tÝn hiÖu tr¶ lêi c¸c yªu cÇu DMA cho c¸c kªnh. C¸c tÝn hiÖu nμy cã thÓ ®−îc lËp tr×nh ®Ó ho¹t ®éng theo møc thÊp hoÆc møc cao. Sau khi khëi ®éng, c¸c tÝn hiÖu nμy ®−îc ®Þnh nghÜa lμ c¸c xung tÝch cùc thÊp. + AEN [O]: tÝn hiÖu cho phÐp m¹ch chèt nèi vμo DB0-DB7 chèt lÊy ®Þa chØ cña vïng nhí cÇn trao ®æi theo kiÓu DMA. TÝn hiÖu nμy còng cho phÐp cÊm c¸c m¹ch ®Öm bus ®Þa chØ vμ d÷ liÖu hoÆc m¹ch t¹o tÝn hiÖu ®iÒu khiÓn cña CPU nèi vμo c¸c bus t−¬ng øng khi DMAC ho¹t ®éng. + ADSTB [O]: xung cho phÐp chèt c¸c bit ®Þa chØ phÇn cao A8-A15 cã mÆt trªn DB0-DB7. + MEMR [O] vμ MEMW [O]: lμ c¸c ch©n tÝn hiÖu do DMAC t¹o ra vμ dïng khi ®äc/ghi bé nhí trong khi ho¹t ®éng. • C¸c thanh ghi bªn trong cña DMAC 8237A-5 C¸c thanh ghi bªn trong DMAC 8237A-5 ®−îc CPU 8088 chän ®Ó lμm viÖc nhê c¸c bit ®Þa chØ thÊp A0-A3. B¶ng 8.1 chØ ra c¸ch thøc chän ra c¸c thanh ghi ®ã. C¸c thanh ghi trong b¶ng trªn cã thÓ ®−îc ghi, ®äc hoÆc chØ ghi vμo vμ chóng chøa c¸c th«ng tin kh¸c nhau liªn quan ®Õn c¸ch thøc lμm viÖc vμ c¸c th«ng sè cña mçi kªnh DMA. Trong b¶ng 8.2 vμ 8.3 liÖt kª c¸c thanh ghi trªn theo c¸c quan ®iÓm øng dông kh¸c nhau ®Ó dÔ tra cøu ®Þa chØ cho chóng khi lËp tr×nh víi DMAC 8237A-5. 239
  9. B¶ng 8.1. §Þa chØ c¸c thanh ghi bªn trong cña 8237A-5. Bit ®Þa chØ §Þa chØ Chän chøc n¨ng R/W? A3A2A1A0 Hex 0000 x0 Thanh ghi ®Þa chØ bé nhí kªnh C0 R/W 0001 x1 Thanh ghi ®Õm sè tõ kªnh C0 R/W 0010 x2 Thanh ghi ®Þa chØ bé nhí kªnh C1 R/W 0011 x3 Thanh ghi ®Õm sè tõ kªnh C1 R/W 0100 x4 Thanh ghi ®Þa chØ bé nhí kªnh C2 R/W 0101 x5 Thanh ghi ®Õm sè tõ kªnh C2 R/W 0110 x6 Thanh ghi ®Þa chØ bé nhí kªnh C3 R/W 0111 x7 Thanh ghi ®Õm sè tõ kªnh C3 R/W 1000 x8 Thanh ghi tr¹ng th¸i/lÖnh R/W 1001 x9 Thanh ghi yªu cÇu DMA W 1010 xA Thanh ghi mÆt n¹ cho 1 kªnh W 1011 xB Thanh ghi chÕ ®é W 1100 xC Xo¸ m¹ch lËt First/Last W 1101 xD Xo¸ toμn bé c¸c thanh ghi /®äc thanh ghi t¹m W/R 1110 xE Xo¸ thanh ghi mÆt n¹ cho 4 kªnh W 1111 xF Thanh ghi mÆt n¹ cho 4 kªnh W Ghi chó: x do cs quyÕt ®Þnh B¶ng 8.2. §Þa chØ c¸c thanh ghi trong ®Ó ghi/®äc ®Þa chØ vμ sè tõ cÇn chuyÓn. Kªnh CS IOR IOW A3 A2 A1 A0 Thanh ghi R /W? C0 0 1 0 0 0 0 0 ®Þa chØ c¬ së vμ ®Þa chØ hiÖn t¹i W 0 0 1 0 0 0 0 ®Þa chØ hiÖn t¹i R 0 1 0 0 0 0 1 bé ®Õm c¬ së vμ bé ®Õm hiÖn t¹i W 0 0 1 0 0 0 1 bé ®Õm hiÖn t¹i R C1 0 1 0 0 0 1 0 ®Þa chØ c¬ së vμ ®Þa chØ hiÖn t¹i W 0 0 1 0 0 1 0 ®Þa chØ hiÖn t¹i R 0 1 0 0 0 1 1 bé ®Õm c¬ së vμ bé ®Õm hiÖn t¹i W 0 0 1 0 0 1 1 bé ®Õm hiÖn t¹i R C2 0 1 0 0 1 0 0 ®Þa chØ c¬ së vμ ®Þa chØ hiÖn t¹i W 0 0 1 0 1 0 0 ®Þa chØ hiÖn t¹i R 0 1 0 0 1 0 1 bé ®Õm c¬ së vμ bé ®Õm hiÖn t¹i W 0 0 1 0 1 0 1 bé ®Õm hiÖn t¹i R C3 0 1 0 0 1 1 0 ®Þa chØ c¬ së vμ ®Þa chØ hiÖn t¹i W 0 0 1 0 1 1 0 ®Þa chØ hiÖn t¹i R 0 1 0 0 1 1 1 bé ®Õm c¬ së vμ bé ®Õm hiÖn t¹i W 0 0 1 0 1 1 1 bé ®Õm hiÖn t¹i R 240
  10. B¶ng 8.3. §Þa chØ c¸c thanh ghi cho ®iÒu khiÓn vμ tr¹ng th¸i. A3 A2 A1 A0 IOR IOW Thao t¸c 1 0 0 0 0 1 ®äc thanh ghi tr¹ng th¸i 1 0 0 0 1 0 ghi thanh ghi lÖnh 1 0 0 1 0 1 kh«ng hîp lÖ 1 0 0 1 1 0 ghi thanh ghi yªu cÇu DMA 1 0 1 0 0 1 kh«ng hîp lÖ 1 0 1 0 1 0 ghi thanh ghi mÆt n¹ cho 1 kªnh 1 0 1 1 0 1 kh«ng hîp lÖ 1 0 1 1 1 0 ghi thanh ghi chÕ ®é 1 1 0 0 0 1 kh«ng hîp lÖ 1 1 0 0 1 0 xo¸ m¹ch lËt First/Last 1 1 0 1 0 1 ®äc thanh ghi t¹m 1 1 0 1 1 0 xo¸ toμn bé c¸c thanh ghi bªn trong 1 1 1 0 0 1 kh«ng hîp lÖ 1 1 1 0 1 0 xo¸ thanh ghi mÆt n¹ cña 4 kªnh 1 1 1 1 0 1 kh«ng hîp lÖ 1 1 1 1 1 0 ghi thanh ghi mÆt n¹ cho 4 kªnh Ta sÏ giíi thiÖu qua c¸c ®Æc ®iÓm cña mét sè trong c¸c thanh ghi kÓ trªn. + Thanh ghi ®Þa chØ hiÖn thêi: §©y lμ thanh ghi 16 bit dïng ®Ó chøa ®Þa chØ cña vïng nhí ph¶i chuyÓn. Mçi kªnh cã riªng thanh ghi nμy ®Ó chøa ®Þa chØ. Khi 1 byte ®−îc truyÒn ®i, c¸c thanh ghi nμy tù ®éng t¨ng hay gi¶m tuú theo tr−íc ®ã nã ®−îc lËp tr×nh nh− thÕ nμo. + Thanh ghi sè ®Õm hiÖn thêi: Thanh ghi 16 bit nμy dïng ®Ó chøa sè byte mμ kªnh ph¶i truyÒn (nhiÒu nhÊt lμ 64KB). Mçi kªnh cã thanh ghi sè byte cña m×nh. C¸c thanh ghi nμy ®−îc ghi b»ng sè ®Õm nhá h¬n 1 so víi sè byte thùc chuyÓn. + Thanh ghi ®Þa chØ c¬ së vμ thanh ghi sè ®Õm c¬ së: c¸c thanh ghi nμy ®−îc dïng ®Ó chøa ®Þa chØ vμ sè ®Õm cho mçi kªnh khi chÕ ®é tù khëi ®Çu ®−îc sö dông. Trong chÕ ®é nμy khi mét qu¸ tr×nh DMA kÕt thóc th× c¸c thanh ghi ®Þa chØ hiÖn thêi vμ sè ®Õm hiÖn thêi ®−îc n¹p l¹i gi¸ trÞ cò lÊy tõ thanh ghi ®Þa chØ c¬ së vμ thanh ghi sè ®Õm c¬ së. Khi c¸c thanh ghi ®Þa chØ hiÖn thêi vμ sè ®Õm hiÖn thêi ®−îc lËp tr×nh th× c¸c thanh ghi ®Þa chØ c¬ së vμ thanh ghi sè ®Õm c¬ së còng ®−îc lËp tr×nh bÊt kÓ chÕ ®é tù khëi ®Çu cã ®−îc sö dông hay kh«ng. + Thanh ghi lÖnh: Thanh ghi nμy dïng ®Ó lËp tr×nh cho DMAC. Nã bÞ xo¸ khi khëi ®éng hoÆc khi ta sö dông lÖnh xo¸ toμn bé c¸c thanh ghi. D¹ng thøc cña thanh ghi lÖnh ®−îc biÓu diÔn trªn h×nh 8.6. 241
  11. 7 6 5 4 3 2 1 0 1: truyÒn bé nhí → bé nhí 1: DACK 0: CÊm truyÒn bé nhí →bé nhí 0: DACK 1: Kªnh 0 ®−îc gi÷ nguyªn ®Þa chØ 0: CÊm kªnh 0 gi÷ nguyªn ®Þa chØ 1: DRQ d¹ng x: NÕu bit0 = 0 0: DRQ d¹ng 1: Ghi b×nh th−êng 1: DMAC ®−îc phÐp ho¹t ®éng 0: Ghi kÐo dμi 0: DMAC bÞ cÊm ho¹t ®éng x: NÕu bit3 =1 1: NhÞp rót ng¾n 1: Møc −u tiªn ®Æt s½n 0: NhÞp b×nh th−êng 0: Møc −u tiªn lu©n phiªn x: NÕu bit0 =1 H×nh 8.6. D¹ng thøc cña thanh ghi lÖnh. C¸c bit cña thanh ghi nμy quyÕt ®Þnh c¸c ph−¬ng thøc lμm viÖc kh¸c nhau cña 8237A-5. Ta sÏ gi¶i thÝch sau ®©y ý nghÜa cña c¸c bit. Bit D0 cho phÐp DMAC dïng kªnh 0 vμ kªnh 1 ®Ó chuyÓn d÷ liÖu gi÷a 2 vïng nhí. §Þa chØ cña byte d÷ liÖu ë vïng gèc ®−îc chøa trong thanh ghi ®Þa chØ cña kªnh 0, cßn ®Þa chØ cña byte d÷ liÖu ë vïng ®Ých ®−îc chøa trong thanh ghi ®Þa chØ cña kªnh 1. Sè byte cÇn chuyÓn ®−îc ®Ó trong thanh ghi ®Õm cña kªnh 1. Byte cÇn chuyÓn lóc ®Çu ®−îc ®äc tõ vïng gèc vμo thanh ghi t¹m ®Ó råi tõ ®ã nã ®−îc göi ®Õn vïng ®Ých trong b−íc tiÕp theo (ho¹t ®éng nh− lÖnh MOVSB nh−ng víi tèc ®é cao). Bit D1=1 dïng ®Ó cho phÐp kªnh 0 gi÷ nguyªn ®Þa chØ trong chÕ ®é truyÒn d÷ liÖu gi÷a 2 vïng nhí. §iÒu nμy khiÕn cho toμn bé c¸c « nhí vïng ®Ých ®−îc n¹p cïng mét byte d÷ liÖu. Bit D2 cho phÐp DMAC ho¹t ®éng hay kh«ng. Bit D3 quyÕt ®Þnh byte cÇn chuyÓn ®−îc truyÒn víi 4 hay 2 chu kú ®ång hå. Bit D4 cho phÐp chän chÕ ®é −u tiªn cè ®Þnh (kªnh 0 cã møc −u tiªn cao nhÊt, kªnh 3 cã møc −u tiªn thÊp nhÊt) hoÆc chÕ ®é −u tiªn lu©n phiªn (kªnh 0 lóc ®Çu cã møc −u tiªn cao nhÊt, sau khi kªnh nμy ®−îc chän ®Ó chuyÓn d÷ liÖu th× nã ®−îc nhËn møc −u tiªn thÊp nhÊt, kªnh 1 l¹i trë thμnh kªnh cã møc −u tiªn cao nhÊt...). Bit D5 cho phÐp chän thêi gian ghi b×nh th−êng hay kÐo dμi cho thiÕt bÞ ngo¹i vi chËm. C¸c bit D6 vμ D7 cho phÐp chän cùc tÝnh tÝch cùc cña c¸c xung DRQ0-DRQ4 vμ DACK0-DACK4. 242
  12. 7 6 5 4 3 2 1 0 00: DMA theo yªu cÇu 00: Chän kªnh 0 01: ChÕ ®é chuyÓn 1byte 01: Chän kªnh 1 10: ChÕ ®é chuyÓn m¶ng 10: Chän kªnh 2 11: ChÕ ®é nèi tÇng 11: Chän kªnh 3 00: ChÕ ®é kiÓm tra 1: §Þa chØ gi¶m 01: ChÕ ®é ghi 0: §Þa chØ t¨ng 10: ChÕ ®é ®äc 11: Kh«ng hîp lÖ 1: Cho phÐp tù khëi ®Çu xx: Khi D7D6 =11 0: CÊm tù khëi ®Çu H×nh 8.7. D¹ng thøc cña thanh ghi chÕ ®é. + Thanh ghi chÕ ®é: Dïng ®Æt chÕ ®é lμm viÖc cho c¸c kªnh cña DMAC. Mçi kªnh cña DMAC cã mét thanh ghi chÕ ®é riªng. D¹ng thøc cña thanh ghi chÕ ®é ®−îc biÓu diÔn trªn h×nh 8.7. Trong hÕ ®é DMA theo yªu cÇu, DMAC tiÕn hμnh chuyÓn d÷ liÖu cho ®Õn khi cã tÝn hiÖu EOP tõ bªn ngoμi hoÆc cho ®Õn khi kh«ng cßn yªu cÇu DMA n÷a (DRQ trë nªn kh«ng tÝch cùc). Trong chÕ ®é DMA chuyÓn tõng byte, chõng nμo vÉn cßn yªu cÇu DMA (DRQ vÉn lμ tÝch cùc) th× DMAC ®−a ra HRQ=0 trong thêi gian 1 chu kú bus sau mçi lÇn chuyÓn xong mét byte, sau ®ã nã l¹i ®−a ra HRQ=1. Cø nh− vËy DMAC vμ CPU lu©n phiªn nhau sö dông bus cho ®Õn khi ®Õm hÕt (TC). Trong chÕ ®é DMA chuyÓn c¶ m¶ng, c¶ mét m¶ng gåm mét sè byte b»ng néi dung bé ®Õm ®−îc chuyÓn liÒn mét lóc. Ch©n yªu cÇu chuyÓn d÷ liÖu DRQ kh«ng cÇn ph¶i ®−îc gi÷ ë møc tÝch cùc suèt trong qu¸ tr×nh chuyÓn. ChÕ ®é nèi tÇng ®−îc dïng khi cã nhiÒu bé DMAC ®−îc dïng trong hÖ thèng ®Ó më réng sè kªnh cã thÓ yªu cÇu DMA. + Thanh ghi yªu cÇu: Yªu cÇu DMA cã thÓ ®−îc thiÕt lËp/xo¸ theo ý muèn b»ng ch−¬ng tr×nh. §iÒu nμy rÊt cã lîi khi ta muèn chuyÓn d÷ liÖu gi÷a c¸c vïng kh¸c nhau cña bé nhí. Lóc nμy c¸c kªnh liªn quan ph¶i ®−îc lËp tr×nh ë chÕ ®é chuyÓn c¶ m¶ng. D¹ng thøc cña thanh ghi yªu cÇu ®−îc biÓu diÔn trªn h×nh 8.8. 243
  13. 7 6 5 4 3 2 1 0 x x x x x 00: Chän kªnh 0 1: ThiÕt lËp yªu cÇu 01: Chän kªnh 1 0: Xo¸ yªu cÇu 10: Chän kªnh 2 11: Chän kªnh 3 H×nh 8.8. D¹ng thøc cña thanh ghi yªu cÇu. + Thanh ghi mÆt n¹ riªng cho tõng kªnh: B»ng thanh ghi nμy ta cã thÓ lËp tr×nh ®Ó cÊm (cho bit mÆt n¹ t−¬ng øng b»ng 1) hay cho phÐp ho¹t ®éng (cho bit mÆt n¹ t−¬ng øng b»ng 0) ®èi víi tõng kªnh mét. D¹ng thøc cña thanh ghi mÆt n¹ riªng rÏ cho tõng kªnh ®−îc biÓu diÔn trªn h×nh 8.9. + Thanh ghi mÆt n¹ tæng hîp: Víi thanh ghi nμy ta cã thÓ lËp tr×nh ®Ó cÊm (cho bit mÆt n¹ t−¬ng øng b»ng 1) hay cho phÐp ho¹t ®éng (cho bit mÆt n¹ t−¬ng øng b»ng 0) ®èi víi tõng kªnh chØ b»ng mét lÖnh. D¹ng thøc cña thanh ghi mÆt n¹ tæng hîp ®−îc biÓu diÔn trªn h×nh 8.10. 7 6 5 4 3 2 1 0 x x x x x 00: Chän kªnh 0 1: ThiÕt lËp mÆt n¹ 01: Chän kªnh 1 0: Xo¸ mÆt n¹ 10: Chän kªnh 2 (x: kh«ng quan t©m) 11: Chän kªnh 3 H×nh 8.9. D¹ng thøc cña thanh ghi mÆt n¹ riªng cho mçi kªnh. 7 6 5 4 3 2 1 0 x x x x 1: LËp mÆt n¹ cho kªnh 3 1: LËp mÆt n¹ cho kªnh 0 0: Xo¸ mÆt n¹ cho kªnh 3 0: Xo¸ mÆt n¹ cho kªnh 0 1: LËp mÆt n¹ cho kªnh 2 1: LËp mÆt n¹ cho kªnh 1 0: Xo¸ mÆt n¹ cho kªnh 2 0: Xo¸ mÆt n¹ cho kªnh 1 H×nh 8.10. D¹ng thøc cña thanh ghi mÆt n¹ tæng hîp. 244
  14. + Thanh ghi tr¹ng th¸i: Thanh ghi nμy cho phÐp x¸c ®Þnh tr¹ng th¸i cña c¸c kªnh trong DMAC: kªnh nμo ®· truyÒn xong (®¹t sè ®Õm, TC), kªnh nμo ®ang cã yªu cÇu DMA ®Ó trao ®æi d÷ liÖu. Khi mét kªnh nμo ®ã ®¹t TC, kªnh ®ã sÏ tù ®éng bÞ cÊm. D¹ng thøc cña thanh ghi tr¹ng th¸i ®−îc biÓu diÔn trªn h×nh 8.11. • C¸c lÖnh ®Æc biÖt cho DMAC 8237A-5 Cã 3 lÖnh ®Æc biÖt ®Ó ®iÒu khiÓn ho¹t ®éng cña DMAC 8237A-5. C¸c lÖnh nμy thùc hiÖn chØ b»ng c¸c lÖnh OUT víi c¸c ®Þa chØ cæng x¸c ®Þnh tuú theo c¸c thanh ghi mμ kh«ng cÇn ®Õn gi¸ trÞ cô thÓ cña thanh ghi AL. 7 6 5 4 3 2 1 0 1: Kªnh 0 cã yªu cÇu 1: Kªnh 0 ®¹t sè ®Õm 1: Kªnh 1 cã yªu cÇu 1: Kªnh 1 ®¹t sè ®Õm 1: Kªnh 2 cã yªu cÇu 1: Kªnh 2 ®¹t sè ®Õm 1: Kªnh 3 cã yªu cÇu 1: Kªnh 3 ®¹t sè ®Õm H×nh 8.11. D¹ng thøc cña thanh ghi tr¹ng th¸i. + LÖnh xo¸ m¹ch lËt byte ®Çu/byte cuèi (First/Last, F/L): F/L lμ mét m¹ch lËt bªn trong DMAC ®Ó chØ ra byte nμo trong c¸c thanh ghi 16 bit (thanh ghi ®Þa chØ hoÆc thanh ghi sè ®Õm ®−îc chän lμm viÖc. NÕu F/L=1 th× ®ã lμ MSB, cßn nÕu F/L=0 th× ®ã lμ LSB. M¹ch lËt F/L tù ®éng thay ®æi tr¹ng th¸i khi ta ghi/®äc c¸c thanh ghi ®ã. Khi khëi ®éng xong th× F/L=0. + LÖnh xo¸ toμn bé c¸c thanh ghi: lÖnh nμy cã t¸c ®éng nh− thao t¸c khëi ®éng. TÊt c¶ c¸c thanh ghi ®Òu bÞ xo¸ riªng thanh ghi mÆt n¹ tæng hîp th× ®−îc lËp ®Ó cÊm c¸c yªu cÇu trao ®æi d÷ liÖu. + LÖnh xo¸ thanh ghi mÆt n¹ tæng hîp: lÖnh nμy cho phÐp c¸c kªnh cña DMAC b¾t ®Çu yªu cÇu trao ®æi d÷ liÖu. • LËp tr×nh cho c¸c thanh ghi ®Þa chØ vμ thanh ghi sè ®Õm ViÖc lËp tr×nh cho c¸c thanh ghi ®Þa chØ vμ thanh ghi sè ®Õm ®−îc thùc hiÖn riªng cho mçi kªnh. CÇn ph¶i ®Þnh tr−íc gi¸ trÞ logic cña F/L ®Ó thao t¸c chÝnh x¸c ®−îc víi LSB vμ MSB cña c¸c thanh ghi trªn. Ngoμi ra cßn ph¶i cÊm c¸c yªu cÇu DMA cña c¸c kªnh trong khi lËp tr×nh cho chóng. 245
  15. Cã thÓ tu©n theo c¸c b−íc sau ®©y ®Ó lËp tr×nh cho DMAC 8237A-5: + Xo¸ m¹ch lËt F/L + CÊm c¸c yªu cÇu cña c¸c kªnh + Ghi LSB råi MSB cña thanh ghi ®Þa chØ + Ghi LSB råi MSB cña thanh ghi sè ®Õm • Nèi DMAC 8237A-5 víi CPU 8088 ë chÕ ®é MIN ViÖc phèi ghÐp m¹ch 8237A-5 víi 8088 ®−îc thÓ hiÖn trªn h×nh 8.12. TÝn hiÖu cña 8237A-5 AEN=0 khi CPU kiÓm so¸t ho¹t ®éng cña toμn hÖ. C¸c bit ®Þa chØ A16-A19 vμ A0-A7 sÏ ®−îc chèt bëi U1 vμ U3 ®Ó ®−a ra bus ®Þa chØ. C¸c tÝn hiÖu ®iÒu khiÓn dÉn xuÊt tõ CPU còng ®−îc ®−a ra bus ®iÒu khiÓn bëi m¹ch dån kªnh U5 (74LS257). Khi DMAC n¾m quyÒn chØ huy hÖ thèng th× AEN=1 sÏ cÊm c¸c chèt U1 vμ U3 më th«ng tõ CPU ra bus, nh−ng l¹i cho phÐp chèt U2 vμ më chèt U4 cña DMAC ®Ó cung cÊp c¸c bit ®Þa chØ A16-A19 vμ A8-A15. C¸c bit ®Þa chØ kh¸c lμ A0-A7 vμ c¸c tÝn hiÖu MEMR, MEMR, IOR, IOW sÏ ®−îc lÊy trùc tiÕp tõ DMAC. Xung ADSTB sÏ cho phÐp më m¹ch chèt U4 ®Ó ®−a ra c¸c bit ®Þa chØ A8-A15 ®−îc chèt tõ bus D cña 8237A-5. V× DMAC 8237A-5 chØ cã kh¶ n¨ng cung cÊp c¸c bit ®Þa chØ A0-A15, gi¸ trÞ cña c¸c bit A16-A19 ®−îc ghi vμo chèt U2 (74LS373) nhê lÖnh OUT víi ®Þa chØ cæng ®−îc gi¶i m· nhê m¹ch gi¶i m· ®Þa chØ U6, m¹ch gi¶i m· ®Þa chØ nμy ®ång thêi còng cung cÊp xung chän vá cho 8237A-5. Trªn h×nh 8.12 ®Ó cho viÖc gi¶i thÝch trë nªn ®¬n gi¶n míi chØ biÓu diÔn c¸ch t¹o ra c¸c bit ®Þa chØ cao nhÊt cho mét kªnh. Trong thùc tÕ ®Ó lμm viÖc nμy cho tÊt c¶ c¸c kªnh (nh− trong c¸c m¸y IBM-PC), ta cã thÓ dïng vi m¹ch chuyªn dông 74LS670 (4 thanh ghi x 4 bit) ®Ó lμm thanh ghi trang DMA cho c¶ 4 kªnh cña DMAC. TÊt nhiªn ta ph¶i nèi l¹i c¸c tÝn hiÖu cho ®óng. • Mét vÝ dô truyÒn d÷ liÖu gi÷a 2 vïng nhí ViÖc dïng chÕ ®é DMA ®Ó chuyÓn d÷ liÖu gi÷a c¸c vïng kh¸c nhau cña bé nhí cho phÐp ®¹t ®−îc tèc ®é truyÒn cao h¬n so víi víi viÖc dïng c¸c lÖnh chuyÓn d÷ liÖu Rep MOVSB cña CPU. NÕu lÊy vÝ dô víi tr−êng hîp DMAC 8237A-5 vμ CPU 8088 5MHz th× tèc ®é truyÒn cña DMAC cao h¬n cì 2 lÇn. Sau ®©y lμ mét vÝ dô sö dông 8237A-5 ®Ó chuyÓn d÷ liÖu gi÷a 2 vïng nhí. Gi¶ thiÕt ta ph¶i chuyÓn mét sè byte d÷ liÖu tõ vïng nhí cã ®Þa chØ ®Çu lμ 10000H sang vïng nhí kh¸c cã chØ ®Çu lμ 14000H trong mét hÖ thèng cã s¬ ®å phÇn DMAC vμ CPU dùa trªn h×nh 8.12. Ta cã thÓ dïng ch−¬ng tr×nh MemTrans.asm ®Ó gi¶i quyÕt c«ng viÖc nμy. 246
  16. U1 '373 A16/So - A16-A19 G OC A19/S3 8088 U2 '373 OC G IOW A8-A15 A8-A15 U3 '373 Ao-A7 G OC ALE ADo-AD7 Do-D7 U4 '373 G OC A4-A7 HLDA U6 D0-D7 AEN ADSTB A0-A7 HOLD HLDA Q D Gi¶i m· Dmac 8237A-5 HRQ CS clk '138 clr MEMR,IOR CLK RESET AEN MEMW,IOW clk vμ reset CLK tõ 8284 U5 OE WR '257 RD IOR,IOW B MN/MX IO/M MEMR, MEMW +5V H×nh 8.12. S¬ ®å phèi ghÐp 8088 ë chÕ ®é min víi 8237A-5. 247
  17. Trong ch−¬ng tr×nh nμy, ®Çu tiªn ta göi 4 bit ®Þa chØ cao nhÊt ra chèt U1, sau ®ã ta xo¸ m¹ch lËt F/L råi göi ®Þa chØ cña vïng gèc vμ vïng ®Ých ra c¸c thanh ghi t−¬ng øng cña kªnh 0 vμ kªnh 1. Sè byte cÇn chuyÓn ph¶i ®−îc ®−a vμo bé ®Õm cña kªnh 1. TiÕp theo ta chän chÕ ®é cho mçi kªnh. Ta ph¶i ®−a ra tõ ®iÒu khiÓn ®Ó cho DMAC lμm viÖc ë chÕ ®é chuyÓn c¶ m¶ng. Kªnh 0 sau ®ã ®−îc cho phÐp ho¹t ®éng vμ kÝch ho¹t b»ng ch−¬ng tr×nh. Trong qu¸ tr×nh chuyÓn d÷ liÖu ta kiÓm tra thanh ghi tr¹ng th¸i ®Ó dõng ch−¬ng tr×nh khi ®¹t sè ®Õm (TC). Ch−¬ng tr×nh MemTrans.asm Model Small .Stack 100 .Data CHOT_U2 EQU 10H ; ®Þa chØ chèt U2 ML_FL EQU 7CH ; ®Þa chØ m¹ch lËt F/L DCHI_C0 EQU 70H ; ®Þa chØ cña tgdc kªnh 0 DCHI_C1 EQU 72H ; ®Þa chØ cña tgdc kªnh 1 TGDEM_C1 EQU 73H ; ®Þa chØ tg ®Õm kªnh 1 TGCHEDO EQU 7BH ; ®Þa chØ tg chÕ ®é TGLENH EQU 78H ; ®Þa chØ tg lÖnh TGMATNA EQU 7FH ; ®Þa chØ tg mÆt n¹ TGYEUCAU EQU 79H ; ®Þa chØ tg yªu cÇu TGTTHAI EQU 78H ; ®Þa chØ tg tr¹ng th¸i SOBYTE DW 100H ; sè byte ph¶i chuyÓn A16_A19 DB 01H ; 4 bit ®Þa chØ cao nhÊt DCHIGOC DW 0000H ; 16 bit ®Þa chØ cña gèc DCHIDIC DW 4000H ; 16 bit ®Þa chØ cña ®Ých .Code Main Proc Mov AX,@Data ; khëi ®Çu DS Mov DS,AX MOV AL,A16_A19 ; ghi ®Þa chØ cao vμo chèt OUT CHOT_U2,AL OUT ML_FL,AL ; xo¸ m¹ch lËt F/L Mov AX,DCHIGOC ; ®Þa chØ cho kªnh 0 OUT DCHI_C0,AL MOV AL,AH OUT DCHI_C0,AL Mov AX,DCHIDIC ; ®Þa chØ cho kªnh 1 OUT DCHI_C1,AL MOV AL,AH OUT DCHI_C1,AL DEC SOBYTE ; gi¶m sè ®Õm cho kªnh 1 Mov AX,SOBYTE OUT TGDEM_C1,AL 248
  18. MOV AL,AH OUT TGDEM_C1,AL MOV AL,88H ; thiÕt lËp chÕ ®é kªnh 0 OUT TGCHEDO,AL MOV AL,85H ; thiÕt lËp chÕ ®é kªnh 1 OUT TGCHEDO,AL MOV AL,1 ; chÕ ®é chuyÓn m¶ng OUT TGLENH,AL MOV AL,0CH ; bá mÆt n¹ cho kªnh 0,1 OUT TGMATNA,AL MOV AL,4 ; cho kªnh 0 yªu cÇu DMA OUT TGYEUCAU,AL LAP:IN AL,TGTTHAI ; ®äc thanh ghi tr¹ng th¸i TEST AL,2 ; kªnh 1 ®¹t TC ? JZ LAP ; chê cho tíi khi xong Main Endp End Main 249
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2