Re: Portzugriff aus Segment 3 Kategorie: Progr. Assembler, TaskingTools, OS (von Hansi - 20.11.2004 10:53) | ||
Als Antwort auf Re: Portzugriff aus Segment 3 von Hansi - 19.11.2004 22:35 | ||
| ||
> > Hallo Hansi, > > > > > > > > > > > > P1L_ EQU 0FF04h > > > > P1H_ EQU 0FF06h > > > > > > > > ..... > > > > move r3,#Speicheradresse ; Speicherplatz, der #P1L_ oder #P1H_ enthält > > > > EXTS #8,#1 > > > > mov r7,[r3] ; r7 enthält jetzt P1L_ > > > > EXTS #0,#1 > > > > mov r2,[r7] ; r2 soll jetzt die Ports enthalten tut es aber nicht > > > > ...... > > > > > > > > > > > > eine andere Variante funktioniert > > > > > > > > P1L_ EQU 0FF04h > > > > P1H_ EQU 0FF06h > > > > > > > > ..... > > > > EXTS #0,#1 > > > > mov r2,P1L_ ; so funktioniert es > > > > ...... > > > > > > > > > > > > ist das ein generelles Problem, gib es eine andere Möglichkeit den Port in r2 zu laden? > > > > Bist Du sicher, da� Der Speicherplatz (R3) korrekt ist ? > > > > Denn bei mir funzt es Problemlos: > > > > $segmented > > $model(medium) > > $extend > > $nomod166 > > $stdnames(reg164ci.def) > > $NOLOCALS > > regdef R12,R4,R1 ,R2 > > ;**************************************************************************** > > > > BusAddr EQU 0FD10H > > BusAddrA EQU 0FD12H > > AddrL EQU 0FD14H > > AddrH EQU 0FD16H > > DataW EQU 0FD18H > > Ports EQU 0FD1AH ; I/O-Ports= Bit 6,7 > > > > ; Definition des OS-Routinen > > OSsegment EQU 0 > > POP_R4 EQU 0765AH > > PUSH_R12 EQU 075D6H > > > > userseg SECTION CODE word at 32000h > > assume dpp3:userseg > > > > > > ;**************************************************************************** > > ptest proc far > > CALLS OSsegment,POP_R4 ;hole Daten vom Stack > > > > EXTS #0, #1 > > MOV R12, [R4] > > > > CALLS OSsegment,PUSH_R12 ;lade Daten auf den Stack > > POP R1 > > POP R1 > > RETS > > ptest endp > > userseg ENDS > > END > > > > > > Das C2-Testproggie dazu: > > //------------------------------------------------ > > inline function test (int port) returns int > > //------------------------------------------------ > > { > > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0x300; > > inline vmcodes.VM_LOAD_IMMEDIATE_INT; > > inline 0x2000; > > inline vmcodes.VM_SYSCALL; > > } > > > > thread main > > {byte i;int wert; > > lcdext.init(); > > loop > > { > > lcdext.line(1); > > for i= 8 ... 15 lcdext.ziff(ports.get(i)and 1); > > lcdext.line(2); > > wert=test(0xFF06); > > for i= 0 ... 7 lcdext.ziff((wert shr i)and 1); > > } > > } > > > > > > > Hat da noch niemand eine Antwort drauf? André H. , Du auch nicht? > > > Andre, ich habe Dir übrigens am 15. eine mail geschickt ( .....@imail.de ) , kam sie nicht an? > > > > Sorry, aber da ich z.Zt. fast keine Zeit habe, dauert bei mir alles ein wenig länger. > > Das gilt für E-Mail, Postings und alles andere auch. > > > > Bei EMails kann es daher schon einmal über eine Woche dauern, bis ich zum Antworten komme. > > Im Forum ist es ähnlich, nur da� dies meist sogar länger dauert. > > Eigentlich müsste ich jetzt produzieren, jedoch hat sich im Forum wieder zuviel angesammelt, > > und mein Platinenhersteller lässt mich gerade im Stich, soda� ich nur einen kleinen Teil > > der Bestellungen heute fertigmachen kann. (Meine Platinenproduktion, die gestern fertig sein sollte, > > bekomme ich wegen eines Herstellungsfehlers ich erst am Dienstag, da alle Platinen > > scheinbar neu produziert werden müssen.) > > > > MfG André H. > > Guten Abend André, > > da bin ich mir sogar sehr sicher weil ich die gleiche Speicherstelle mit dem gleichen Inhalt > jetzt in einer anderen Form Abfrage und beide Ports klappen einwandfrei. > > > > ..... > P1L_ EQU 0FF04h > P1H_ EQU 0FF06h > > ....... > mov r3,#Speicheradresse ; Speicherplatz, der #P1L_ oder #P1H_ enthält > EXTS #8,#1 > mov r7,[r3] ; r7 enthält jetzt #P1L_ > cmp r7, #P1L_ > jmpr cc_EQ, Sub_P1L > > Sub_P1H: EXTS #0,#1 > mov r2,#P1H_ > ...... > Sub_P1L: EXTS #0,#1 > mov r2,#P1L_ > ....... > > > > Gru� Hansi > Guten Morgen, Da kommt mir gerade so ein Verdacht! Vieleicht wurde ja tatsächlich der Port eingelesen, allerdings dürfte der Befehl mov r2,#P1L langsammer abgearbeitet werden als der Befehle mov r2,[r7]. Dann kann es durchaus sein, dass das Timing in meiner Routine nicht mehr pa�t ( 75 bis 175 Durchläufe ) und deshalb keine gültigen Bits erkannt wurden. Ich habe eine Testschleife geschrieben, wo 2 Befehle ( "mov r2,#PiL_ ", "and r2,#0080h", "xor r2,#0080h" ) gegen "and r2,r6 ", "xor r2,r6" ausgetauscht wurden. ( vorher r6 mit #0080h geladen ). Die Schleife wurde sage und schreibe 20% schneller durchlaufen. Gru� Hansi ...ich werde die Angelegenheit noch einmal austesten | ||
Antwort schreiben Antworten: |