' ' Test of cogserial - testrunner: test echo server ' OBJ ser: "cogserial.spin2" 'this one takes care of communication with terminal/user interface VAR long cog 'cog id of this instance long run_stack[20] long recbuf1[$4000] '16k buffer long recbuf2[$4000] '16k buffer long command_ptr ' '----------------------------------------------------------------------- 'stop cog if already running '----------------------------------------------------------------------- ' PUB stop if cog ser.stop cogstop(cog-1) cog := 0 ' '----------------------------------------------------------------------- 'start new cog to use serial driver and run test '----------------------------------------------------------------------- ' PUB start(commandptr, rxpin1, txpin1 , baudrate, rxpin2 = -1, txpin2 = -1) command_ptr := commandptr if rxpin2 == -1 ser.startExt(rxpin1, txpin1, baudrate, baudrate, ser#_rxmode+(%0111<<28), ser#_txmode,0, $FF, $100, $FF,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1) cog := cognew(run_init1, @run_stack) + 1 else ser.startExt(rxpin1, txpin1, baudrate, baudrate, ser#_rxmode+(%0111<<28), ser#_txmode,0, $7F, $80, $7F, rxpin2, txpin2, baudrate, baudrate, ser#_rxmode+(%0111<<28),ser#_txmode, $100, $7F, $180, $7F) cog := cognew(run_init2, @run_stack) + 1 ' '----------------------------------------------------------------------- 'new cog starts serial driver using smart pin rx to receive from rx-1 '----------------------------------------------------------------------- ' PUB run_init1 | a,b,c,d,count repeat ' asm ' waitx ##40_000_000 'slow down for terminal, just wait a little bit ' endasm longfill(@recbuf1,$1000,0) ' clear recbuf1 repeat until long[command_ptr] > 0 'now wait for command to start test count := long[command_ptr] c := -2 d := cnt ser.rxread_async(@recbuf1, count,0) ser.txwrite_async($FC000, count,0) ser.wait_txready(0)',CLKFREQ) ser.wait_rxready(0,1_000_000) d := cnt - d if d<0 d := -d a := $FC000 b := @recbuf1 repeat count if (byte[a++]<>byte[b++]) c := -3 if c == -3 d := -d long[command_ptr+4] := d long[command_ptr] := -1 PUB run_init2 | a,b,c,d,count repeat ' asm ' waitx ##40_000_000 'slow down for terminal, just wait a little bit ' endasm longfill(@recbuf1,$2000,0) 'clear recbuf1 and recbuf2 repeat until long[command_ptr] > 0 'now wait for command to start test count := long[command_ptr] c := -2 d := cnt ser.rxread_async(@recbuf1, count,0) ser.rxread_async(@recbuf2, count,1) ser.txwrite_async($FC000, count,0) ser.txwrite_async($FC000, count,1) ser.wait_txready(0)',CLKFREQ) ser.wait_txready(1)',CLKFREQ) ser.wait_rxready(0,1_000_000) ser.wait_rxready(1,1_000_000) d := cnt - d if d<0 d := -d a := $FC000 b := @recbuf1 repeat count if (byte[a++]<>byte[b++]) c := -3 a := $FC000 b := @recbuf2 repeat count if (byte[a++]<>byte[b++]) c := -3 if c == -3 d := -d long[command_ptr+4] := d long[command_ptr] := -1