HBasic

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag 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.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag von drohne235 »

Code: Alles auswählen

              mov     outa,  _s1          ' bus wieder inaktiv
              andn    outa,  _s1          ' bus wieder inaktiv
Das funktioniert nicht.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag 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
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag 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?
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag 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?
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag 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.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: HBasic

Beitrag 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).
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag 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?
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Up's altes Bild :oops:
2012-10-27_14-06-35_570.jpg
Nicht alle Bus Bausteine nutzen das Clock-signal!
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag 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?
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Antworten