Re: [Flashforth-devel] Assembler Loops
Brought to you by:
oh2aun
From: Mikael N. <mik...@pp...> - 2014-07-11 14:43:46
|
Here is another example for bitbanging 8 bits on a spi interface. It uses the FSR1L(=Tp) and FSR1H(=Tp 1 +) temporary registers which are always free to be used in any assembly word. Note that FSR1H is only 4 bits wide. FSR1L is 8 bits wide. Srw and Sminus words are accessing the parameter stack directly. There are also other registers that can be used as variables in assembler words. FSR2L FSR2H TBLPTRL TBLPTRH TABLAT PRODL PRODH These registers are located in access ram so no bank bits need to be set. : spi! ( c -- ) [ #2 movlw, ] [ Tp a, movwf, ] [ begin, ] [ #8 movlw, ] [ Tp 1+ a, movwf, ] [ begin, ] [ Srw f, a, rlcf, ] [ cc, if, lata sdata a, bsf, else, lata sdata a, bcf, then, ] [ lata sclk a, btg, ] [ lata sclk a, btg, ] [ Tp 1+ f, a, decf, ] [ z, until, ] [ Sminus w, a, movf, ] [ Tp f, a, decf, ] [ z, until, ] ; Mike |