<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > Nios II與CF卡的接口設計

Nios II與CF卡的接口設計

作者: 時(shí)間:2009-12-15 來(lái)源:網(wǎng)絡(luò ) 收藏

3 II處理器與CF卡的硬件
  在A(yíng)ltera公司提供的SoPC軟件中對該軟核進(jìn)行配置時(shí),選用 II CPU、內部定時(shí)器、CF卡接口控制器、SDRAM 控制器、FLASH 存儲器接口、LCD 接口和EPCS4串行配置器件控制器接口。其框圖如圖2所示。


       
    圖2 硬件接口框圖

4 CF卡的接口控制器的軟件操作
  在 II系統中,應用軟件架構在HAL(硬件抽象層)和C標準庫函數上。在Nios II IDE 中建立新的軟件工程時(shí),IDE會(huì )根據SoPC Builder對系統的硬件配置自動(dòng)生成一個(gè)定制HAL系統庫。這個(gè)庫能為程序和底層硬件的通信提供接口驅動(dòng)程序,HAL系統庫為CF卡接口控制器內核提供了兩組直接訪(fǎng)問(wèn)設備寄存器的API函數,其中一個(gè)是針對IDE任務(wù)文件(ATA)寄存器的,主要提供了對標準的實(shí)IDE模式寄存器的訪(fǎng)問(wèn)設,另一個(gè)是針對CF接口控制寄存器的,主要提供了對電源,復位,插入或移除檢測和中斷的控制。設計者只需要調用這些函數就可以訪(fǎng)問(wèn)外部設備。
  由于CF卡的讀寫(xiě)是以一個(gè)扇區為基本單位的。在讀寫(xiě)一個(gè)扇區之前必須先指明當前需要讀寫(xiě)的柱面、頭和扇區或LBA地址,然后發(fā)送讀寫(xiě)命令。一個(gè)扇區的512 B需要一次性連續讀出或寫(xiě)入。主機讀/寫(xiě)CF卡上一個(gè)文件的過(guò)程是這樣的:
  (1)CF卡檢測。調用:
IORD_ALTERA_AVALON_CF_CTL_STATUS(CF_CTI_BASE)。
  (2)CF卡內部控制器向CF卡某些寄存器填寫(xiě)必要的信息。如向扇區號寄存器填寫(xiě)讀寫(xiě)數據的起始扇區號或I.BA地址、向扇區數寄存器填寫(xiě)讀寫(xiě)數據所占的扇區個(gè)數、設置CF卡的扇區尋址方式等。調用:
IOWR_ALTERA_AVALON_CF_IDE_SECTOR_COUNT(CF_IDE_BASE,Sector_cunt);
IOWR_ALTERA_AVALON_CF_IDE_SECTOR_NUMBER(CF_IDE_BASE,Sector_num);
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_LOW(CF_IDE_BASE,0x00);
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_HIGH(CF_IDE_BASE,0x00);
IOWR_ALTERA_AVALON_CF_IDE_DEVICE_HEAD(CF_IDE_BASE,0xe0)。
  (3)向CF卡的命令寄存器寫(xiě)入操作CF卡的命令。如寫(xiě)操作向CF卡的命令寄存器寫(xiě)入30H,讀操作向CF卡的命令寄存器寫(xiě)入20H。調用:
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x30);
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x20)。
  (4)CF卡有數據傳輸請求之后,主機讀寫(xiě)CF卡的數據寄存器,從而實(shí)現從CF卡數據緩沖讀出數據或向CF卡數據緩沖寫(xiě)入數據。調用:
IORD_ALTERA_AVAlON_CF_IDE_DATA (CF_IDE_BASE);
IOWR_ALTERA_AVALON_CF_IDE_DATA(CF_IDE_BASE,Data_Write)。
  (5)在執行以上操作的過(guò)程中,每執行一步。都應該檢測狀態(tài)寄存器,確定CF卡的當前狀態(tài),從而確定下一步應該執行什么操作(參考狀態(tài)寄存器的BIT位的意義,編寫(xiě)檢測代碼)。調用:
IORD_ALTERA_AVALON_CF_IDE_STATUS(CF_IDE_BASE)。
  由于CF卡由ATA控制器和FLASH存儲器2部分構成,處理器訪(fǎng)問(wèn)FLASH存儲器的速度遠遠小于訪(fǎng)問(wèn)內存的速度,如果系統頻繁訪(fǎng)問(wèn)CF卡,勢必會(huì )影響系統的實(shí)時(shí)性和工作效率。所以必須考慮CF卡讀寫(xiě)程序的設計技巧 。根據存儲器訪(fǎng)問(wèn)的局部性原理,CPU 存取數據所訪(fǎng)問(wèn)的存儲單元都趨向于聚集在一個(gè)較小的連續區域。從時(shí)間上看,如果一個(gè)信息項正在被訪(fǎng)問(wèn),那么在近期他很可能還會(huì )被再次訪(fǎng)問(wèn)。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。在Nios II硬件系統設計中,添加了片上的存儲空間,用于存儲最近訪(fǎng)問(wèn)過(guò)的扇區數據。另外還設置了兩個(gè)全局變量:一個(gè)保存最近備份的扇區編號;另一個(gè)說(shuō)明備份數據是否與CF卡中的相應數據一致,如果一致,其值為0,否則為1。這樣不但可以減少讀寫(xiě)CF卡的次數。而且提高了訪(fǎng)問(wèn)速度,通過(guò)添加硬件緩沖區,滿(mǎn)足嵌入式操作系統的實(shí)時(shí)性要求。目前,該設計已經(jīng)在開(kāi)發(fā)板上實(shí)現,運行穩定可靠。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Nios 接口設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>