Seite 7 von 20

Re: HBasic

Verfasst: Sa 27. Okt 2012, 00:49
von PIC18F2550
Habe mal den PASM-Teil um eine Schreibroutine erweitert.

Code: Alles auswählen

              mov       temp2, h00007f00
              rdbyte    temp1, temp2
              call      #eRamWB
              call      #eRamRB
              wrbyte    temp1, temp2

Code: Alles auswählen

'---------------------------------------------------------------------
' eRam
'
' temp1     Daten
' temp2     Adresse
' temp3     temp
'---------------------------------------------------------------------
eRamWB ' byte schreiben
              mov     dira,  dout         ' bus auf ausgabe schalten
              call    #setadr           ' adresse setzen
              and     temp1, h000000ff
              or      outa,  temp1        ' wert an ports setzen
              xor     outa,  _bwr         ' schreibsignal aktiv
              mov     dira,  dinp         ' bus auf eingabe schalten
              mov     outa,  _s1          ' bus wieder inaktiv
              andn    outa,  _s1          ' bus wieder inaktiv
eRamWB_ret    ret
'---------------------------------------------------------------------
eRamRB ' byte lesen
              call    #setadr           ' adresse setzen
              mov     temp1,  ina         ' port einlesen
              mov     outa,   _s1          ' bus wieder inaktiv
              and     temp1,  h000000ff   ' daten ausmaskieren
eRamRB_ret    ret
'---------------------------------------------------------------------
setadr ' adresse verarbeiten
       'hwt-adresse --> latch
              mov     temp3,  temp2       ' adresse holen
              shr     temp3,  #$3          ' adresse für latch zurechtschieben
              and     temp3,  _latch      ' latchbits ausmaskieren
              or      outa,   temp3        ' adresse für latch an ports setzen
              xor     outa,   _al          ' wert in latch übernehmen
              mov     outa,   _s1          ' wert in latch übernehmen
       ' nwt-adresse setzen
              mov     temp3,  temp2       ' adresse holen
              shl     temp3,  #$8          ' adresse zurechtschieben
              and     temp3,  _adr        ' adresse ausmaskieren
              or      outa,   temp3        ' adresse an ports setzen
              xor     outa,   _ram1        ' rambank 1 selektieren
setadr_ret    ret
mal sehen welche erkenntnisse sich daraus ergeben.

Re: HBasic

Verfasst: Sa 27. Okt 2012, 00:58
von drohne235

Code: Alles auswählen

              mov     outa,  _s1          ' bus wieder inaktiv
              andn    outa,  _s1          ' bus wieder inaktiv
Das funktioniert nicht.

Re: HBasic

Verfasst: Sa 27. Okt 2012, 01:00
von PIC18F2550

Code: Alles auswählen

              mov     dira,  dinp         ' bus auf eingabe schalten
              mov    outa,  _s1          ' bus wieder inaktiv
Up's war noch Kellerleiche :KOTZEN

Re: HBasic

Verfasst: Sa 27. Okt 2012, 01:04
von PIC18F2550
Irgendwas passiert hier schon auf dem Bus

Code: Alles auswählen

eRamWB ' byte schreiben
              mov     dira,  dout         ' bus auf ausgabe schalten
'              call    #setadr           ' adresse setzen
'              and     temp1, h000000ff
'              or      outa,  temp1        ' wert an ports setzen
'              xor     outa,  _bwr         ' schreibsignal aktiv
              mov     dira,  dinp         ' bus auf eingabe schalten
              mov    outa,  _s1          ' bus wieder inaktiv
eRamWB_ret    ret
könnten da noch Rester aktiv sein?

Re: HBasic

Verfasst: Sa 27. Okt 2012, 01:25
von drohne235
PIC18F2550 hat geschrieben:Irgendwas passiert hier schon auf dem Bus

Code: Alles auswählen

eRamWB ' byte schreiben
              mov     dira,  dout         ' bus auf ausgabe schalten
'              call    #setadr           ' adresse setzen
'              and     temp1, h000000ff
'              or      outa,  temp1        ' wert an ports setzen
'              xor     outa,  _bwr         ' schreibsignal aktiv
              mov     dira,  dinp         ' bus auf eingabe schalten
              mov    outa,  _s1          ' bus wieder inaktiv
eRamWB_ret    ret
könnten da noch Rester aktiv sein?
Wie macht sich das bemerkbar?

Re: HBasic

Verfasst: Sa 27. Okt 2012, 02:37
von PIC18F2550
SPIN startet COG mit der Runtime ohne aufruf von eRamWB und eRamRB.
nach einer Pause von ca 1s läuft SPIN weiter und gibt einfach Text aus.

Wird der Aufruf eRamWB mit den 3 Befehlen eingefügt erfolgt vom SPIN-Teil keine Ausgabe mehr.

Re: HBasic

