Hallo!
Ich mach jetzt mal einen Thread für Operatoren im Propeller-Assembler auf, vielleicht kommen da außer meiner Frage noch andere hinzu, von denen, die sich auch in PASM einarbeiten wollen.
In Spin gibt es den Operator |< "Bitwise decode" um eine Zahl zwischen 0 und 31 in eine PIN-Maske zu wandeln. In Spin ist das kein Problem aber laut Seite 326 im Propellerhandbuch soll das auch in PASM möglich sein. Aber wie, es gibt hier keinen Opcode der von BST akzeptiert wird.
Gruß
TuxFan
PASM Operators
PASM Operators
Wunder gibt es immer wieder.......
Re: PASM Operators
Dies könnte ein "Feature" von BST sein.
Versuch mal "#1<<...". Geht natürlich nur mit Konstanten, nicht Registern
Versuch mal "#1<<...". Geht natürlich nur mit Konstanten, nicht Registern
Zuletzt geändert von josto am Do 2. Feb 2012, 19:15, insgesamt 1-mal geändert.
Täglich verschwinden Rentner im Internet, weil sie "Alt" + "Entfernen" gleichzeitig drücken...
Re: PASM Operators
Funktioniert hier ohne Probleme. Was hast Du denn genau versucht?TuxFan hat geschrieben:In Spin ist das kein Problem aber laut Seite 326 im Propellerhandbuch soll das auch in PASM möglich sein. Aber wie, es gibt hier keinen Opcode der von BST akzeptiert wird.
Code: Alles auswählen
PUB null
DAT
mov temp, #|< 5 ' 2^(0..8)
movd temp, #|< (12 - 9) ' 2^(9..17)
movi temp, #|< (24 - 23) ' 2^(23..31)
long |< 12
temp res 1
Code: Alles auswählen
mov temp, #1
shl temp, #n
Re: PASM Operators
Danke für die Reaktionen.
Als blutiger PASM-Anfänger versuche ich die Device-Selektion des C3-SPI-Bus abzuändern, da ich beim Gam_Bo_Prop, um Strom zu sparen, den Counter weggelassen habe
und nun mit drei I/O-Leitungen des Propellers den Encoder füttere um die 8 (eigentlich 7) Devices (RAM, Flash, SD etc.) zu selektieren. Bei reinem Spin-Code ist das alles kein Problem. Wenn man aber wegen höherer Geschwindigkeit auf Assembler-Routinen wechselt, wird es für mich kompliziert. Um das Rad nicht neu zu erfinden, wollte ich als Software-Grundlage die spi-Treiber aus C3-Femtobasic assimilieren
und diese an die geänderte Hardware anpassen.
Deshalb dachte ich mir folgendes : Die 3 I/O-Leitungen zur Ansteuerung des Encoders liegen beim GBP an P0, P1 und P2. Es bräuchte nun nur der Select-Kanal (1 bis 7) als Parameter/Variable an die Assemblerroutine übergeben werden und dieser per |< in eine Maske überführt zu werden. (Geht natürlich sooooo nicht ganz
)
Das Ganze versuche ich natürlich erst einmal auf dem Breadboard mit meinem SoMProp und ein paar Leuchtdioden sowie etwas Assembler ans Laufen zu bringen, bevor ich die Treiber-Routinen anfasse.
Fixe Masken im DATA sind natürlich auch denkbar würden mMn aber durch die wahrscheinlichen if-Anweisungen deutlich mehr Platz beanspruchen.
Aufgefallen war mir nun der obige Sachverhalt im Handbuch.
Ich hoffe mich verständlich ausgedrückt zu haben......
Gruß
TuxFan
Als blutiger PASM-Anfänger versuche ich die Device-Selektion des C3-SPI-Bus abzuändern, da ich beim Gam_Bo_Prop, um Strom zu sparen, den Counter weggelassen habe


