|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
16位寬的sst39vf3201為什么可以用8位方式訪問(wèn)! |
| 作者:necrca 欄目:ARM技術(shù) |
我的系統(tǒng)是AT91M40800 + SST39VF3201; 因?yàn)槭褂?6位總線,所以ARM的A0懸空不用,ARM的A1,接SST39VF160的A0 按照這種連接方法,ARM是不可以用8位的數(shù)據(jù)指針來(lái)訪問(wèn)的; 但是,用下面的代碼就偏偏可以。。。! 0x01000000 是SST39VF3201的物理地址 a[] 是一個(gè)全局變量; for(i=0;i<10;i++) { a[i] = *(INT8U *)(0x01000001+i); } 查看編譯出來(lái)的代碼,也沒(méi)有看出有先把16位數(shù)據(jù)讀出來(lái),拆分為8位的代碼 0x0000006c: e3a04000 .@.. MOV r4,#0 // 判斷 i<10 0x00000070: e354000a ..T. CMP r4,#0xa //10次循環(huán)結(jié)束,退出 0x00000074: 2a000008 ...* BCS {pc} + 0x28 ; 0x9c //跳轉(zhuǎn)COPY第一個(gè)數(shù)據(jù) 0x00000078: ea000002 .... B {pc} + 0x10 ; 0x88 // i++ 0x0000007c: e2840001 .... ADD r0,r4,#1 0x00000080: e20040ff .@.. AND r4,r0,#0xff //比較i的值是否大于10 0x00000084: eafffff9 .... B {pc} - 0x14 ; 0x70 //取39VF3201的地址 (0x01000001) 0x00000088: e59f0254 T... LDR r0,0x2e4 // (0x01000001+i)的數(shù)據(jù)讀出來(lái)(8位) 0x0000008c: e7d00004 .... LDRB r0,[r0,r4] // 取全局?jǐn)?shù)組a[0]的地址 0x00000090: e59f1250 P... LDR r1,0x2e8 //的39vf3201的數(shù)據(jù)保存到a[i]中 0x00000094: e7c10004 .... STRB r0,[r1,r4] //比較i的值是否大于10 0x00000098: eafffff7 .... B {pc} - 0x1c ; 0x7c 0x0000009c: e1a00000 .... NOP 不明白為什么用這種物理的連接方式,可以訪問(wèn)8位的數(shù)據(jù),我的CPU的A0沒(méi)有參加 地址繹碼,象0x01000001 、0x01000003 這些地址,ARM怎么處理??? 望各位指教。。! |
| 2樓: | >>參與討論 |
| 作者: mike_le 于 2006/1/11 10:09:00 發(fā)布:
頂下 |
|
| 3樓: | >>參與討論 |
| 作者: necrca 于 2006/1/13 9:40:00 發(fā)布:
各位大俠有空研究這個(gè)問(wèn)題嗎? |
|
| 4樓: | >>參與討論 |
| 作者: masashinakayama 于 2006/1/13 10:45:00 發(fā)布:
很簡(jiǎn)單,ARM硬件幫你完成了這個(gè)事情 STRB/LDRB指令就是8位讀寫 但是讀的時(shí)候總線是16位訪問(wèn)的,多余的8位給丟掉了 如果你看到數(shù)據(jù)手冊(cè)的總線時(shí)序,你就明白了 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |