CoreForth-0

drivers/nrf24.ft.md


$00 constant RF:CONFIG
$01 constant RF:EN_AA
$02 constant RF:EN_RXADDR
$03 constant RF:SETUP_AW
$04 constant RF:SETUP_RETR
$05 constant RF:RF_CH
$06 constant RF:RF_SETUP
$07 constant RF:STATUS
$08 constant RF:OBSERVE_TX
$09 constant RF:RPD
$0A constant RF:RX_ADDR_P0
$0B constant RF:RX_ADDR_P1
$0C constant RF:RX_ADDR_P2
$0D constant RF:RX_ADDR_P3
$0E constant RF:RX_ADDR_P4
$0F constant RF:RX_ADDR_P5
$10 constant RF:TX_ADDR
$11 constant RF:RX_PW_P0
$12 constant RF:RX_PW_P1
$13 constant RF:RX_PW_P2
$14 constant RF:RX_PW_P3
$15 constant RF:RX_PW_P4
$16 constant RF:RX_PW_P5
$17 constant RF:FIFO_STATUS
$1C constant RF:DYNPD

: rf! ( b reg -- ) $20 or +spi >spi >spi -spi ;
: rf@ ( reg -- b ) +spi >spi spi> -spi ;

: rf!!          ( addr n reg -- )
                +spi >spi
                begin swap dup c@ >spi 1+ swap 1- dup 0= until
                drop -spi ;

: rf-init       ;
: -rf-pwr       %00001000 RF:CONFIG rf! -rf-ce ;
: rf-ch!        ( ch -- )     RF:RF_CH rf! ;
: rf-rx-addr!   ( addr n -- ) RF:RX_ADDR_P1 $20 or rf!! ;
: rf-tx-addr!   ( addr n -- ) RF:TX_ADDR $20 or rf!! ;

: rf-tx-mode    -rf-ce %00001010 RF:CONFIG rf! ;
: rf-rx-mode    %00001011 RF:CONFIG rf! +rf-ce ;

: rf-tx         ( addr n -- ) 2drop ;
: rf-rx         ( addr n -- ) 2drop ;