jewin
驱动牛犊
驱动牛犊
  • 注册日期2003-02-10
  • 最后登录2005-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1566回复:0

请教DRAM读写控制的问题

楼主#
更多 发布于:2004-06-28 16:33
附上图和程序,请高手指教,什么地方做得不对,为什么写进去读出来的数据不一样?

;=================================
;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    
游客

返回顶部