fields(T) spi_cemask = $8F spi_dopin = 4 spi_clkpin = 5 spi_dipin = 6 spi_dt = 150 endfields(T) -- ADC fields(A) spi_cemask = $8 spi_dopin = 2 spi_dipin = 1 spi_clkpin = 0 spi_dt = 150 endfields(A) -- DAC fields (D) spi_cemask = $4000 spi_dopin = 12 spi_dipin = 33 spi_clkpin = 13 spi_dt = 20 endfields(D) -- display fields(G) spi_dopin = 12 spi_dipin = 33 spi_clkpin = 11 spi_cemask = $2000 spi_dt= 200 endfields(G) -- grey, vio, green, blue fields(C) spi_cepin = 20 spi_clkpin = 21 spi_dopin = 22 spi_dipin = 23 spi_cemask = $100000 --holdpin = 19 spi_dt= 250 endfields(C) --METHODS -- init -- closeT -- enable -- enablechip -- disable -- exch -- rec -- rec12 -- send -- send12 --------------------------------------------- function spi.init -spd begin ( spi_cemask )setdir ( spi_dipin )setin ( spi_dopin )setout ( spi_clkpin )setout return load from (std.mpo) *setdir *setin *setout *outpins ---------------------------------------------- -- closing down the "T-bus" ---------------------------------------------- function spi.closeT begin $FF C &accu,dira< return ------------------------------------ --function spi.reset --begin -- ( spi_dopin )set0 -- ( spi_clkpin )set0 -- return --load from (std.mpo) --*set0 ---------------------------------- -- )spi.enable ---------------------------------- function spi.enable -ena begin ( spi_cemask C , spi_cemask , )outpins return load from (std.mpo) *outpins ---------------------------------- -- ( chipnr )spi.enablechip ---------------------------------- function spi.enablechip -enac k begin ->k ( 1 <data ------------------------------------- function spi.exch -spexch y u n dtfin = 800 begin ->y 0,u< 8,n< :loop ( spi_dipin )inpin |u <<1 ->u if( y &128 #0){ ( spi_dopin )set1 } else { ( spi_dopin )set0 } <<1,y< spi_dt wait ( spi_clkpin )set1 spi_dt wait ( spi_clkpin )set0 spi_dt wait NEXT(n):loop dtfin wait ( spi_dopin )set0 u >>1 return load from(std.mpo) *inpin *set0 *set1 ------------------------------ -- )spi.rec ->data ------------------------------ function spi.rec -srw r i begin 0 ->i :loop ( $FF )spi.exch ->r +1,i< if(i >511):exit if(r =$FF):loop :exit r return load from(Spi.mpo;T) *spi.exch ---------------------------------- -- )spi.rec12 ->data ---------------------------------- function spi.rec12 -r12 n x begin 0,x< 12,n< :loop <<1,x< ( spi_dipin )inpin |x ->x ( spi_clkpin )set1 spi_dt wait ( spi_clkpin )set0 NEXT(n):loop x return load from(std.mpo) *inpin *set0 *set1 -------------------------------- -- ( data )spi.send -------------------------------- function spi.send -sps y n dt_fin = 800 begin ->y 8,n< :loop if( y &128 #0){ ( spi_dopin )set1 } else { ( spi_dopin )set0 } <<1,y< spi_dt wait ( spi_clkpin )set1 spi_dt wait ( spi_clkpin )set0 spi_dt wait NEXT(n):loop return load from(std.mpo) *set0 *set1 -------------------------------- -- ( data )spi.send16 -------------------------------- function spi.send16 -sps16 y n msbmask = $8000 begin ->y 16,n< :loop if( y &msbmask #0){ ( spi_dopin )set1 } else { ( spi_dopin )set0 } <<1,y< spi_dt wait ( spi_clkpin )set1 spi_dt wait ( spi_clkpin )set0 spi_dt wait NEXT(n):loop return load from(std.mpo) *set0 *set1