Guest User

Untitled

a guest
May 16th, 2012
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.48 KB | None | 0 0
  1.  
  2. #include <MRF24J40MA.h>
  3. #include <util/delay.h>
  4.  
  5. #include <gdm1602.h>
  6.  
  7.  
  8. void mrf24j40ma_init(void)
  9. {
  10.   /* SPI directions */
  11.   mrf24j40ma_unselect();
  12.   MRF24J40MA_SCK_DDR |= 1<<MRF24J40MA_SCK_PIN;
  13.   MRF24J40MA_MOSI_DDR |= 1<<MRF24J40MA_MOSI_PIN;
  14.  
  15.   /* SPI configuration: master mode 0,0; fosc/128 clock. */
  16.   SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
  17.  
  18.   /* "It is recommended to delay 2 ms after a Reset before accessing the MRF24J40" */
  19.   _delay_ms(2);
  20. }
  21.  
  22. void mrf24j40ma_select(void)
  23. {
  24.   /* set as output / low */
  25.   MRF24J40MA_CS_PORT &= ~(1<<MRF24J40MA_CS_PIN);
  26.   MRF24J40MA_CS_DDR |= 1<<MRF24J40MA_CS_PIN;
  27. }
  28.  
  29. void mrf24j40ma_unselect(void)
  30. {
  31.   /* set as input / high */
  32.   MRF24J40MA_CS_DDR &= ~(1<<MRF24J40MA_CS_PIN);
  33.   MRF24J40MA_CS_PORT |= 1<<MRF24J40MA_CS_PIN;
  34. }
  35.  
  36. uint8_t _mrf24j40ma_spi(uint8_t data)
  37. {
  38.   gdm1602_printat(0, 2, "1");
  39.   /* write data */
  40.   SPDR = data;
  41.  
  42.   gdm1602_printat(1, 2, "2");
  43.  
  44.   /* wait for send */
  45.   while(!(SPSR & (1<<SPIF)));
  46.  
  47.   gdm1602_printat(2, 2, "3");
  48.  
  49.   return SPDR;
  50. }
  51.  
  52. uint8_t mrf24j40ma_short_address_read(uint8_t addr)
  53. {
  54.   uint8_t rval;
  55.   gdm1602_printat(0, 1, "a");
  56.   mrf24j40ma_select();
  57.   gdm1602_printat(1, 1, "b");
  58.   addr <<= 1; // address at 1:6, also LSB low
  59.   gdm1602_printat(2, 1, "c");
  60.   addr &= ~(1<<7); // MSB low
  61.   gdm1602_printat(3, 1, "d");
  62.   _mrf24j40ma_spi(addr);
  63.   rval = _mrf24j40ma_spi(0);
  64.   gdm1602_printat(4, 1, "e");
  65.   mrf24j40ma_unselect();
  66.   gdm1602_printat(5, 1, "f");
  67.   return rval;
  68. }
  69.  
  70. void mrf24j40ma_short_address_write(uint8_t addr, uint8_t data)
  71. {
  72.   mrf24j40ma_select();
  73.   addr <<= 1; // address at 1:6
  74.   addr &= ~(1<<7); // MSB low
  75.   addr &= ~1; // LSB high
  76.   _mrf24j40ma_spi(addr);
  77.   _mrf24j40ma_spi(data);
  78.   mrf24j40ma_unselect();
  79. }
  80.  
  81. uint8_t mrf24j40ma_long_address_read(uint16_t addr)
  82. {
  83.   uint8_t addr8, rval;
  84.   mrf24j40ma_select();
  85.   addr8 = addr >> 3; // high part at 3:9
  86.   addr8 |= 1 << 7; // MSB high
  87.   _mrf24j40ma_spi(addr8);
  88.   addr8 = addr << 5; // low part at 0:2, top of byte 2
  89.   _mrf24j40ma_spi(addr8);
  90.   rval = _mrf24j40ma_spi(0);
  91.   mrf24j40ma_unselect();
  92.   return rval;
  93. }
  94.  
  95. void mrf24j40ma_long_address_write(uint16_t addr, uint8_t data)
  96. {
  97.   uint8_t addr8;
  98.   mrf24j40ma_select();
  99.   addr8 = addr >> 3; // high part at 3:9
  100.   addr8 |= 1<<7; // MSB high
  101.   _mrf24j40ma_spi(addr8);
  102.   addr8 = addr << 5; // low part at 0:2, top of byte 2
  103.   addr8 |= 1 << 4; // byte 5 high
  104.   _mrf24j40ma_spi(addr8);
  105.   _mrf24j40ma_spi(data);
  106.   mrf24j40ma_unselect();
  107. }
Advertisement
Add Comment
Please, Sign In to add comment