SETFREQ EM16
SYMBOL GPS_TX = 7
SYMBOL GPS_RX = 0
SYMBOL GPS_BAUD = T4800_16
SYMBOL UDRIVE_RESET = 2
SYMBOL uDrive_TX = 1
SYMBOL uDrive_RX = 4
SYMBOL uDRIVE_BAUD = T4800_16
HSERSETUP B4800_16, %00 'setup hardware serial
GOSUB turn_off_nmea
GOSUB initUdrive
GOSUB setAddress
MAIN:
for b6 = 0 to 50 'wipe scratchpad
put b6," "
next b6
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,01,01,00,01*24",CR,LF)
HSERIN [1000,readout],0,126,("$")
GOTO MAIN
ReadOut:
FOR b20 = 0 to 50
GET b20, b1 'get byte from scratchpad
SERTXD (B1) 'send byte to screen
SEROUT uDrive_TX,uDRIVE_BAUD,(0x40,0x77,B1) 'send byte to uSD 'send byte to screen
SERIN uDrive_RX,uDRIVE_BAUD,B1 'wait for ACK
sertxd(#b1)
IF B1 != 0x06 THEN ReadOut 'if no ACK start again
NEXT b20
GOTO MAIN
turn_off_nmea:
SERTXD("Turning off NMEA strings",CR,LF)
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,00,00,00,01*24",CR,LF) 'GGA
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,01,00,00,01*25",CR,LF) 'GLL
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,02,00,00,01*26",CR,LF) 'GSA
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,03,00,00,01*27",CR,LF) 'GSV
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,04,00,00,01*20",CR,LF) 'RMC
SEROUT GPS_TX,GPS_BAUD,("$PSRF103,05,00,00,01*21",CR,LF) 'VTG
RETURN
initUdrive:
LOW UDRIVE_RESET
WAIT 4
HIGH UDRIVE_RESET
WAIT 4 'wait as spec
SEROUT uDrive_TX,uDRIVE_BAUD,("U") 'send init byte
SERIN uDrive_RX,uDRIVE_BAUD,B1 'wait for ACK
IF B1 != 0x06 THEN initUdrive 'if no ACK start again
SERTXD ("Drive Initialized",CR,LF)
RETURN
setAddress:
SEROUT uDrive_TX,uDRIVE_BAUD,(0x40,0x41,0x00,0x00,0x00,0x00) 'set address to 0
SERIN uDrive_RX,uDRIVE_BAUD,(B1) 'wait for ACK
IF B1 != 0x06 THEN setAddress 'if no ACK start again
SERTXD ("Address set",CR,LF)
RETURN