Subject:
|
Need help on sony-ir.asm asembly code
|
Newsgroups:
|
lugnet.robotics
|
Date:
|
Thu, 26 Apr 2001 02:19:31 GMT
|
Viewed:
|
788 times
|
| |
| |
> Hello. We are trying to program a TJ Pro Robot
> (from Mr. Robot) to respond to a Sony IR remote
> control. We have a copy of your sony-ir.asm program,
> and we were wondering how we could modify it to work
> for the TJ Pro instead of the HandyBoard.
>
> Some specific questions we have about the program:
>
>
> * sony-ir.asm
> *
> * interrupt routine decodes the Sony format IR
> protocol
> *
> * by Brian Silverman (bss@media.mit.edu)
> * ported to IC and Handy Board by Fred Martin
> (fredm@media.mit.edu)
> * January 27, 1996
> *
>
> TIC1 EQU $1010 ; Timer Input Capture register 1
> TFLG1 EQU $1023 ; main Timer interrupt Flag register 1
> TCTL2 EQU $1021 ; Timer Control register 2
> TMSK1 EQU $1022 ; main Timer interrupt Mask register 1
>
> TOC4INT EQU $E2 ; Timer Output Compare 4
> TIC1INT EQU $EE ; Timer Input Capture 1
>
> [***Here: would we need to change TOC4INT or TIC1INT
> for a different board? Are you using Port A2 for
> input capture?]
>
> org MAIN_START
>
>
> ir_timer fcb 0
> ir_shift fcb 0
> ir_phase fcb 0
> ir_data fcb 0
> ir_data_copy fcb 0
> last_captured_input fdb 0
>
> subroutine_initialize_module:
> * poke isr vector
> ldx #$bf00 * assume handy board's special mode
>
> [*****Here: If we don't have a HandyBoard, what do we
> need to do here?]
>
> ldd #ir_routine
> std TIC1INT,X
>
> * install millisec routine
> ldd TOC4INT,X ; SystemInt on TOC4
> std millisec_exit+1
>
> * install ourself as new vector
> ldd #millisec_routine
> std TOC4INT,X
>
> rts
>
>
> * the millisec routine is installed into the pcode's
> "SystemInt" routine,
> * which is called every millisecond
>
> [***Here: We don't have the .asm version of the TJ Pro
> pcode, so will the "SystemInt" routine be the same?
> If not, how do we deal with this?]
>
> millisec_routine
> inc ir_timer
> bne millisec_exit
> dec ir_timer
> clr ir_data
>
> millisec_exit
> JMP $0000 ; this value poked in by init routine
>
>
> * the ir routine is called whenever a falling edge
> (i.e., beginning of
> * valid ir signal) is received
> ir_routine
> ldaa #4
> staa TFLG1 * clear tic1 interrupt flag
>
> ldaa ir_timer
> bpl irrot20
> ldaa #9
> staa ir_phase
> bra irrot80
>
> irrot20 ldaa ir_phase
> beq irrot80 * inhibit repeats
> ldd TIC1
> subd last_captured_input
> cmpd #3000
> ror ir_shift
> dec ir_phase
> bne irrot80
> ldaa ir_shift
> coma
>
> irrot60 staa ir_data
> staa ir_data_copy
>
> irrot80 ldd TIC1
> std last_captured_input
> clr ir_timer
> rti
>
> * returns IR value received since last call
> subroutine_ir_data:
> clra
> ldab ir_data_copy
> clr ir_data_copy
> rts
>
> * call with 1 to turn on; 0 to turn off
> subroutine_sony_init
> ldx #$1000
> tstb
> beq sony_off
> bset TMSK1,X $04 * enable tic1 interrupt
> bset TCTL2,X $20 * on falling edges (i.e., IR
> detects)
> bclr TCTL2,X $10
> rts
> sony_off
> bclr TMSK1,X $04
> rts
>
>
>
> Thank you for your help,
>
> Richard Heslop
>
>
|
|
1 Message in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|