Verfasst: Sa 27. Okt 2012, 05:48
von kuroneko
PIC18F2550 hat geschrieben:Wird der Aufruf eRamWB mit den 3 Befehlen eingefügt erfolgt vom SPIN-Teil keine Ausgabe mehr.
Ich nehm mal an die Textausgabe geht an 'nen anderen Chip, also ueber den Bus. When Dein PASM Fragment den Bus auf inaktiv legt dann kann jeder andere cog sich auf den Kopf stellen, der Bus bleibt inaktiv (wired-OR).

Re: HBasic

Verfasst: Sa 27. Okt 2012, 13:05
von PIC18F2550
Ich hab mir mal eine kleine Testroutine geschrieben.

Code: Alles auswählen

  a:=dira
  b:=outa
  ios.print(String($D, "dira ->"))
  ios.printbin(a>> 0 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>> 8 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>>16 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>>24 & $FF ,8)
  ios.print(String($D, "outa ->"))
  ios.printbin(b>> 0 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>> 8 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>>16 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>>24 & $FF ,8)

  a:=dira
  b:=outa
  ios.print(String($D, "dira ->"))
  ios.printbin(a>> 0 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>> 8 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>>16 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(a>>24 & $FF ,8)
  ios.print(String($D, "outa ->"))
  ios.printbin(b>> 0 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>> 8 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>>16 & $FF ,8)
  ios.print(String("_"))
  ios.printbin(b>>24 & $FF ,8)

  long[$7FF8]:=$7f00            'adresse verbiegen
  long[$7FFC]:=$7F7FF7F7        'Ini Runtime load Programm von externen Ram und Run
  waitcnt(clkfreq + cnt)
  if (long[$7f00]==$0008_4638)
    ios.print(String($D, "hRAM io ->"))
    ios.printhex(long[$7f00],8)
  else
    ios.print(String($D, "hRAM nicht io ->"))
    ios.printhex(long[$7f00],8)

  waitcnt(clkfreq + cnt)
  if (ios.ram_rdlong(0,$7f00)==$0008_4638)
    a:=dira
    b:=outa
    ios.print(String($D, "rDis io ->"))
    ios.printhex(ios.ram_rdlong(0,$7f00),8)
    ios.print(String($D, "dira ->"))
    ios.printbin(a>> 0 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>> 8 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>>16 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>>24 & $FF ,8)
    ios.print(String($D, "outa ->"))
    ios.printbin(b>> 0 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>> 8 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>>16 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>>24 & $FF ,8)
  else
    a:=dira
    b:=outa
    ios.print(String($D, "rDis nicht io ->"))
    ios.printhex(ios.ram_rdlong(0,$7f00),8)
    ios.print(String($D, "dira ->"))
    ios.printbin(a>> 0 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>> 8 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>>16 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(a>>24 & $FF ,8)
    ios.print(String($D, "outa ->"))
    ios.printbin(b>> 0 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>> 8 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>>16 & $FF ,8)
    ios.print(String("_"))
    ios.printbin(b>>24 & $FF ,8)
2012-10-27_13-53-10_264.jpg

Code: Alles auswählen

'                  +------------------------------- /hs
'                  |+------------------------------ /wr
'                  ||+----------------------------- busclk
'                  |||+---------------------------- hbeat
'                  |||| +-------------------------- al
'                  |||| |+------------------------- /bel
'                  |||| ||+------------------------ /adm
'                  |||| |||+----------------------- /ram2
'                  |||| ||||+---------------------- /ram1
'                  |||| |||||           +---------- a0..10
'                  |||| |||||           |
'                  |||| |||||           |        +- d0..7
'                  |||| |||||+----------+ +------+
port    long  %00000000_00000aaa_aaaaaaaa_dddddddd  ' a: adr, d: daten
Es kann doch nicht sein das bel, adm, Ram1, Ram2 und wr nach einer simplen "ios.print..." funktion noch aktiv sind ist da ein gravierender Fehler im reg-ios.spin?

Re: HBasic

Verfasst: Sa 27. Okt 2012, 13:09
von PIC18F2550
Up's altes Bild :oops:
2012-10-27_14-06-35_570.jpg
Nicht alle Bus Bausteine nutzen das Clock-signal!

Re: HBasic

Verfasst: Sa 27. Okt 2012, 14:08
von drohne235
Schau doch einfach ins ios, sind doch bloß ein paar Zeilen Spin: alle Printroutinen nutzen bus_putchar2, welches mit folgender Sequenz endet:

Code: Alles auswählen

  dira := db_in                                         'bus freigeben
  outa := %00001100_01111000_00000000_00000000           'wr=1, prop2=1, busclk=0

DB_IN = %00000111_11111111_11111111_00000000 'maske: dbus-eingabe

Was ist mit kuronekos Vermutung: Greifen mehrere COG's auf den Bus zu? Und wenn ja, sind die Zugriffe dann per Semaphore gegeneinander verriegelt?