aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/n-spi.asm
blob: 45f6cdcad28dc750e7bb4a34090872b68f04c009 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
; ( addr len -- ) 
; MCU
; read len bytes from SPI to addr
VE_N_SPIR:
    .dw $ff05
    .db "n@spi",0
    .dw VE_HEAD
    .set VE_HEAD  = VE_N_SPIR
XT_N_SPIR:
    .dw PFA_N_SPIR
PFA_N_SPIR:
    movw temp0, tosl
    loadtos
    movw zl, tosl
    movw tosl, temp0
PFA_N_SPIR_LOOP:
    out_ SPDR, zerol
PFA_N_SPIR_LOOP1:
    in_ temp2, SPSR
    sbrs temp2, SPIF
    rjmp PFA_N_SPIR_LOOP1
    in_ temp2, SPDR
    st Z+, temp2
    sbiw tosl, 1
    brne PFA_N_SPIR_LOOP
    loadtos
    jmp_ DO_NEXT

; ( addr len -- ) 
; MCU
; write len bytes to SPI from addr
VE_N_SPIW:
    .dw $ff05
    .db "n!spi",0
    .dw VE_HEAD
    .set VE_HEAD  = VE_N_SPIW
XT_N_SPIW:
    .dw PFA_N_SPIW
PFA_N_SPIW:
    movw temp0, tosl
    loadtos
    movw zl, tosl
    movw tosl, temp0
PFA_N_SPIW_LOOP:
    ld temp2, Z+
    out_ SPDR, temp2
PFA_N_SPIW_LOOP1:
    in_ temp2, SPSR
    sbrs temp2, SPIF
    rjmp PFA_N_SPIW_LOOP1
    in_ temp2, SPDR ; ignore the data
    sbiw tosl, 1
    brne PFA_N_SPIW_LOOP
    loadtos
    jmp_ DO_NEXT