SPI.asm


1
; #############################################################################
2
;Sende Byte zu RFM Routine daten in lsb/msb
3
; #############################################################################
4
rfm_send:
5
6
7
8
rcall  rfm12_off
9
10
rcall   wait_1ms
11
12
rcall rfm12_tx_on
13
14
15
ldi     lsb,0xAA
16
rcall   rfm12_txbyte
17
ldi     lsb,0xAA
18
rcall   rfm12_txbyte
19
ldi     lsb,0xAA
20
rcall   rfm12_txbyte
21
22
23
ldi     lsb,0xD4
24
rcall   rfm12_txbyte
25
26
ldi     lsb,'x'
27
rcall   rfm12_txbyte
28
29
30
31
rcall rfm12_off
32
33
rcall   wait_1ms
34
rcall   wait_1ms
35
36
37
38
ret
39
40
rfm12_txbyte:
41
42
ldi     msb,0xB8
43
rcall   rfm_trans_ready
44
pop     lsb
45
46
cpi     lsb,0x00
47
breq    rfm_txbyte_2
48
cpi     lsb,0xFF
49
breq    rfm_txbyte_2
50
ret
51
52
rfm_txbyte_2:
53
ldi     msb,0xB8
54
push    lsb
55
ldi     lsb,0xAA
56
rcall   rfm_trans_ready
57
pop     lsb
58
59
ret
60
61
; Senden und Empfangen auschalten
62
63
rfm12_off:
64
65
ldi   msb,0x82      ;alles aus
66
ldi   lsb,0x00
67
68
rcall  rf12_trans
69
ret
70
71
;Senden einschalten
72
rfm12_tx_on:
73
74
75
 ldi   msb,0x82      ;TX on
76
 ldi   lsb,0x28
77
 rcall  rf12_trans
78
 
79
ret
80
81
;Empfang einschalten
82
rfm12_rx_on:
83
84
ldi   msb,0x82      ;on RX, quart an
85
ldi   lsb,0xC8
86
rcall  rf12_trans
87
88
ldi   msb,0xCA      ;8 Bytes FIFO Fill,Sync 1 Byte, FIFO leeren und sperrren,reset aktiv
89
ldi   lsb,0x88
90
rcall  rf12_trans
91
92
93
ldi   msb,0xCA      ;8 Bytes FIFO Fill, Sync 1 Byte, Fifo Freigeben, reset aktiv
94
ldi   lsb,0x8A
95
rcall  rf12_trans
96
97
ret
98
99
 
100
101
; #############################################################################
102
;Sende Byte zu RFM
103
; #############################################################################
104
105
rfm_trans_ready:
106
cbi     SPI_PORT,SS
107
nop
108
nop
109
nop
110
nop
111
nop
112
nop
113
nop
114
115
116
117
rfm_trans_wait:
118
sbis    SPI_PIN,SDO
119
rjmp    rfm_trans_wait
120
121
122
123
rf12_trans:
124
    cbi    SPI_PORT, SS    ;CS auf 0(aktiv)
125
  nop
126
  nop
127
  nop
128
  nop
129
  nop
130
  nop
131
  nop
132
  nop
133
  nop
134
    ldi    ar_1, 16
135
rf12_trans_loop:
136
    lsl    lsb              ;Ins derzeitige LSB 0 schreiben und schieben
137
    rol    msb              ;Weiterschieben und MSB ins Carry
138
    cbi    SPI_PORT, SDI    ;SDI auf 0
139
    brcc   rf12_trans_0    ;Wenn Carry eh gecleart is, so lassen
140
    sbi    SPI_PORT, SDI    ;Andernfalls SDI auf 1
141
rf12_trans_0:
142
143
    sbic   SPI_PIN,SDO
144
    ori    lsb,1
145
146
    sbi    SPI_PORT, SCK    ;Clock-Impuls erzeugen
147
    nop
148
    nop
149
    nop
150
    nop
151
         ;A bisserl Zeit lassen
152
    cbi    SPI_PORT, SCK
153
    dec    ar_1              ;Bit Zähler runterzählen
154
    brne   rf12_trans_loop ;Wenn nicht abgelaufen, wiederholen
155
    sbi    SPI_PORT, SS    ;CS auf 1(inaktiv)
156
    cbi    SPI_PORT, SDI    ;SDI auf 0
157
158
ret
159
160
; #############################################################################
161
;RFM_INIT
162
; #############################################################################
163
164
165
rfm_init:
166
167
168
ldi    ar_1,200
169
rfm_init_wait_200ms:
170
rcall  wait_1ms
171
dec    ar_1
172
cpi    ar_1,0
173
brne  rfm_init_wait_200ms
174
175
176
177
ldi     msb,0x80
178
ldi     lsb,0xD8 ; TX-FIOFO. enable, RX-FIFO enable, C = 12,5pF ,433MHZ
179
180
rcall rf12_trans
181
182
ldi     msb,0x82 ;disable; TX/RX, enable Quarz,disable brownownout, disable wakeup, enable clock output
183
ldi     lsb,0x08
184
185
rcall rf12_trans
186
187
188
ldi     msb,0xA4
189
ldi     lsb,0xB0 ;1200 aka 433MHZ
190
191
rcall rf12_trans
192
193
194
ldi     msb,0x90   ; 
195
ldi     lsb,0x88   ; INT ein, VDI fast, Bandbreite 200kHz, LNA -6db, RSSI -103db 
196
197
rcall rf12_trans
198
199
ldi     msb,0xCE ; Synchronization Pattern
200
ldi     lsb,0xD4 ; Syncwort D4
201
202
rcall rf12_trans
203
204
ret