class IODaemon extends Thread
{
static final int BASE=0x800000;
- static final int ST=50;
+ static final int ST=500;
static AIC aic;
static Host host;
aic.brake.release();
- for(i=0;(i <= 24) && run;i++) iter(i);
+ for(i=0;(i <= 12) && run;i++) iter(i);
while(run)
{
- for(i=24;(i >= -24) && run;i--) iter(i);
- for(i=-24;(i <= 24) && run;i++) iter(i);
+ for(i=12;(i >= -12) && run;i--) iter(i);
+ for(i=-12;(i <= 12) && run;i++) iter(i);
}
aic.off();
}
${ASM} ${ASMOPT} encoder.mpp
pwm.mpp: pwm.a51 ${TINIINC} ${ASMINC}/aicpld.inc
- ${ASMMACRO} -I${ASMINC} pwm.a51
+ ${ASMMACRO} -I${ASMINC} -e- pwm.a51
-pwm.tlib: pwm.mpp
- ${ASM} ${ASMOPT} pwm.mpp
+pwm.tlib: pwm.mpp tlib/pwm.mpp
+ cat tlib/pwm.mpp pwm.mpp > pwm.tmp.mpp
+ echo end >> pwm.tmp.mpp
+ ${ASM} ${ASMOPT} pwm.tmp.mpp
+
+tlib/pwm.mpp: tlib/pwm.a51
+ $(MAKE) -C tlib pwm.mpp
AIC.jar: ${PKGPATH}/PLD.class\
${PKGPATH}/CtrlRegister.class\
$(MAKE) -C tlib clean
distclean: clean
- rm -rf AIC.jar *.a
+ rm -rf AIC.jar *.a aicio.mpp.lib
$(MAKE) -C tlib distclean
uninstall:
$include(aicpld.inc)
$include(aicmacro.inc)
+_bpx EQU 01Eh ; _bpx (frame pointer) mapped to R8_B3:R7_B3
+_ap EQU 01Dh ; _ap mapped to R6_B3
; data saved in big-endian mode
; PWM base address
; Initializes PWM
; void pwm_initialize(unsigned long base,unsigned int min_count,unsigned int count);
pwm_initialize:
- clr a
- lcall Natlib_LoadPrimitive ; get first parameter in R3:R2:R1:R0
+ push _bpx ; SDCC style preface code
+ push _bpx+1
+ mov _bpx,sp
+ mov _bpx+1,esp
+ anl _bpx+1,#3
+
+
+ mov r0,dpl ; parameter in b:dpx:dph:dpl
+ mov r1,dph ; BUG IN SDCC MANUAL!
+ mov r2,dpx
+ mov r3,b
push R0_B0
push R1_B0
STORE24 #pwm_base ; store PWM address
- mov a,#1h
- lcall Natlib_LoadPrimitive ; get second parameter in R3:R2:R1:R0
- mov dptr,#pwm_min_count ; stores it
- mov a,r1
- movx @dptr,a
+ mov a,_bpx
+ clr c
+ subb a,#06 ; second parameter is base pointer-6
+ mov b,a ; point dpx:dptr to it
+ mov a,_bpx+1
+ subb a,#0
+ mov dpx,#40h
+ mov dph,a
+ mov dpl,b
+
+ movx a,@dptr ; min_count LSB
+ mov b,a
inc dptr
- mov a,r0
- movx @dptr,a
-
- mov a,#2h
- lcall Natlib_LoadPrimitive ; get third parameter in R3:R2:R1:R0
+ movx a,@dptr ; min_count MSB
+ mov dptr,#pwm_min_count ; stores it
+ movx @dptr,a
+ inc dptr
+ mov a,b
+ movx @dptr,a
+
+ mov a,_bpx
+ clr c
+ subb a,#8 ; third parameter is base pointer-8
+ mov b,a ; point dpx:dptr to it
+ mov a,_bpx+1
+ subb a,#0
+ mov dpx,#040h
+ mov dph,a
+ mov dpl,b
+
+ movx a,@dptr ; store in dph:dpl
+ inc dptr
+ mov b,a
+ movx a,@dptr
+ mov dph,a
+ mov dpl,b
+
+ mov sp,_bpx ; SDCC style epilogue code
+ mov esp,_bpx+1
+ pop _bpx+1
+ pop _bpx
+ ; to fall over max count should be in dph:dpl
ljmp pwm_set_count ; fall over to native_setCount
${ASMMACRO} -I${ASMINC} encoder.a51
pwm.mpp: pwm.a51 ${TINIINC}
- ${ASMMACRO} -I${ASMINC} pwm.a51
+ ${ASMMACRO} -I${ASMINC} -e- pwm.a51
install:
lcall Natlib_LoadPrimitive ; get parameter in R3:R2:R1:R0
; only the lower 16 bits are usefull
- mov dph,r1 ; SDCC parameters in dph:dpl
+ mov dph,r1 ; SDCC parameter in dph:dpl
mov dpl,r0 ; BUG IN SDCC MANUAL!
lcall pwm_set_count
; Initializes PWM
; private static native void initialize(int base,int min_count,int count);
native_initialize:
- clr a
- lcall Natlib_LoadPrimitive ; get first parameter in R3:R2:R1:R0
-
+ mov a,#2h
+ lcall Natlib_LoadPrimitive ; get third parameter in R3:R2:R1:R0
+
push R0_B0
push R1_B0
- push R2_B0
- mov dptr,#CONTROL ; compute Control address
- lcall Add_Dptr1_24 ; dptr=dptr+R2:R1:R0
+ mov a,#1h
+ lcall Natlib_LoadPrimitive ; get second parameter in R3:R2:R1:R0
- STORE24 #ctrlbase ; store Control register address
+ push R0_B0
+ push R1_B1
- pop R2_B0
- pop R1_B0
- pop R0_B0
+ clr a
+ lcall Natlib_LoadPrimitive ; get first parameter in R3:R2:R1:R0
- mov dptr,#PWM ; compute PWM address
- lcall Add_Dptr1_24 ; dptr=dptr+R2:R1:R0
+ mov b,r3 ; SDCC parameter in b:dpx:dph:dpl
+ mov dpx,r2 ; BUG IN SDCC MANUAL!
+ mov dph,r1
+ mov dpl,r0
- STORE24 #pwmbase ; store PWM address
- mov a,#1h
- lcall Natlib_LoadPrimitive ; get second parameter in R3:R2:R1:R0
- mov dptr,#min_count ; stores it
- mov a,r1
- movx @dptr,a
- inc dptr
- mov a,r0
- movx @dptr,a
+ lcall pwm_initialize
- mov a,#2h
- lcall Natlib_LoadPrimitive ; get third parameter in R3:R2:R1:R0
+ pop ACC ; fix-up stack
+ pop ACC
+ pop ACC
+ pop ACC
- ljmp set_count ; fall over to native_setCount
+ clr a ; sucess
+ ret
; Finalizes PWM
; public native void finalize()
native_finalize:
lcall pwm_finalize
+
+ clr a ; sucess
ret
; Sets the duty-cycle of PWM
clr a
lcall Natlib_LoadPrimitive ; get parameter in R3:R2:R1:R0
- mov b,r3 ; SDCC parameters in b:dpx:dph:dpl
+ mov b,r3 ; SDCC parameter in b:dpx:dph:dpl
mov dpx,r2 ; BUG IN SDCC MANUAL!
mov dph,r1
mov dpl,r0
native_on:
lcall pwm_on
+
+ clr a ; sucess
ret
; Turns the PWM off
; public static native void off()
native_off:
lcall pwm_off
+
+ clr a ; sucess
ret
end
aic->motor.on();
aic->brake.release();
- for(i=0;(i <= 24) && run;i++)
+ for(i=0;(i <= 12) && run;i++)
{
if(kbhit()) run=0;
iter(aic,i);
}
while(run)
{
- for(i=24;(i > -24) && run;i--)
+ for(i=12;(i > -12) && run;i--)
{
if(kbhit()) run=0;
iter(aic,i);
}
- for(i=-24;(i <= 24) && run;i++)
+ for(i=-12;(i <= 12) && run;i++)
{
if(kbhit()) run=0;
iter(aic,i);