當前位置:首頁 » 服務存儲 » 外部存儲器怎樣與內部數據交換
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

外部存儲器怎樣與內部數據交換

發布時間: 2022-11-20 10:46:33

A. 存儲器的外存可以直接與cpu交換信息

是一道判斷題吧,這個命題是錯誤的。
外存相對於內存而言,指的是硬碟,光碟,優盤之類設備。
CPU任何時候都不能直接讀取外存的信息,不能和外存交換數據和信息。
外存中存儲的是文件,必須先將信息提取到內存,然後CPU才能從內存中讀取並處理這些信息。

B. 數據存儲的內存和外存

外存儲器的作用不同,但是容量小。內存儲器和外存儲器之間常常頻繁地交換信息。
需要指出的是外存儲器也屬於輸入輸出設備,但是存取速度慢,及一些高速緩存。內存儲器用於存放那些立即要用的程序和數據;外存儲器用於存放暫時不用的程序和數據,掉電後數據不會丟失。內存儲器是執行程序時的臨時存儲區,掉電後數據全部丟失;外存儲器是用來存儲原始數據和運算結果的,需要長期保存,但可以長時間保存數據,磁碟是最常用的外存儲器,通常它分為軟盤和硬碟兩類;外存儲器的特點是容量大、價格低。外存儲器主要有磁碟存儲器、磁帶存儲器和光碟存儲器。
外存儲器是外部存儲設備,速度相對內存慢的多。
內存儲器最突出的特點是存取速度快、價格貴。還有cd-rom,快閃記憶體等等。
■內存與外存的區別?
因為內存取速度快
什麼是外存與內存?
內存儲器是cpu與外部設備交換數據的直接場所,內存儲器速度次於cpu速度,但是也算是高速存儲設備,其包括ram(我們常說的內存),顯存

C. 外部數據存儲器中的數傳到內部數據存儲器中

內外交換用MOVX指令,並通過寄存器間接定址Ri或者累加器A
MOV DPTR,#1000H ;將外部的首地址送入DPTR
MOVX A, @DPTR ;用間接定址送入內部R1
下面是幾個例子
MOVX A,@RI
MOVX @RI,A
MOVX @DOTR,A

D. 簡述內存儲器和外存儲器的區別(從作用和特點二方面入手)

簡述內存儲器和外存儲器的區別:含義不同,作用不同。

一、含義不同:

內存儲器是cpu與外部設備交換數據的直接場所,內存儲器速度次於cpu速度,但是也算是高速存儲設備,其包括ram,顯存,及一些高速緩存。

外存儲器是外部存儲設備,速度相對內存慢的多,但可以長時間保存琺嘗粹妒誄德達泉憚滬數據,如硬碟,cd-rom,快閃記憶體等等。

二、作用不同:

一個有時間優勢(內存),速度快,但容量小,斷電後不保留,一個有空間優勢(外存),容量大,能長期保留。CPU只能直接訪問內存。外存的東西要先到內存,CPU才能處理。內外不是根據在不在機箱里而區分的。CPU能直接訪問的才叫內存。

只讀存儲器(ROM)

ROM表示只讀存儲器(Read Only Memory),在製造ROM的時候,信息(數據或程序)就被存入並永久保存。這些信息只能讀出,一般不能寫入,即使機器停電,這些數據也不會丟失。

現在比較流行的只讀存儲器是快閃記憶體( Flash Memory),它屬於 EEPROM(電擦除可編程只讀存儲器)的升級,可以通過電學原理反復擦寫。現在大部分BIOS程序就存儲在 FlashROM晶元中。U盤和固態硬碟(SSD)也是利用快閃記憶體原理做成的。

以上內容參考:網路-內存

E. 編寫程序,把外部數據存儲器0000H~0050H中的內容傳送到內部數據存儲器20H~70H。用匯編

MOV DPTR, #0000H
MOV R0, #20H

LP:

MOVX A, @DPTR
MOV @R0, A
INC DPTR
INC R0
CJNE R0, #71H, LP

SJMP $

END

F. 怎麼用80c51用c語言編程,把數據從內部存儲器轉移到外部存儲器

