S3C2440的存儲器管理
當寬度為8位的時(shí)候,"Memory Controller"硬件是這樣做的:(不錯位連接)
(1)CPU想進(jìn)行8位操作時(shí),直接根據軟件所給出的地址讀取8位數據返回給CPU。
(2)CPU想進(jìn)行16位操作時(shí),進(jìn)行兩次8位的操作,并組成一個(gè)16位的數據返回給CPU。
(3)CPU想進(jìn)行32位操作時(shí),進(jìn)行四次8位的操作,并組成一個(gè)32位的數據返回給CPU。
當寬度為16位的時(shí)候,"Memory Controller"硬件是這樣做的:(錯一位連接)
(1)CPU想進(jìn)行8位操作時(shí),直接根據軟件所給出的地址讀取16位數據,并將低8位返回給CPU。
(2)CPU想進(jìn)行16位操作時(shí),直接根據軟件所給出的地址讀取16位數據返回給CPU。
(3)CPU想進(jìn)行32位操作時(shí),進(jìn)行2次8位的操作,并組成一個(gè)32位的數據返回給CPU。
當寬度為32位的時(shí)候,"Memory Controller"硬件是這樣做的:(錯兩位連接)
(1)CPU想進(jìn)行8位操作時(shí),直接根據軟件所給出的地址讀取32位數據,并將低8位返回給CPU。
(2)CPU想進(jìn)行16位操作時(shí),直接根據軟件所給出的地址讀取32位數據,并將低16位返回給CPU。
(3)CPU想進(jìn)行32位操作時(shí),直接根據軟件所給出的地址讀取32位數據返回給CPU。
參考:http://hi.baidu.com/zengzhaonong/blog/item/6de41c4f99e5cd3dafc3abc6.html
PS:關(guān)于S3C2440擴展網(wǎng)口電路時(shí),CMD為什么要接ADDR2?
Memory Controller操作的是DATA[15:8]。即0x0的時(shí)候通過(guò)DATA[7:0]寫(xiě)入要操作寄存器的地址,0x1的時(shí)候通過(guò)DATA[15:8]讀寫(xiě)寄存器的數據。而DM9000卻始終是通過(guò)DATA[7:0]操作寄存器的,這樣產(chǎn)生了矛盾。如果錯兩位,并且使用0x0寫(xiě)入要操作寄存器地址,使用ox4作為讀寫(xiě)寄存器地址,這樣Memory Controller始終使用的是DATA[7:0]傳輸數據,這樣與DM9000數據傳輸規則吻合。答:首先由于使用了DATA[15:0],固將位寬設為16位。但如果只錯一位,則每次讀寫(xiě)地址的時(shí)候Memory Controller操作的是DATA[7:0],而讀寫(xiě)數據的時(shí)候
評論