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
|
|