阅读:1613回复:0
请教DRAM读写控制的问题
附上图和程序,请高手指教,什么地方做得不对,为什么写进去读出来的数据不一样?
;================================= ;OKI M514400C-60SJ DRAM管脚图 ; __________ ; DQ1---|0 |---VSS ; DQ2---| |---DQ4 ; /WE---| |---DQ3 ; /RAS---| |---/CAS ; A9---| |---/OE ; | | ; A0---| |---A8 ; A1---| |---A7 ; A2---| |---A6 ; A3---| |---A5 ; VCC---| |---A4 ; ---------- ;================================= ;与MCU的接线图 ; ; DQ1~DQ4 => P7.4~P7.7 ; A0~A7 => P0.0~P0.7 ; A8~A9 => P1.0~P1.1 ; /WE => P8.1 ; /OE => P8.2 ; /RAS => P3.1 ; /CAS => P3.0 ;================================== ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;// Input: ROW_ADR0, ROW_ADR1 ;; ;;// COL_ADR0, COL_ADR1 ;; ;;// Output: ext_byte ;; ;;// description: load a byte from dram ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; read_dram512_byte: ;; push r0 push r1 push sym ; 设置数据IO口P7到输入模式 SB1 ld p7,#0ffh ld r0,#11000011B ld PG1CON,r0 ;============================== ; 读高半字节 SB1 ld p1, ROW_ADR1 ;横地址送出 ld p0, ROW_ADR0 ld p3, #01h ;/RAS为低,/CAS为高 ; ld p1, COL_ADR1 ;列地址送出 ld p0, COL_ADR0 ld p3, #00h ;/RAS为低,/CAS为低 ; ld p8, #02h ;/WE为高,/OE为低 ; ld r0, p7 ;读数据 and r0, #0fh swap r0 ld ext_byte,r0 ;--------- ld p8, #07h ;/WE为高,/OE为高 ld p3, #01h ;/RAS为低不变,/CAS为高 ;--------- ; 读低半字节 ld p1, COL_ADR1 ;列地址加1送出 inc COL_ADR0 ld p0, COL_ADR0 ld p3, #00h ;/RAS为低,/CAS为低 ; ld p8, #02h ;/WE为高,/OE为低 ; ld r0, p7 ;读数据 and r0, #0fh or ext_byte,r0 ; ld p8, #07h ;/WE为高,/OE为高 ld p3, #02h ;/RAS为高,/CAS为高 ;=============================== pop sym pop r1 pop r0 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;// Input: ROW_ADR0, ROW_ADR1 ;; ;;// COL_ADR0, COL_ADR1 ;; ;;// ext_byte ;; ;;// Output: none ;; ;;// description: write a byte from dram ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_dram512_byte: ;; push r0 push r1 push sym ; 设置数据IO口P7到输出模式, SB1 ld r0,#11111111B ld PG1CON,r0 ;=============================== ; 写高半字节 SB1 ld r0, ext_byte ;高单字节数据送往P7口 and r0,#0f0h swap r0 ld p7, r0 ; ld p1, ROW_ADR1 ;横地址送出 ld p0, ROW_ADR0 ld p3, #01h ;/RAS为低,/CAS为高 ; ld p8, #04h ;/WE为低,/OE为高 ; ld p1, COL_ADR1 ;列地址送出 ld p0, COL_ADR0 ld p3, #00h ;/RAS为低,/CAS为低 ;-------- ld p8, #07h ;/WE为高,/OE为高 ld p3, #01h ;/RAS为低不变,/CAS为高 ;-------- ; 写低半字节 ld r0, ext_byte ;低半字节送往P7口 and r0,#0fh ld p7, r0 ; ld p8, #04h ;/WE为低,/OE为高 ; ld p1, COL_ADR1 ;列地址加1送出 inc COL_ADR0 ld p0, COL_ADR0 ld p3, #00h ;/RAS为低,/CAS为低 ; ld p8, #07h ;/WE为高,/OE为高 ld p3, #02h ;/RAS为高,/CAS为高 ;================================ pop sym pop r1 pop r0 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;刷新DRAM程序 Refresh_dram ld p3, #01h ;/RAS为低,/CAS为高 ld p3, #00h ;/RAS为低,/CAS为低 ld p3, #02h ;/RAS为高,/CAS为高 ret |
|