when i'm using this assembler code :
Code: Select all
.text
.align 2
.globl DoPingAsm0
.type DoPingAsm0, @function
.cc_top DoPingAsm0.function
#*********************************************************************************
# Fkt.: DoPingAsm0()
# Ausgabe von 16-Bit-Werten aus einem Array an den gepufferten 16-Bit-Port pPing
# Die Basisadresse liegt hinter dem Array ValTable[]. Durch den neg. Index in r1
# kann die Schleife auf 4 Befehle reduziert werden.
# Mit clk=25MHz könne Werte aus ValTable[] alle 40ns ausgegeben werden.
# Par.: r0 - Adr. nach dem Array, 2er-Adr.
# r1 - Anz, Anzahl der auszugebenden 16-Bit-Werte als negativer Wert
# Muß <= Tabellenlänge sein. DARF NIE 0 SEIN !!!!!!!!!!
# r2 - Port
# r3 -
# used: r4 - inc-Wert, always 1
# r5 - Val, 16-Bit-Wert aus ValTable0[]
#*********************************************************************************
DoPingAsm0:
entsp 10 # 10 scheint übertrieben
stw r4 , sp [1]
stw r5 , sp [2]
#--- Init ------------------------------
ldc r4, 1 # incr-Wert
#---------------------------------------
Loop0:
ld16s r5, r0[r1] # Val = ValTable0[Anz] # Anz ist negativer Wert
out res[r2],r5 # pPing <: Val
#nop
add r1, r1, r4 # Anz = Anz - 1
bt r1, Loop0
#--------------------------------------
ldw r4 , sp [1]
ldw r5 , sp [2]
retsp 10
#.size DoPingAsm0, -DoPingAsm0
.cc_bottom DoPingAsm0.function
.globl DoPingAsm0.nstackwords
.linkset DoPingAsm0.nstackwords, 10
i have ever the event, where the assembler function is called and the programm will not jump into the other event. The second event is receiving information about an interface. The timing should work. When i comment the assembler function, all works fine, but i need this function for the time critically output on ports. ( the sourcecode is from another person [retirement] )
Best regards :)