REM Beagle XM, test of all 22 GPIO outputs (driving LEDs) on the main expansion port REM Program is written in Arm Basic V REM v1.01, 20/12/11 REM Requires XM to be running RISC OS REM Requires Tank's 'GPIO' module to be loaded: http://www.tankstage.co.uk/Software/GPIO.zip MODE MODE OFF ON ERROR ON: REPORT: PRINT" at line "; ERL: END SYS "OS_Memory",13,&48002000,&100 TO ,,,mempad%: REM gpio padconfig registers SYS "OS_Memory",13,&49056000,&100 TO ,,,mem5%: REM gpio module 5 (main exp. 18 pins) SYS "OS_Memory",13,&49058000,&100 TO ,,,mem6%: REM gpio module 6 (main exp. 4 strays) SYS "GPIO_ExpAsGPIO",3: REM Set all 22 expansion pins as GPIO outputs DIM gpio_data%(22,3) FOR n%=1 TO 22 FOR p%=1 TO 3 READ gpio_data%(n%,p%) NEXT p% NEXT n% PROCassemble REM End of GPIO driver section - rest of prog just plays with order of LEDs to be lit: dummy%=RND(-TIME) PRINTTAB(10,16) "Testing all 22 GPIO expansion outputs by setting individual LEDs to produce visual sequences:"' REPEAT PROCodd_even PROCshoot_right PROCrandom PROCshoot_left PROCbounce PROCmulti UNTIL FALSE END DEF PROCodd_even PRINTTAB(10,24) "Pattern = Odd/even " FOR p%=1 TO 4 FOR n%=1 TO 21 STEP 2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 PRINTTAB(10,28) "Setting odd GPIO pins high";SPC10 CALL write% NEXT n% t%=TIME: REPEAT UNTIL TIME>=t%+35 FOR n%=1 TO 21 STEP 2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 CALL write% NEXT n% FOR n%=2 TO 22 STEP 2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 PRINTTAB(10,28) "Setting even GPIO pins high";SPC10 CALL write% NEXT n% t%=TIME: REPEAT UNTIL TIME>=t%+35 FOR n%=2 TO 22 STEP 2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 IF p%=4 D%=gpio_data%(n%,3)+&94 CALL write% NEXT n% NEXT p% ENDPROC DEF PROCmulti PRINTTAB(10,24) "Pattern = Half on/off " FOR loop%=1 TO 2 FOR r%=1 TO 11 C%=gpio_data%(r%,2) D%=gpio_data%(r%,3)+&94 PRINTTAB(10,28) "Setting 11 GPIO pins";SPC10 CALL write% t%=TIME: REPEAT UNTIL TIME>=t%+5 NEXT r% FOR r%=1 TO 11 C%=gpio_data%(r%,2) D%=gpio_data%(r%,3)+&90 PRINTTAB(10,28) "Unsetting 11 GPIO pins";SPC10 CALL write% NEXT r% t%=TIME: REPEAT UNTIL TIME>=t%+15 FOR r%=22 TO 12 STEP -1 C%=gpio_data%(r%,2) D%=gpio_data%(r%,3)+&94 PRINTTAB(10,28) "Setting 11 GPIO pins";SPC10 CALL write% t%=TIME: REPEAT UNTIL TIME>=t%+5 NEXT r% FOR r%=22 TO 12 STEP -1 C%=gpio_data%(r%,2) D%=gpio_data%(r%,3)+&90 PRINTTAB(10,28) "Unsetting 11 GPIO pins";SPC10 CALL write% NEXT r% t%=TIME: REPEAT UNTIL TIME>=t%+15 NEXT loop% ENDPROC DEF PROCrandom PRINTTAB(10,24) "Pattern = Random " FOR n%=1 TO 80 r%=RND(22) C%=gpio_data%(r%,2) D%=gpio_data%(r%,3)+&94 PRINTTAB(10,28) "Setting GPIO ";gpio_data%(r%,1);" high - pin=";r%;SPC10 CALL write% t%=TIME: REPEAT UNTIL TIME>=t%+5 D%=gpio_data%(r%,3)+&90 CALL write% NEXT n% ENDPROC DEF PROCshoot_right PRINTTAB(10,24) "Pattern = Shoot right " FOR p%=1 TO 22 FOR n%=1 TO p% PRINTTAB(10,28) "Setting GPIO ";gpio_data%(n%,1);" high - pin=";n%;SPC10 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 CALL write% t%=TIME: REPEAT UNTIL TIME>=t%+2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 CALL write% NEXT n% NEXT p% ENDPROC DEF PROCshoot_left PRINTTAB(10,24) "Pattern = Shoot left " FOR p%=22 TO 1 STEP -1 FOR n%=22 TO p% STEP -1 PRINTTAB(10,28) "Setting GPIO ";gpio_data%(n%,1);" high - pin=";n%;SPC10 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 CALL write% t%=TIME: REPEAT UNTIL TIME>=t%+2 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 CALL write% NEXT n% NEXT p% ENDPROC DEF PROCbounce PRINTTAB(10,24) "Pattern = Bounce " FOR loop%=1 TO 4 FOR p%=5 TO 22 FOR n%=p%-3 TO p% PRINTTAB(10,28) "Setting GPIO ";gpio_data%(n%,1);" high - pin=";n%;SPC10 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 CALL write% t%=TIME: REPEAT UNTIL TIME>t% C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 CALL write% NEXT n% NEXT p% FOR p%=22 TO 5 STEP -1 FOR n%=p%-3 TO p% PRINTTAB(10,28) "Setting GPIO ";gpio_data%(n%,1);" high - pin=";n%;SPC10 C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&94 CALL write% t%=TIME: REPEAT UNTIL TIME>t% C%=gpio_data%(n%,2) D%=gpio_data%(n%,3)+&90 CALL write% NEXT n% NEXT p% NEXT loop% ENDPROC DEF PROCassemble DIM write% 100, read% 100 P%=write% [OPT 0 SWI "OS_EnterOS" STR R2,[R3] SWI "OS_LeaveOS" MOV PC,R14 ] P%=read% [OPT 0 SWI "OS_EnterOS" LDR R0,[R1] SWI "OS_LeaveOS" MOV PC,R14 ] ENDPROC DATA 168,%100000000,mem6% DATA 183,%100000000000000000000000,mem6% DATA 157,%100000000000000000000000000000,mem5% DATA 130,%100,mem5% DATA 156,%10000000000000000000000000000,mem5% DATA 131,%1000,mem5% DATA 159,%10000000000000000000000000000000,mem5% DATA 132,%10000,mem5% DATA 161,%10,mem6% DATA 133,%100000,mem5% DATA 162,%100,mem6% DATA 134,%1000000,mem5% DATA 158,%1000000000000000000000000000000,mem5% DATA 135,%10000000,mem5% DATA 145,%100000000000000000,mem5% DATA 136,%100000000,mem5% DATA 143,%1000000000000000,mem5% DATA 137,%1000000000,mem5% DATA 146,%1000000000000000000,mem5% DATA 138,%10000000000,mem5% DATA 144,%10000000000000000,mem5% DATA 139,%100000000000,mem5%