新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式處理器MPC8250與CF卡的接口設計

        嵌入式處理器MPC8250與CF卡的接口設計

        作者: 時間:2012-06-27 來源:網絡 收藏

        (4)配置多功能引腳寄存器(偏移量:0x8C)。該寄存器配置通用引腳。本設計配置GPIO1引腳為LED指示,GPIO2引腳為PCI中斷輸出。

        (5)配置設備控制寄存器(偏移量:0x92)。該寄存器選擇中斷方式,是并行PCI中斷還是串行PCI中斷。本設計選擇了傳統的并行PCI中斷方式。

        (6)配置ExCA電壓控制寄存器(偏移量:0x802),選擇Vcc為3.3V還是5V。本設計選擇Vcc為3.3V。

        (7)配置ExCA存儲窗口0起始地址低位寄存器(偏移量:0x810),即起始地址的A19~A12位。PCI1410A具有五個存儲地址翻譯窗口和二個I/O地址翻譯窗口,用于配置CF卡內寄存器的訪問地址,將CF卡的寄存器映射到系統的存儲空間或I/O空間,MPC8250訪問這些寄存器就相當于訪問一段存儲空間或I/O空間。本設計中只使用了存儲地址翻譯窗口0。

        (8)配置ExCA存儲窗口0起始地址高位寄存器(偏移量:0x811),即起始地址的A23~A20位。

        (9)配置ExCA存儲窗口0結束地址低位寄存器(偏移量:0x812),即結束地址的A19~A12位。

        (10)配置ExCA存儲窗口0結束地址高位寄存器(偏移量:0x813),即結束地址的A23~A20位。

        (11)配置ExCA存儲窗口0地址比較寄存器(偏移量:0x840)。在系統訪問CF卡時,如果地址的高8位與該寄存器數值相同,則允許訪問,系統將該地址翻譯到相應的CF卡空間;否則,拒之門外。

        (12)配置ExCA存儲窗口使能寄存器(偏移量:0x806)。該寄存器可以分別打開或關閉五個存儲地址翻譯窗口和二個I/O地址翻譯窗口,因為每個窗口對應了寄存器中的一個使能位。芯片的默認值都是關閉的。在本設計中,打開存儲地址翻譯窗口0。切記在初始化的收官階段打開翻譯窗口使能位,以免功虧一簣。

        2.2 讀寫CF卡技巧

        由于CF卡本身的特點,CF卡由ATA控制器和Flash存儲器兩部分構成。系統訪問Flash存儲器的速度遠遠小于訪問內存的速度。如果系統頻繁訪問CF卡,勢必影響系統的實時性和工作效率。所以必須考慮CF卡讀寫程序的設計技巧。

        根據存儲器訪問的局部性原理,CPU存取數據所訪問的存儲單元都趨向于聚集在一個較小的連續區域。從時間上看,如果一個信息項正在被訪問,那么在近期它很可能還會被再次訪問。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。

        本系統的程序設計中,開辟了一個扇區的內存空間tempSect,用于存儲最近訪問過的扇區數據;并設置了兩個全局變量:SaveSectorNum和SectorDirty。SaveSectorNum保存最近備份的扇區編號。SectorDirty說明備份數據是否與CF卡中的相應數據一致。如果一致,為“0”;否則為“1”。這樣不但可以減少讀寫CF卡的次數,而且提高了訪問速度,滿足嵌入式操作系統的實時性要求。

        同時,CF卡的物理結構也有利于以扇區為單元進行操作。因為CF卡內部的Flash存儲器由若干個扇區組成,而且CF卡中設置了專門針對扇區操作的寄存器。

        所以,本設計中,無論是讀一段數據,還是寫一段數據,都以扇區為基本單位。如果數據量在一個扇區內,并且地址范圍在同一扇區,則先讀取所在扇區的數據,然后按照在扇區中的偏移量獲得所需數據;如果數據量大于一個扇區,或者地址范圍橫跨兩個扇區,則按次讀取扇區,獲得所需數據。操作流程如圖2所示。

        系統初始化時,設置SaveSectorNum為“0”, tempSect中備份了0號扇區的數據;SectorDirty也為“0”,即備份數據未作更改。

        當讀取一個扇區的數據時,首先比較所讀取的扇區號(CurrSectorNum),是否與備份數據的扇區號(SaveSectorNum)一致,如果一致,則從備份數據中讀取,加快了訪問速度;否則,判斷備份數據是否更改,即SectorDirty是否為“1”;如果不是,則從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中;否則,先把tempSect的數據寫回CF卡,然后從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中。最后,設置備份數據扇區號SaveSectorNum為當前數據的扇區號CurrSectorNum,設置SectorDirty為“0”,并從備份數據中讀取所需數據。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德庆县| 鹤庆县| 扶风县| 司法| 太仆寺旗| 藁城市| 双城市| 花垣县| 临泽县| 德令哈市| 海门市| 鄂州市| 鄱阳县| 电白县| 平度市| 宁波市| 湖州市| 壶关县| 罗平县| 柘城县| 锦州市| 渭源县| 东阿县| 宝鸡市| 新野县| 聂拉木县| 监利县| 神木县| 克什克腾旗| 济阳县| 香格里拉县| 金溪县| 城固县| 明星| 大同县| 长治市| 鲜城| 宕昌县| 称多县| 平利县| 都匀市|