擴展RAM編程基礎
(1)弄清擴展器件的地址
在圖7.2.5中,U3的ABC接單片機A13,A14,A15,所以片選信號對應地址最高位,即:「CBAxxxxx xxxxxxxx」(x為任意)。U4片選接CS1,即Y1,CBA=001,可得U4的地址范圍是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址為0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址為0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部數據指針來訪問存儲器。通過設置,也可以讓編譯器在擴展RAM中自動分配存儲單元。
(2)直接地址訪問
①向U4寫數據:
XBYTE[0x2000+addr]=dat; //addr為U4內部地址,取值為0~0x1fff;dat為數據。
②讀出U4數據:
dat=XBYTE[0x2000+addr];
也可以用頁訪問方式。頁訪問方式,實際就是先把16位地址高8位送P2口,通過低8位地址讀寫。
③按頁讀寫U4:
P2=0x20+page; // page為頁,取值為0x00~0x1F。
PBYTE[addr]=dat; // addr為頁內地址,取值為0x00~0xFF。
dat=PBYTE[addr];
④讀U6
dat=XBYTE[0x8000];//讀U6,地址取0x8000~0x9fff任何值,都一樣。
⑤寫U5
XBYTE[0x6000]=dat; //寫U5,地址取0x6000~0x7fff任何值,都一樣。
(3)數據指針
如,讀寫U4,可以這樣寫:
unsigned char xdata *p=0x3000; //聲明指針p,並初始指向0x3000單元
x=*p; //讀指針所指向的位置
p=p+1; //指針指向下一單元
*p=0x16; //向指針所指向的位置寫入數據
(4)讓編譯器自動分配存儲空間
①為了能讓編譯器自動分配存儲空間,並使用擴展RAM,必須設置擴展RAM地址。在Keil編程軟體中,點擊工具欄快捷圖標「 」,彈出目標選項對話框。按圖7.2.6所示,設置RAM起始地址和長度。
②變數聲明時使用xdata關鍵詞。如:
unsigned char xdata a;//變數a使用擴展RAM空間。
特別注意,擴展RAM直接地址訪問方式與自動分配存儲空間方式最好不要混用,否則可能產生沖突。

G. 外存儲器存取速度慢 不直接於cpu交換數據 而與內存器交換信息這句話對嘛

這句話是對的。 Cache->內存->外存(從左至右容量越來越多,讀取速度越來越慢。) 外儲存器不能直接與CPU交換數據,中間需要有一個媒介,那就是內存。

H. CPU與外部設備交換數據的方式有幾種

(1)程序直接控制方式:就是由用戶進程直接控制內存或CPU和外圍設備之間的信息傳送。這種方式控制者都是用戶進程。
(2)中斷控制方式:被用來控制外圍設備和內存與CPU之間的數據傳送。這種方式要求CPU與設備(或控制器)之間有相應的中斷請求線,而且在設備控制器的控制狀態寄存器的相應的中斷允許位。
(3)DMA方式:又稱直接存取方式。其基本思想是在外圍設備和內存之間開辟直接的數據交換通道。
(4)通道方式:與DMA方式相類似,也是一種以內存為中心,實現設備和內存直接交換數據的控制方式。與之不同的是,在DMA方式中數據傳送方向、存放數據內存始址以及傳送的數據塊長度等都是由CPU控制,而在通道方式中這些都是由專管輸入輸出的硬體——通道來進行控制。

I. 外存儲器可直接與CPU交換信息,這個命題對嗎

不對,cpu和內存交換信息,內存和硬碟就是外存儲設備交換信息!

J. 求解:外存與內存間數據交換的具體過程

