Mit dem PASM Teil geht es irgend wie nicht vorwäts.
Da werd ich wohl oder übel auf die VGA warten müssen.
Mit dem PST.spin das zu suchen gestaltet sich schwierig da PASM wesendlich schneller ist.
Das ist meine Testroutine für den SRAM.
Code: Alles auswählen
CON
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
OBJ
pst : "PST"
pub main|adr,sadr,a,mee,zei
pst.start(115200)
sram_ini(0)
pst.Clear(0)
pst.Position(0,0)
pst.Str(@T000)
pst.Position(0,1)
sadr:=$0
adr:=sadr
mee:=$200000 ' 4Mb oder 2M Worde
zei:=0
repeat mee
sram_write(adr,adr)
adr++
sram_write($222, $6666) ' <----- Test Fehler
adr:=sadr
repeat mee
pst.hex(adr,8)
pst.Str(@T003)
a:=sram_read(adr)
pst.hex(a,8)
if a == adr & $0000FFFF
pst.PositionX(0)
else
zei++
pst.char(13)
if zei==16
repeat
adr++
repeat 1000
pri sram_ini(a)
outa[23..22]:=%00 ' ADRH, ADRL
outa[27..24]:=%1111 ' /IORQ, /MREQ, /WR, /RD
pri sram_write(adr,data)
dira[27..0 ]:=%1111_11000000_11111111_11111111
outa[15..0 ]:=adr
outa[23..22]:=%01 ' ADRL strobe
outa[23..22]:=%00 ' ADRL
outa[15..0]:=adr>>16
outa[23..22]:=%10 ' ADRH strobe
outa[23..22]:=%00 ' ADRH
outa[15..0 ]:=data
outa[27..24]:=%1001 ' /IORQ, /MREQ, /WR, /RD
outa[27..24]:=%1111 ' /IORQ, /MREQ, /WR, /RD
dira[27..0 ]:=%0000_00000000_00000000_00000000
pri sram_read(adr):data
dira[27..0 ]:=%1111_11000000_11111111_11111111
outa[15..0 ]:=adr
outa[23..22]:=%01 ' ADRL strobe
outa[23..22]:=%00 ' ADRL
outa[15..0]:=adr>>16
outa[23..22]:=%10 ' ADRH strobe
outa[23..22]:=%00 ' ADRH
dira[15..0 ]:=%00000000_00000000
outa[27..24]:=%1010 ' /IORQ, /MREQ, /WR, /RD
data:=ina[15..0 ]
outa[27..24]:=%1111 ' /IORQ, /MREQ, /WR, /RD
dira[27..0 ]:=%0000_00000000_00000000_00000000
DAT
T000 byte "HALLO PIC18F2550",0
T003 byte " ",0
Naja die Geschwindigkeit ist nicht gerade zum Abheben.
Wenn ich mich nicht verrechnet habe so braucht er ungefähr 2s für 32k
---------------------------------------------------------------------------------------------
Das ist der Code vom SRAM- Schreiben in PASM wie gesagt der klemmt irgend wie.
Code: Alles auswählen
' ======================================================================================
' SUBROUTINEN : Word in SRAM schreiben
' ======================================================================================
' SPIN write db1 Adresse
' SPIN write db2 Daten bit 15..0
' SPIN write command := $5
' SPIN read command == $0 wenn Daten geschrieben sonnst immer noch $5
' --------------------------------------------------------------------------------------
' PASM read command == $5 Daten & Adresse holen
' PASM write command := $0 wenn Daten geschrieben
' --------------------------------------------------------------------------------------
SRAM_write_W call #SRAM_adr
rdlong temp1, db2A ' 16Bit Word holen
and temp1, M_16Bit ' 16Bit auswählen
andn outa, M_16Bit ' BUS auf $0000 setzen
or outa, temp1 ' einzen setzen
andn outa, MREQ_WR ' auf 0 setzen aktiv
nop ' 50ns sind zu wehnig
or outa, MREQ_WR ' auf 1 setzen inaktiv
andn outa, M_16Bit ' BUS auf $0000 setzen
wrlong cogidm, statusA ' Commando löschen
andn dira, SRAM_io ' BUS auf Eingabe schalten
SRAM_write_W_ret ret
' ======================================================================================
' SUBROUTINEN : Setzt die 24Bit Adresse immer im Wordformat
' ======================================================================================
SRAM_adr or dira, SRAM_io ' BUS auf Ausgabe schalten
rdlong temp1, db1A ' 24Bit adresse holen
' shr temp1, #1 ' Bit's um 1 stellen nach unten
' Verschieben SRAM word-format
and temp1, M_16Bit ' Low-Teil auswählen
andn outa, M_16Bit ' BUS auf $0000 setzen
or outa, temp1 ' Einzen setzen
or outa, ADRL_strobe ' auf 1 setzen aktiv
nop
andn outa, ADRL_strobe ' auf 0 setzen inaktiv
rdlong temp1, db1A ' 24Bit adresse holen
shr temp1, #16 ' Bit's um 16 stellen nach unten Verschieben
andn outa, M_16Bit ' BUS auf $0000 setzen
or outa, temp1 ' einzen setzen
or outa, ADRH_strobe ' auf 1 setzen aktiv
nop
andn outa, ADRH_strobe ' auf 0 setzen inaktiv
SRAM_adr_ret ret
' ======================================================================================
' Initialized data
' ======================================================================================
bootA long $7FFC '
statusA long $7FF8 ' Statuszelle IO-Controll
db1A long $7FF4 ' Adresse (Zeiger)
db2A long $7FF0 ' Daten (Byte, Word und Long)
status long 1
command long 1
cogidm long 1
' **************************************************************************************
' SRAM Interface
' **************************************************************************************
ADRL_strobe long %00000000_01000000_00000000_00000000
ADRH_strobe long %00000000_10000000_00000000_00000000
MREQ_WR long %00000110_00000000_00000000_00000000 '/MREQ /WR
MREQ_RD long %00000101_00000000_00000000_00000000 '/MREQ /RD
SRAM_io long %00000111_00000000_11111111_11111111
BUS_D_io long %00001011_00000000_11111111_11111111
BUS_C_io long %00001011_00000001_11111111_11111111
M_16Bit long $0000FFFF
M_17Bit long $0001FFFF