CON XTALFREQ = 20_000_000 'PLL stage 0: crystal frequency XDIV = 2 'PLL stage 1: crystal divider XMUL = 8 'PLL stage 2: crystal / div * mul XDIVP = 1 'PLL stage 3: crystal / div * mul / divp (1,2,4..30) XOSC = %10 'OSC ' %00=OFF, %01=OSC, %10=15pF, %11=30pF XSEL = %11 'XI+PLL ' %00=rcfast(20+MHz), %01=rcslow(~20KHz), %10=XI(5ms), %11=XI+PLL(10ms) XPPPP = ((XDIVP>>1) + 15) & $F ' 1->15, 2->0, 4->1, 6->2...30->14 CLOCKFREQ = round(float(XTALFREQ) / float(XDIV) * float(XMUL) / float(XDIVP)) SETFREQ = 1<<24 + (XDIV-1)<<18 + (XMUL-1)<<8 + XPPPP<<4 + XOSC<<2 ENAFREQ = SETFREQ + XSEL ' %0000_000e_dddddd_mmmmmmmmmm_pppp_cc_ss ' enable oscillator DAT 'not Spin code ORGH 0 'loaded to hubram at address 0 ORG 'longword addressing at 0 '******************************************************************************* ' COG Variables (Auto-copied to cogram on COGINIT #%0x_xxxx,#0 after program load) '******************************************************************************* count jmp #_diaginit sec long CLOCKFREQ/4 misc1 pincfg tickstart long %0000_0000_000_10100_00000000_00_00000_0 misc2 pin tickend long 0 '-------------------------------------------------------- '*** Boot-loader can fill all four of the following *** '-------------------------------------------------------- spare1 long 0 'hubRAM addr $010 - compatible reserved for system variable clk_freq long CLOCKFREQ 'hubRAM addr $014 - sysclock frequency, integer frequency in hertz clk_mode long 0 'hubRAM addr $018 - clock mode config word, used directly in HUBSET asyn_baud long 0 'hubRAM addr $01c - comport baud rate, integer baud in hertz '-------------------------------------------------------- _main getrnd count setbyte pincfg, count, #1 dirl pin wrpin pincfg, pin dirh pin waitx sec jmp #_main ORGH ALIGNL '=============================================== _diaginit 'only called once at beginning 'FPGA frequencies ' hubset #$0f 'change to 5 MHz sysclock ' hubset #$1f 'change to 10 MHz sysclock ' hubset #$2f 'change to 15 MHz sysclock ' hubset #$3f 'change to 20 MHz sysclock ' hubset #$4f 'change to 25 MHz sysclock ' hubset #$5f 'change to 30 MHz sysclock ' hubset #$6f 'change to 35 MHz sysclock ' hubset #$7f 'change to 40 MHz sysclock ' hubset #$8f 'change to 45 MHz sysclock ' hubset #$9f 'change to 50 MHz sysclock ' hubset #$af 'change to 55 MHz sysclock ' hubset #$bf 'change to 60 MHz sysclock ' hubset #$cf 'change to 65 MHz sysclock ' hubset #$df 'change to 70 MHz sysclock ' hubset #$ef 'change to 75 MHz sysclock ' hubset #$ff 'change to 80 MHz sysclock 'Silicon frequencies hubset clk_mode 'switch to RCFAST using known prior mode mov clk_mode, ##SETFREQ 'replace old with new ' mov clk_freq, ##CLOCKFREQ 'optional, if clk_freq used hubset clk_mode 'setup for new mode, still RCFAST waitx ##20_000_000/100 '~10ms for crystal/PLL to come up to speed hubset ##ENAFREQ 'engage jmp #_main