00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "mrf24j40.h"
00039 #include "pic_utils.h"
00040 #include "spi_hw.h"
00041 #include "pic_serial.h"
00042
00043
00044
00045 uns8 data_sequence_number;
00046 uns16 pan_id = 0xffff;
00047 uns8 extended_address[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
00048 uns16 short_address = 0xffff;
00049 uns8 current_channel = 0;
00050
00051
00052 void mrf24j40_flush_receive_buffer() {
00053
00054 uns8 rxflush;
00055
00056 rxflush = mrf24j40_short_addr_read(RXFLUSH);
00057 set_bit(rxflush, RXFLUSH_RXFLUSH);
00058 mrf24j40_short_addr_write(RXFLUSH, rxflush);
00059 }
00060
00061
00062
00063 void mrf24j40_set_channel(uns8 channel) {
00064
00065 current_channel = channel;
00066 channel = channel - 11;
00067 channel = 0x02 + 0x10 * channel;
00068
00069 mrf24j40_long_addr_write(RFCON0, channel);
00070 mrf24j40_short_addr_write(RFCTL, 0x04);
00071 mrf24j40_short_addr_write(RFCTL, 0x00);
00072
00073 delay_us(200);
00074 }
00075
00076
00077 uns8 mrf24j40_scan_for_lowest_channel_ed() {
00078
00079 uns8 rssi;
00080 uns8 channel;
00081 uns16 scan_count;
00082 uns8 highest_on_channel;
00083 uns8 lowest_channel = MRF_LAST_CHANNEL;
00084 uns8 lowest_ed = 0xff;
00085 uns8 bbreg6;
00086
00087
00088
00089 #if defined(ENABLE_PA_LNA)
00090 mrf24j40_long_addr_write(TESTMODE, 0x08);
00091 mrf24j40_short_addr_write(TRISGPIO, 0x0F);
00092 mrf24j40_short_addr_write(GPIO, 0x0C);
00093 #endif
00094
00095
00096 for (channel = MRF_FIRST_CHANNEL; channel <= MRF_LAST_CHANNEL; channel++) {
00097
00098
00099 mrf24j40_set_channel(channel);
00100
00101 highest_on_channel = 0;
00102 for (scan_count = 0; scan_count < 1000; scan_count++) {
00103 mrf24j40_short_addr_write(BBREG6, 1 << BBREG6_RSSIMODE1);
00104 do {
00105 bbreg6 = mrf24j40_short_addr_read(BBREG6);
00106 } while (!test_bit(bbreg6, BBREG6_RSSIRDY));
00107 rssi = mrf24j40_long_addr_read(RSSI);
00108 if (rssi > highest_on_channel) {
00109 highest_on_channel = rssi;
00110 }
00111 }
00112
00113 if (highest_on_channel < lowest_ed) {
00114 lowest_ed = highest_on_channel;
00115 lowest_channel = channel;
00116 }
00117 }
00118 mrf24j40_short_addr_write(BBREG6, 1 << BBREG6_RSSIMODE2);
00119
00120
00121
00122
00123 #if defined(ENABLE_PA_LNA)
00124 mrf24j40_short_addr_write(GPIO, 0);
00125 mrf24j40_short_addr_write(TRISGPIO, 0x00);
00126 mrf24j40_long_addr_write(TESTMODE, 0x0F);
00127 #endif
00128
00129
00130 return lowest_channel;
00131 }
00132
00133
00134 void mrf24j40_active_channel_scan() {
00135
00136 uns8 rxflush;
00137 uns16 prev_pan_id;
00138 uns8 channel;
00139 uns8 highest_on_channel;
00140 uns16 scan_count;
00141 uns8 bbreg6;
00142 uns8 rssi;
00143
00144
00145
00146 rxflush = mrf24j40_short_addr_read(RXFLUSH);
00147 set_bit(rxflush, RXFLUSH_BCNONLY);
00148 mrf24j40_short_addr_write(RXFLUSH, rxflush);
00149
00150
00151
00152
00153
00154
00155 prev_pan_id = pan_id;
00156
00157
00158 mrf24j40_set_pan_id(0xffff);
00159
00160 for (channel = MRF_FIRST_CHANNEL; channel <= MRF_LAST_CHANNEL; channel++) {
00161 serial_print_str("Searching on channel: ");
00162 serial_print_int(channel);
00163 serial_print_nl();
00164
00165
00166 mrf24j40_set_channel(channel);
00167
00168
00169 uns8 fc_msb = 0b11001100;
00170
00171 uns8 fc_lsb = 0b00000001;
00172
00173 data_sequence_number++;
00174 uns8 bytes_to_transmit = 5;
00175 uns8 header_length = 3+8+8+2+2;
00176 uns8 frame_length = header_length + bytes_to_transmit;
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187 mrf24j40_long_addr_write(0x00, header_length);
00188 mrf24j40_long_addr_write(0x01, frame_length);
00189 mrf24j40_long_addr_write(0x02, fc_lsb);
00190 mrf24j40_long_addr_write(0x03, fc_msb);
00191 mrf24j40_long_addr_write(0x04, data_sequence_number);
00192
00193 mrf24j40_long_addr_write(0x05, 0x05);
00194 mrf24j40_long_addr_write(0x06, 0x00);
00195
00196
00197
00198
00199
00200
00201 highest_on_channel = 0;
00202 for (scan_count = 0; scan_count < 1000; scan_count++) {
00203 mrf24j40_short_addr_write(BBREG6, 1 << BBREG6_RSSIMODE1);
00204 do {
00205 bbreg6 = mrf24j40_short_addr_read(BBREG6);
00206 } while (!test_bit(bbreg6, BBREG6_RSSIRDY));
00207 rssi = mrf24j40_long_addr_read(RSSI);
00208 if (rssi > highest_on_channel) {
00209 highest_on_channel = rssi;
00210 }
00211 }
00212 serial_print_str("Highest on channel = ");
00213 serial_print_int(highest_on_channel);
00214 serial_print_nl();
00215
00216
00217
00218 }
00219
00220
00221
00222 serial_print_str("/-----\n");
00223
00224 }
00225
00226 void mrf24j40_orphan_channel_scan() {
00227 }
00228
00229 void mrf24j40_start_pan() {
00230
00231 }
00232
00233 void mrf24j40_realign_pan() {
00234 }
00235
00236 void mrf24j40_associate_to_pan() {
00237
00238
00239
00240 }
00241
00242 void mrf24h40_pan_association_requested() {
00243
00244
00245
00246
00247
00248 }
00249
00250
00251
00252 void mrf24j40_set_pan_id(uns16 _pan_id) {
00253 pan_id = _pan_id;
00254 mrf24j40_short_addr_write(PANIDL, pan_id & 0xff);
00255 mrf24j40_short_addr_write(PANIDH, pan_id >> 8);
00256
00257 }
00258
00259 void mrf24j40_set_extended_address(uns8 *_extended_address) {
00260 uns8 count;
00261 uns8 mem_pos = EADR7;
00262 serial_print_str("Setting EA to: ");
00263 for (count = 0; count < 8; count++) {
00264 extended_address[count] = _extended_address[count];
00265 mrf24j40_short_addr_write(mem_pos--, extended_address[count]);
00266 serial_print_int_hex(extended_address[count]);
00267 serial_putc(' ');
00268
00269 }
00270 serial_print_nl();
00271 }
00272
00273 void mrf24j40_set_short_address(uns16 _short_address) {
00274
00275
00276 short_address = _short_address;
00277
00278
00279 mrf24j40_short_addr_write(SADRL, short_address & 0xff);
00280 mrf24j40_short_addr_write(SADRH, short_address >> 8);
00281
00282 }
00283
00284
00285
00286
00287 void mrf24j40_handle_isr() {
00288
00289 uns8 intstat;
00290
00291
00292 intstat = mrf24j40_short_addr_read(INTSTAT);
00293
00294
00295 if (test_bit(intstat, INTSTAT_RXIF)) {
00296 serial_print_str("R");
00297
00298 mrf24j40_receive_callback();
00299 }
00300 if (test_bit(intstat, INTSTAT_TXNIF)) {
00301 serial_print_str("Tx complete txstat=0x");
00302 uns8 stat = mrf24j40_short_addr_read(TXSTAT);
00303 mrf24j40_transmit_callback(stat & 0b00000001,
00304 stat >> 6,
00305 test_bit(stat, TXSTAT_CCAFAIL));
00306 serial_print_int_hex(stat);
00307 serial_print_nl();
00308 }
00309
00310 }
00311
00312 uns8 mrf24j40_receive(uns8 *data, uns8 bytes_to_receive) {
00313
00314 uns8 frame_length;
00315 uns16 frame_pos;
00316 uns8 buffer_count;
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326 serial_putc('a');
00327
00328 mrf24j40_short_addr_write(BBREG1, 1 << BBREG1_RXDECINV);
00329 serial_putc('b');
00330
00331 frame_pos = 0x300;
00332 frame_length = mrf24j40_long_addr_read(frame_pos++);
00333 buffer_count = 0;
00334 serial_putc('c');
00335
00336 while ((buffer_count <= bytes_to_receive) && (buffer_count <= frame_length + 2)) {
00337
00338 data[buffer_count++] = mrf24j40_long_addr_read(frame_pos++);
00339 }
00340 serial_putc('d');
00341
00342
00343 mrf24j40_short_addr_write(BBREG1, 0);
00344 serial_putc('e');
00345
00346 return buffer_count - 1;
00347
00348 }
00349
00350 void mrf24j40_transmit_to_extended_address(uns8 frame_type, uns16 dest_pan_id, uns8 *dest_extended_address,
00351 uns8 *data, uns8 data_length, uns8 ack) {
00352
00353
00354 uns8 fc_msb = 0b11001100;
00355 uns8 fc_lsb = 0b00000000 | frame_type;
00356
00357 if (ack) {
00358 set_bit(fc_lsb, 5);
00359 }
00360
00361 data_sequence_number++;
00362
00363 uns8 header_length = 3+8+8+2+2;
00364 uns8 frame_length = header_length + data_length;
00365
00366
00367
00368 mrf24j40_long_addr_write(0x00, header_length);
00369 mrf24j40_long_addr_write(0x01, frame_length);
00370
00371 mrf24j40_long_addr_write(0x02, fc_lsb);
00372 mrf24j40_long_addr_write(0x03, fc_msb);
00373 mrf24j40_long_addr_write(0x04, data_sequence_number);
00374
00375 mrf24j40_long_addr_write(0x05, dest_pan_id & 0xff);
00376 mrf24j40_long_addr_write(0x06, dest_pan_id >> 8);
00377
00378 mrf24j40_long_addr_write(0x07, dest_extended_address[7]);
00379 mrf24j40_long_addr_write(0x08, dest_extended_address[6]);
00380 mrf24j40_long_addr_write(0x09, dest_extended_address[5]);
00381 mrf24j40_long_addr_write(0x0a, dest_extended_address[4]);
00382 mrf24j40_long_addr_write(0x0b, dest_extended_address[3]);
00383 mrf24j40_long_addr_write(0x0c, dest_extended_address[2]);
00384 mrf24j40_long_addr_write(0x0d, dest_extended_address[1]);
00385 mrf24j40_long_addr_write(0x0e, dest_extended_address[0]);
00386
00387 mrf24j40_long_addr_write(0x0f, pan_id & 0xff);
00388 mrf24j40_long_addr_write(0x10, pan_id >> 8);
00389
00390
00391 mrf24j40_long_addr_write(0x11, extended_address[7]);
00392 mrf24j40_long_addr_write(0x12, extended_address[6]);
00393 mrf24j40_long_addr_write(0x13, extended_address[5]);
00394 mrf24j40_long_addr_write(0x14, extended_address[4]);
00395 mrf24j40_long_addr_write(0x15, extended_address[3]);
00396 mrf24j40_long_addr_write(0x16, extended_address[2]);
00397 mrf24j40_long_addr_write(0x17, extended_address[1]);
00398 mrf24j40_long_addr_write(0x18, extended_address[0]);
00399
00400 for (uns8 count=0; count < data_length; count++) {
00401 mrf24j40_long_addr_write(count+header_length+2, data[count]);
00402 }
00403
00404 uns8 txncon = mrf24j40_short_addr_read(TXNCON);
00405
00406 set_bit(txncon, TXNCON_TXNTRIG);
00407 if (ack) {
00408 set_bit(txncon, TXNCON_TXNACKREQ);
00409 }
00410 mrf24j40_short_addr_write(TXNCON, txncon);
00411
00412
00413 }
00414
00415
00416 void mrf24j40_transmit_to_short_address(uns8 frame_type, uns16 dest_pan_id, uns16 dest_short_address, uns8 *data, uns8 bytes_to_transmit, uns8 ack) {
00417
00418 uns8 fc_msb = 0b10001000;
00419 uns8 fc_lsb = 0b00000000 | frame_type;
00420
00421
00422
00423
00424
00425 if (ack) {
00426 set_bit(fc_lsb, 5);
00427 }
00428
00429 data_sequence_number++;
00430
00431 uns8 header_length = 3+2+2+2+2;
00432 uns8 frame_length = header_length + bytes_to_transmit;
00433
00434 mrf24j40_long_addr_write(0x00, header_length);
00435 mrf24j40_long_addr_write(0x01, frame_length);
00436
00437 mrf24j40_long_addr_write(0x02, fc_lsb);
00438 mrf24j40_long_addr_write(0x03, fc_msb);
00439 mrf24j40_long_addr_write(0x04, data_sequence_number);
00440
00441 mrf24j40_long_addr_write(0x05, dest_pan_id & 0xff);
00442 mrf24j40_long_addr_write(0x06, dest_pan_id >> 8);
00443
00444 mrf24j40_long_addr_write(0x07, dest_short_address & 0xff);
00445 mrf24j40_long_addr_write(0x08, dest_short_address >> 8);
00446
00447 mrf24j40_long_addr_write(0x09, pan_id & 0xff);
00448 mrf24j40_long_addr_write(0x0a, pan_id >> 8);
00449
00450
00451 mrf24j40_long_addr_write(0x0b, short_address & 0xff);
00452 mrf24j40_long_addr_write(0x0c, short_address >> 8);
00453
00454 for (uns8 count=0; count < bytes_to_transmit; count++) {
00455 mrf24j40_long_addr_write(count+header_length+2, data[count]);
00456 }
00457
00458 uns8 txncon = mrf24j40_short_addr_read(TXNCON);
00459 set_bit(txncon, TXNCON_TXNTRIG);
00460 if (ack) {
00461 set_bit(txncon, TXNCON_TXNACKREQ);
00462 }
00463 mrf24j40_short_addr_write(TXNCON, txncon);
00464
00465
00466 }
00467
00468
00469
00470 void mrf24j40_transmit(uns8 *data, uns8 bytes_to_transmit) {
00471
00472
00473 uns8 fc_lsb = 0b01000001;
00474 uns8 fc_msb = 0b00000000;
00475
00476
00477 data_sequence_number++;
00478 uns8 header_length = 3;
00479 uns8 frame_length = header_length + bytes_to_transmit;
00480
00481 mrf24j40_long_addr_write(0x00, header_length);
00482 mrf24j40_long_addr_write(0x01, frame_length);
00483 mrf24j40_long_addr_write(0x02, fc_lsb);
00484 mrf24j40_long_addr_write(0x03, fc_msb);
00485 mrf24j40_long_addr_write(0x04, data_sequence_number);
00486
00487 for (uns8 count=0; count < bytes_to_transmit; count++) {
00488 mrf24j40_long_addr_write(count+header_length+2, data[count]);
00489 }
00490
00491 uns8 txncon = mrf24j40_short_addr_read(TXNCON);
00492 set_bit(txncon, TXNCON_TXNTRIG);
00493 mrf24j40_short_addr_write(TXNCON, txncon);
00494
00495
00496 }
00497
00498
00499 void mrf24j40_init() {
00500
00501 uns8 check;
00502
00503
00504
00505
00506 mrf24j40_short_addr_write(SOFTRST, 0x07);
00507
00508
00509
00510 do {
00511 check = mrf24j40_short_addr_read(SOFTRST);
00512 } while (check != 0);
00513
00514 #if defined(ENABLE_PA_LNA) && defined(MRF24J40MB)
00515
00516 mrf24j40_long_addr_write(TESTMODE, 0x0f);
00517 #endif
00518
00519
00520 mrf24j40_short_addr_write(PACON2, 0x98);
00521
00522 mrf24j40_short_addr_write(TXSTBL, 0x95);
00523
00524
00525
00526 do {
00527 check = mrf24j40_long_addr_read(RFSTATE);
00528 } while (check & 0xa0 != 0xa0);
00529
00530 mrf24j40_long_addr_write(RFCON0, 0x03);
00531
00532
00533
00534
00535 mrf24j40_long_addr_write(RFCON1, 0x01);
00536
00537 mrf24j40_long_addr_write(RFCON2, 0x80);
00538
00539 mrf24j40_long_addr_write(RFCON6, 0x90);
00540
00541 mrf24j40_long_addr_write(RFCON7, 0x08);
00542
00543 mrf24j40_long_addr_write(RFCON8, 0x10);
00544
00545 mrf24j40_long_addr_write(SLPCON1, 0x21);
00546
00547
00548
00549
00550 mrf24j40_short_addr_write(BBREG2, 0x80);
00551
00552
00553
00554
00555 mrf24j40_short_addr_write(CCAEDTH, 0x60);
00556
00557 mrf24j40_short_addr_write(BBREG6, 1 << BBREG6_RSSIMODE2);
00558
00559 mrf24j40_short_addr_write(MRF_INTCON, (1 << MRF_INTCON_RXIE) & (1 << MRF_INTCON_TXNIE));
00560
00561 mrf24j40_long_addr_write(RFCON0, 11);
00562
00563 #if defined(ENABLE_PA_LNA) && defined(MRF24J40MB)
00564
00565
00566
00567
00568 #if APPLICATION_SITE == EUROPE
00569
00570 mrf24j40_long_addr_write(RFCON3, 0x70);
00571 #else
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582 mrf24j40_long_addr_write(RFCON3, 0x00);
00583 #endif
00584 #else
00585
00586 mrf24j40_long_addr_write(RFCON3,0x00);
00587 #endif
00588
00589
00590 mrf24j40_short_addr_write(RFCTL, 0x04);
00591
00592
00593 mrf24j40_short_addr_write(RFCTL, 0x00);
00594
00595 delay_us(200);
00596
00597
00598
00599
00600
00601 data_sequence_number = 0;
00602
00603 }
00604
00605
00606 void mrf24j40_init_coordinator() {
00607 uns8 val;
00608
00609
00610
00611
00612 mrf24j40_short_addr_write(SOFTRST, 0x07);
00613
00614 mrf24j40_short_addr_write(PACON2, 0x98);
00615
00616 mrf24j40_short_addr_write(TXSTBL, 0x95);
00617
00618 mrf24j40_long_addr_write(RFCON1, 0x01);
00619
00620 mrf24j40_long_addr_write(RFCON2, 0x008);
00621
00622 mrf24j40_long_addr_write(RFCON6, 0x90);
00623
00624 mrf24j40_long_addr_write(RFCON7, 0x08);
00625
00626 mrf24j40_long_addr_write(RFCON8, 0x10);
00627
00628 mrf24j40_long_addr_write(SLPCON1, 0x21);
00629
00630
00631
00632
00633 mrf24j40_short_addr_write(BBREG2, 0x80);
00634
00635
00636
00637 mrf24j40_short_addr_write(CCAEDTH, 0x60);
00638
00639 mrf24j40_short_addr_write(BBREG6, 0x40);
00640
00641 mrf24j40_short_addr_write(MRF_INTCON, (1 << MRF_INTCON_RXIE) & (1 << MRF_INTCON_TXNIE));
00642
00643 mrf24j40_long_addr_write(RFCON0, 11);
00644
00645 mrf24j40_short_addr_write(RFCTL, 0x04);
00646
00647
00648 mrf24j40_short_addr_write(RFCTL, 0x00);
00649
00650 delay_us(200);
00651
00652
00653
00654
00655
00656
00657
00658 val = mrf24j40_short_addr_read(RXMCR);
00659 set_bit(val, RXMCR_PANCOORD);
00660 mrf24j40_short_addr_write(RXMCR, val);
00661
00662
00663
00664 val = mrf24j40_short_addr_read(TXMCR);
00665 set_bit(val, TXMCR_SLOTTED);
00666 mrf24j40_short_addr_write(TXMCR, val);
00667
00668
00669 uns8 header_length = 2+1+10;
00670 uns8 frame_length = header_length + 6;
00671 uns8 superframe_spec_field_l = 0b10001000;
00672 uns8 superframe_spec_field_h = 0b11001000;
00673
00674 mrf24j40_long_addr_write(0x080+0, header_length);
00675 mrf24j40_long_addr_write(0x080+1, frame_length);
00676 mrf24j40_long_addr_write(0x080+2, 0x00);
00677 mrf24j40_long_addr_write(0x080+3, 0x80);
00678 mrf24j40_long_addr_write(0x080+4, data_sequence_number++);
00679 mrf24j40_long_addr_write(0x080+5, 5);
00680 mrf24j40_long_addr_write(0x080+6, 0);
00681 mrf24j40_long_addr_write(0x080+7, extended_address[7]);
00682 mrf24j40_long_addr_write(0x080+8, extended_address[6]);
00683 mrf24j40_long_addr_write(0x080+9, extended_address[5]);
00684 mrf24j40_long_addr_write(0x080+10, extended_address[4]);
00685 mrf24j40_long_addr_write(0x080+11, extended_address[3]);
00686 mrf24j40_long_addr_write(0x080+12, extended_address[2]);
00687 mrf24j40_long_addr_write(0x080+13, extended_address[1]);
00688 mrf24j40_long_addr_write(0x080+14, extended_address[0]);
00689
00690 mrf24j40_long_addr_write(0x080+15, superframe_spec_field_l);
00691 mrf24j40_long_addr_write(0x080+16, superframe_spec_field_h);
00692
00693 mrf24j40_long_addr_write(0x080+17, 0);
00694 mrf24j40_long_addr_write(0x080+18, 0);
00695 mrf24j40_long_addr_write(0x080+19, 0x4d);
00696 mrf24j40_long_addr_write(0x080+20, 0x10);
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721 data_sequence_number = 0;
00722
00723 }
00724
00725 uns8 mrf24j40_short_addr_read(uns8 addr) {
00726
00727 clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00728 addr = addr & 0b00111111;
00729 addr = addr << 1;
00730 spi_hw_transmit(addr);
00731 uns8 result = spi_hw_receive();
00732
00733 set_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00734 return result;
00735 }
00736
00737 void mrf24j40_short_addr_write(uns8 addr, uns8 data) {
00738 clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00739 addr = addr & 0b00111111;
00740 addr = addr << 1;
00741 set_bit(addr, 0);
00742
00743 spi_hw_transmit(addr);
00744 spi_hw_transmit(data);
00745
00746 set_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00747 }
00748
00749 uns8 mrf24j40_long_addr_read(uns16 addr){
00750
00751 uns8 result;
00752
00753 clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00754
00755 addr = addr & 0b0000001111111111;
00756 addr = addr << 5;
00757 set_bit(addr, 15);
00758 spi_hw_transmit(addr >> 8);
00759 spi_hw_transmit(addr & 0x00ff);
00760 result = spi_hw_receive();
00761
00762 set_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00763
00764 return result;
00765 }
00766
00767 void mrf24j40_long_addr_write(uns16 addr, uns8 data){
00768
00769 clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00770
00771 addr = addr & 0b0000001111111111;
00772 addr = addr << 5;
00773
00774 set_bit(addr, 15);
00775 set_bit(addr, 4);
00776
00777 spi_hw_transmit(addr >> 8 );
00778 spi_hw_transmit(addr & 0x00ff);
00779 spi_hw_transmit(data);
00780
00781 set_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00782 }
00783
00784
00785 void mrf24j40_setup_io() {
00786
00787 make_input(mrf24j40_int_port, mrf24j40_int_pin);
00788 set_pin(mrf24j40_cs_port, mrf24j40_cs_pin);
00789 make_output(mrf24j40_cs_port, mrf24j40_cs_pin);
00790
00791 }
00792
00793