Deshalb dachte ich mir folgendes : Die 3 I/O-Leitungen zur Ansteuerung des Encoders liegen beim GBP an P0, P1 und P2. Es bräuchte nun nur der Select-Kanal (1 bis 7) als Parameter/Variable an die Assemblerroutine übergeben werden und dieser per |< in eine Maske überführt zu werden. (Geht natürlich sooooo nicht ganz

Das Ganze versuche ich natürlich erst einmal auf dem Breadboard mit meinem SoMProp und ein paar Leuchtdioden sowie etwas Assembler ans Laufen zu bringen, bevor ich die Treiber-Routinen anfasse.
Fixe Masken im DATA sind natürlich auch denkbar würden mMn aber durch die wahrscheinlichen if-Anweisungen deutlich mehr Platz beanspruchen.
Aufgefallen war mir nun der obige Sachverhalt im Handbuch.
Ich hoffe mich verständlich ausgedrückt zu haben......

Gruß
TuxFan
Wunder gibt es immer wieder.......
Re: PASM Operators
So jetzt zitiere ich mich mal selber :
Ha, ging sogar leichter als ich dachte. Da die I/O-Leitungen in der richtigen Reihenfolge liegen, P0 als LSB und P2 als MSB am Decoder, kann die Kanal-Nummer (0 bis 7) als long-Variable übergeben werden. Da im Inneren der Variablen binär operiert wird, liegen die richtigen Signale an den Decodereingängen an. Nur die Erstellung der Pin-Maske für die dira-operation muß im Spin-Teil des Programmes durchgeführt werden. Eine |< Operation ist im Moment im PASM-Teil nicht nötig.
Gruß
TuxFan

TuxFan hat geschrieben:........Deshalb dachte ich mir folgendes : Die 3 I/O-Leitungen zur Ansteuerung des Encoders liegen beim GBP an P0, P1 und P2. Es bräuchte nun nur der Select-Kanal (1 bis 7) als Parameter/Variable an die Assemblerroutine übergeben werden und dieser per |< in eine Maske überführt zu werden. (Geht natürlich sooooo nicht ganz).......
Ha, ging sogar leichter als ich dachte. Da die I/O-Leitungen in der richtigen Reihenfolge liegen, P0 als LSB und P2 als MSB am Decoder, kann die Kanal-Nummer (0 bis 7) als long-Variable übergeben werden. Da im Inneren der Variablen binär operiert wird, liegen die richtigen Signale an den Decodereingängen an. Nur die Erstellung der Pin-Maske für die dira-operation muß im Spin-Teil des Programmes durchgeführt werden. Eine |< Operation ist im Moment im PASM-Teil nicht nötig.
Code: Alles auswählen
con
_clkmode = xtal1 + pll8x
_xinfreq = 10_000_000
spiSel0 = 0 ' SPI select0
spiSel1 = 1 ' SPI select1
spiSel2 = 2 ' SPI select2
var
long Kanal, Sel
long Sel0, Sel1, Sel2
PUB main
Sel := 0
Sel0 := |< spiSel0
Sel1 := |< spiSel1
Sel2 := |< spiSel2
Sel := Sel2 or Sel1 or Sel0 'gesamte Pinmaske
Kanal := 7
cognew(@init, @Kanal)
DAT
org 0
init mov temp,par
rdlong channel,temp
add temp,#4
rdlong select,temp
mov dira,select
or outa,channel
temp long 0
select long 0
channel long 0
fit 496
TuxFan
Wunder gibt es immer wieder.......
Re: PASM Operators
Wenn Du schon Konstanten benutzt dann kannst Du Dir 'ne Menge code sparen.
Code: Alles auswählen
con
_clkmode = xtal1 + pll8x
_xinfreq = 10_000_000
#0, spiSel0, spiSel1, spiSel2 ' SPI select
var
long Kanal
PUB main
Kanal := %111{7} << spiSel0 ' falls spiSel0 mal nicht 0 ist
cognew(@init, @Kanal)
DAT
org 0
init mov dira,select
rdlong channel,par
or outa,channel
waitpeq $, #0 ' stop
select long |< spiSel0 | |< spiSel1 | |< spiSel2
channel res 1
fit
Re: PASM Operators
@kuroneko
Schönen Dank für die Tips.
Gruß
TuxFan
Schönen Dank für die Tips.
Gruß
TuxFan
Wunder gibt es immer wieder.......