;***************************************************************************** ; A/D converter initialization subroutine. Sets up for reading A/D ; channels AD1.6 and AD1.7 to which vehicle sensors left and right are ; connected. ; ; Inputs: none ; Returned Values: none ; Registers used: ro, r1 ; ; NOTES: ; This routine written for the simple vehicle. Call it once. ; analog sensor inputs come in on AD1.6 and AD1.7 (P0.21 & P0.22) ; (A/D converter #1 on channels 6 and 7) ; Use AD1CR register at 0xE0060000 ; sets the following bits to one in AD1CR: (0xE0060000) (pg 267) ; bit 21 (A/D on) ; bit 16 (burst mode, i.e. A/D continously does conversions) ; bit 6 (turns on channel 6) ; bit 7 (turns on channel 7) ; Reads data from AD1DR6 at 0xE0060028 and AD1DR7 at 0xE006002C (pg 266) ; Sets I/O pins P0.21 & P0.22 for analog input (AD1 ch 6 & 7 respectively) ; by setting bits 11 and 12 in PINSEL1 (0xE002C004) (pg 78) ; (page numbers above refer to the NXP LPC2148 users manual) ;***************************************************************************** ad_init STMFD sp!,{lr} LDR r1,=PINSEL1 ; load address of Pin Function selection reg #1 LDR r0,=0x1800 ; set bits 11 & 12 for pins P0.21 & P0.22 as input STR r0,[r1] LDR r1,=AD1CR ; get address of AD 1 control register LDR r0,=0x2100C0 ; A/D on, burst mode, chs 6 & 7 to be converted STR r0,[r1] end_ad_init LDMFD sp!,{pc} ;***************************************************************************** ; Read vehicle photo sensors. ; Reads channels AD1.6 and AD1.7 to which vehicle sensors left ; and right are connected. ; ; Inputs: none ; Returned Values: ro = left sensor voltage. 0 to 3FF (3FF =2 volts) ; r1 = right sensor voltage. 0 to 3FF ; ; Registers used: ro, r1, r2 ; ; Note: ad_init must be called once prior to calling ad_read ;***************************************************************************** ad_read STMFD sp!,{lr} LDR r2,=AD1DR6 ; channel 6 data register address LDR r0,[r2] ; read left sensor voltage LDR r2,=AD1DR7 ; channel 7 data register address LDR r1,[r2] ; read right sensor voltage MOV r0,r0,ASR #6 ; shift right to justify the value MOV r1,r1,ASR #6 LDR r2,=0x3FF ; 10 bit mask AND r0,r0,r2 ; set upper bits to zero if set AND r1,r1,r2 end_ad_read LDMFD sp!,{pc}