Re: [Flashforth-devel] Assembler Loops
Brought to you by:
oh2aun
From: Mikael N. <mik...@pp...> - 2014-07-11 14:47:07
|
Here is example for bitbanging 16 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 indirectly. There are also other registers that can safely be used as variables in assembler words. FSR2L FSR2H TBLPTRL TBLPTRH TABLAT PRODL PRODH The registers are located in access ram so no bank bits need to be set. : spi! ( u -- ) [ #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 |