摘 要: 直接內存存取(DMA)是DSP晶元中用於快速數據交換的重要技術,對AD公司的浮點系列晶元ADSP2106x中的DMA的應用進行了詳細介紹,並給出實際應用中的一些例子。
關鍵詞: DMA 浮點系列晶元ADSP2106x
1 DMA概述
直接內存存取(DMA)對計算機系統是非常重要的。它可以使CPU在運行指令的同時,系統能實現從外部存儲器或設備中存取數據,也可以在CPU不參與的情況下,由專用的DMA設備存取數據。
對於浮點DSP晶元來講,DMA的作用更是重要。眾所周知,DSP晶元主要是面向實時的信號處理,其核心的運算部件具有很高的運算速度,常以MFLOPS(每秒百萬次浮點運算)來衡量。ADSP2106x為120MFLOPS,但該速度是以存儲在晶元內部存儲器中的程序和數據為前提的。在DSP內部往往採用多匯流排的哈佛結構,數據匯流排和程序匯流排相互獨立,即指令的存取和數據的存取並行不悖;另外在ADSP2106x內部還有各種介面匯流排,用以提高數據的流通能力。但在晶元的外部,所有的匯流排都合並在一起了。因此為了發揮DSP核心運算單元的高速運算能力,首先必須把程序和數據傳輸到晶元的內存中,這通常需要DMA操作來實現。
另一方面,DSP系統總要與各種外部信號打交道,它從外部輸入數字信號,經過各種演算法的處理後,再輸出給其他設備。不僅如此,對於浮點DSP系統,數據的輸入和輸出常常是連續不斷的。試想,如果用DSP的核心部件來完成數據的輸入和輸出,它高速的運算能力又如何發揮得出來呢?所以,浮點系列的DSP晶元大都把DMA控制部分直接集成到了晶元上,用DMA來完成數據的輸入和輸出。
高效的DSP系統通常採用圖1所示的結構。在內存中開辟出四塊緩存區,兩個作為輸入緩存,兩個作為輸出緩存,用來實現輸入、輸出的乒乓切換。核心處理單元直接從輸入緩存中取數運算,然後把運算結果寫入輸出緩存;而數據從外部介面的輸入和輸出則完全由DMA來實現,不需核心處理單元的參與。只要核心處理單元的運算速度和DMA的數據率滿足要求,圖1所示的結構就可以完成連續的數據流輸入和輸出。當然,從外部看,數據的輸入和輸出是連續的,但在晶元內部卻是分段處理的。分段處理雖然帶來一些誤差,但只要緩存的數據足夠長,就可以使誤差降到允許的范圍。因為間隔越長,前後數據間的相關性越小,相互間的影響就越小,故分段處理是可行的。由於分段處理,也給DSP晶元的結構帶來了一個重要影響,那就是盡可能地增加其內部存儲器的容量。對於ADSP21060,其內部的SRAM容量達4Mbit,可以滿足大多數分段處理的需要。
下面首先對ADSP2106x中的DMA做概要介紹,然後對幾種典型的DMA操作進行詳細分析。
2 ADSP2106x中的DMA
ADSP2106x中的片內DMA控制器可以同時控制10個通道的DMA,完成下列類型的數據傳輸操作:
·內存外存或外部存儲器映射設備
·內存其他ADSP2106x的內存
·內存主機介面
·內存串列口
·內存Link口
·內存外部設備
·外存外部設備
豐富的數據流向可以使ADSP2106x實現對各種外設的介面;另外,由於ADSP2106x的內存是雙口SRAM,因此在進行上述DMA操作的同時,核心處理單元仍可以讀寫內存,使DMA操作與內部運算處理達到高度的並行性。當然,應盡量避免二者同時對同一內存地址進行讀寫。
每個DMA通道都有一個(或兩個)用FIFO實現的數據緩存器,最大的緩沖深度為6級,用以提高DMA數據傳輸率。所有的DMA數據傳輸都是通過這10個數據緩存器來完成的,這些緩存器如表1所示。其中通道1、3、6、7都是兩個緩存器共用一個DMA通道。所有數據緩存器作為I/O寄存器被映射到內存的前256個地址中。
DMA的編程是通過內部核心處理單元或外部主機對片內有關的I/O寄存器設置來實現的,這些I/O口寄存器也被映射到內存的前256個地址上。與DMA操作有關的I/O寄存器除了前面的數據緩存器外,主要還包括:
·DMA控制寄存器:DMAC6~9,LCTL,STCTL0~1,SRCTL0~1。
·地址-計數寄存器:II0~9,IM0~9,C0~9,EI6~9,EM6~9,EC6~9。
·鏈式操作指針寄存器:CP0~9。
·二維操作寄存器(也可作DMA通用寄存器):GP0~9,DA0~5,DB0~5。
·DMA狀態寄存器:DMASTAT。
DMA設置傳輸過程一般如下:
(1)設置對應通道的地址-計數寄存器。
(2)設置對應通道的DMA控制寄存器,並將其中的DMA使能位設為有效。
(3)開始DMA數據傳輸。
(4)DMA傳輸結束後,產生對應的中斷,程序對中斷進行處理。
3 幾種常用的DMA操作
在基於ADSP2106x的DSP系統的開發過程中,最常用到以下幾種DMA操作:內存與外存、內存與主機、內存與外設、內存與Link口間的數據交換。
3.1 內存與外存間的DMA
內存與外存間的DMA傳輸可用DMA通道6~9這四個通道中的任一個。這里用一個例子來說明,假如要把內存地址0x26000~0x263ff中的1024個數用DMA通道6傳送到外存0x400000~4003ff中,可用下面的編程來實現:
/*設置內存地址-計數寄存器*/
R0=0x26000;
DM(II6)=R0; /*設置內存起始地址*/
R0=1
DM(IM6)=R0; /*設置內存地址增加值*/
R0=1024;
DM(C6)=R0 /*設置內存讀數次數*/
/*設置外存地址-計數寄存器*/
R0=0x400000;
DM(E16)=R0; /*設置外存起始地址*/
R0=1;
DM(EM6)=R0; /*設置外存地址增加值*/
R0=1024;
DM(EC6)=R0; /*設置外存寫數次數*/
R0=0x0205;
DM(DMAC6)=R0;;/*設置DMA控制寄存器
DMAC6*/
/*設置為Master和從內存讀數方
式,並使能DMA*/
/*DMA通道6開啟DMA傳數操作*/
這里需要說明兩點:(1)I/O寄存器不能用立即數來直接賦值,而要通過通用寄存器R0~15或USTAT0~1來賦值;(2)在ADSP2106x中,由於數據的寬度有8、16、32和48幾種方式,通過DMA傳輸時,內存和外部介面上的寬度可以不同,因此對應的讀寫次數可能不同,故內部計數器和外部計數器要分別設置。
對於外部存儲器映射設備,其介面地址是固定的,此時內存與該外設間DMA的編程更加簡單。比如某外設的地址設在0x400000,要把內存0x26000~0x263ff中的1024個數用DMA通道6傳送到該外設介面上,只需把上面程序中的EM6設為0即可。
3.2 內存與主機間的DMA
在ADSP2106x晶元上包含了一個主機(host)介面,可以使其方便地與通用16位或32位計算機相連接,此時,通用計算機就作為ADSP2106x的主機,它可對ADSP2106x的片內存儲器進行訪問。通常情況下,為了減少主機對ADSP2106x定址的地址線根數,以降低硬體復雜性,主機往往只對ADSP2106x的I/O寄存器(有256個)定址,定址的地址線只需8根1。BittWare公司的ADSP2106xEZ-LAB開發板即採用了此種方式。在這種情況下,主機與ADSP2106x內存間的數據交換大多是通過DMA完成的。下面通過運行在微機上的一段C語言程序來說明,此時EZ-LAB板插入微機的ISA匯流排插槽上,微機作為ADSP2106x的主機,ADSP2106x的I/O寄存器可由微機通過ISA匯流排上的I/O口來訪問。該程序把數據d[1024]通過DMA通道6載入到ADSP2106x內存0x26000~0x263ff中。具體程序如下:
#injclude"conio.h"
#include "def21060.h" /*ADSP I/O寄存器地址定義文件*/
#include :stdio.h"
#define ADDR 0X402 /*定義ADSP地址線對應
的ISA匯流排I/O口地址*/
#define DATA 0x404 /*定義ADSP數據線對應
的ISA匯流排I/O口地址*/
main()
 {int n,d[1024];
/*設置ADSP中DMA通道6的地址-計數寄存器及控制寄存器*/
outpw(ADDR,II6); /*定址起始地址寄存器II6*/
outpw(DATA,0x6000);/*設置II6的低16位*/
outpw(DATA,0x2); /*設置II6的高16位*/
outpw(ADDR,IM6); /*定址地址增加寄存器IM6*/
outpw(DATA,1); /*設置IM6的低16位*/
outpw(DATA,0); /*設置IM6的高16位*/
outpw(ADDR,C6); /*定址計數寄存器C6*/
outpw(DATA,1024); /*設置C6的低16位*/
outpw(DATA,0); /*設置C6的高16位*/
outpw(ADDR,DMAC6); /*定址DMA控制寄存器
DMAC6 */
outpw(DATA,0x41);/*設置DMAC6的低16位*/
outpw(DATA,0); /*設置DMAC6的高16位*/
/*ADSP的DMA通道6設為16/32位模式,
並開啟就緒,等待微機傳數*/
/*微機向DMA通道6的數據緩存器EPB0中連續寫入數據d[.]*/
outpw(ADDR,EPB0); /*定址DAM通道6的數
據緩存器EPB0*/
for(n=0;n<1024;n++)
 {outpw(DATA,d[n]); /*寫數據d[n]*/
outpw(DATA,0); /*高16位寫0*/
}
}
對以上程序需要說明的有兩點:(1)ADSP2106x的地址線和數據線是通過ISA匯流排上兩個I/O口地址(ADDR和DATA)來訪問的;(2)ISA匯流排為16位,而ADSP2106x的I/O寄存器和內存的數據都為32位,因此微機要用高、低16位分別傳輸,同時把DMA6設置為16/32位模式。關於EZ-LAB的詳細情況可參見文獻[1]。
3.3 內存與外設間的DMA
對於某些外部設備,其輸入或輸出是與某個外部時鍾同步的,而與ADSP2106x的讀寫時鍾不相干。當這樣的設備與ADSP2106x介面時,通常的做法是在介面端加FIFO或雙口RAM,把ADSP2106x的讀寫與該外設的輸入或輸出時鍾隔離開來。但ADSP2106x晶元本身提供了更靈活、更高效的方式,即DMA通道7和8的握手DMA方式(Handshake),可以完全省去FIFO或RAM,其典型應用電路如圖2所示。
圖中以8位數據線寬度為例,以DMA通道7為輸出,對應的握手信號為DMAR1和DMAG1;以DMA通道8為輸入,對應的握手信號為DMAR2和DMAG2。整個電路只用到了最常用的74273和74374晶元,外設的讀寫時鍾最高可達40MHz。在這種握手DMA方式中,外設不佔用ADSP2106x的外部地址匯流排。關於上面電路的詳細情況,在此不再贅述。
下面給出設置握手DMA的對應程序。這里假設要從外設2中輸入1024個數據到內存0x26000~0x264ff中,則需對DMA通道8進行如下編程:
/*設置內存地址-計數寄存器*/
R0=0x26000;
DM(II8)=R0; /*設置內存起始地址*/
R0=1;
DM(IM8)=R0; /*設置內存地址增加值*/
R0=1024;
DM(C8)=R0; /*設置內存寫數次數*/
/*設置外存計數寄存器*/
R0=1;
DM(EM8)=R0; /*設置外存地址增加值*/
R0=1024;
DM(EC8)=R0; /*設置外存輸入次數*/
R0=0x401;
DM(DMAC8)=R0; /*設置DMA控制寄存器
DMAC8*/
/*設置為Handshake和向內存寫數方式,並使能DMA*/
/*DMA通道8開啟,等待外設的輸入時鍾,每接 收到一個時鍾,輸入一次*/
對上面程序需要說明的是:雖然電路中沒有用到外存地址,但外存計數寄存器EM7和EC7也必須設置。
如果要向外設1中輸入數據,則需要對DMA7進行類似的編程。
3.4 內存與Link口間的DMA
ADSP2106x具有很強的並行工作能力,不需加任何外部仲裁電路,6片ADSP2106x和一個主機就可以很方便連在一起並行工作。它們之間的數據交換既可以通過共享的外部數據、地址匯流排來實現,也可採用點對點的Link口來完成。6個Link口是ADSP2106x晶元所獨有的高速數據介面;每個Link口包含4根數據線、一個時鍾線和一個應答信號線,最高的數據傳輸率為40Mbyte/s。
用Link口進行片間數據交換,通常情況下都要採用DMA方式,這樣才能將其優點充分發揮。在使用DMA方式進行Link口通訊時,除了要進行地址-計數寄存器的設置外,還要進行傳輸速率選擇寄存器(LCOM)和緩存-口配對寄存器(LAR)的設置;最後設置DMA控制寄存器LCTL,並開啟DMA操作。
假設有兩片ADSP2106x,它們相互間用Link5口相連;我們要把第一片內存0x26000~0x263ff中的1024個數用Link5口傳輸到第二片的內存0x23000~0x23fff處,則兩片ADSP2106x的DMA編程設置如下:
/*第一片*/
r0=0X3f000;
dm(LCOM)=r0; /*把Link口設為2x clock*/
r0=0xfff7f;
dm(LAR)=r0; /*link port5--> link buffer2,
對應DMA通道4*/
r0=0X26000;
dm(II4)=r0; /*設置起始地址*/
r0=1024;
dm(C4)=r0; /*設置讀數次數*/
r0=1;
dm(IM4)=r0; /*設置地址增加值*/
r0=0Xb00;
dm(LCTL)=r0; /*enable output DMA*/
/*第二片*/
r0=0X3f000;
dm(LCOM)=r0; /*把Link口設為2x clock*/
r0=0xfff7f;
dm(LAR)=r0; /*link port5-->link buffer 2,對
應DMA通道4*/
r0=0x23000;
dm(II4)=r0; /*設置起始地址*/
r0=1024;
dm(C4)=r0; /*設置讀數次數*/
r0=1;
dm(IM4)=r0; /*設置地址增加值*/
r0=0x300;
dm(LCTL)=r0; /*enable input DMA*/
對於上面的兩段程序,應分別載入到兩片ADSP2106x中。需要說明的是:Link Buffer 2對應DMA通道4。如果把其他的Link Buffer與Link口5配對,則需設置與該Buffer對應的DMA通道。
ADSP2106x中DMA操作功能強大,形式多樣,除了本文所介紹的部分外,還有鏈式DMA、二維DMA等,因此要全部掌握並熟練應用是有一定難度的。通過對各種DMA的應用,可以使數據進出晶元變得更加流暢,也可以使其核心處理單元的運算能力發揮到極致
(本文轉自電子工程世界:http://www.eeworld.com.cn/designarticles/embed/200605/2612.html)