Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <MRF24J40MA.h>
- #include <util/delay.h>
- #include <gdm1602.h>
- void mrf24j40ma_init(void)
- {
- /* SPI directions */
- mrf24j40ma_unselect();
- MRF24J40MA_SCK_DDR |= 1<<MRF24J40MA_SCK_PIN;
- MRF24J40MA_MOSI_DDR |= 1<<MRF24J40MA_MOSI_PIN;
- /* SPI configuration: master mode 0,0; fosc/128 clock. */
- SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
- /* "It is recommended to delay 2 ms after a Reset before accessing the MRF24J40" */
- _delay_ms(2);
- }
- void mrf24j40ma_select(void)
- {
- /* set as output / low */
- MRF24J40MA_CS_PORT &= ~(1<<MRF24J40MA_CS_PIN);
- MRF24J40MA_CS_DDR |= 1<<MRF24J40MA_CS_PIN;
- }
- void mrf24j40ma_unselect(void)
- {
- /* set as input / high */
- MRF24J40MA_CS_DDR &= ~(1<<MRF24J40MA_CS_PIN);
- MRF24J40MA_CS_PORT |= 1<<MRF24J40MA_CS_PIN;
- }
- uint8_t _mrf24j40ma_spi(uint8_t data)
- {
- gdm1602_printat(0, 2, "1");
- /* write data */
- SPDR = data;
- gdm1602_printat(1, 2, "2");
- /* wait for send */
- while(!(SPSR & (1<<SPIF)));
- gdm1602_printat(2, 2, "3");
- return SPDR;
- }
- uint8_t mrf24j40ma_short_address_read(uint8_t addr)
- {
- uint8_t rval;
- gdm1602_printat(0, 1, "a");
- mrf24j40ma_select();
- gdm1602_printat(1, 1, "b");
- addr <<= 1; // address at 1:6, also LSB low
- gdm1602_printat(2, 1, "c");
- addr &= ~(1<<7); // MSB low
- gdm1602_printat(3, 1, "d");
- _mrf24j40ma_spi(addr);
- rval = _mrf24j40ma_spi(0);
- gdm1602_printat(4, 1, "e");
- mrf24j40ma_unselect();
- gdm1602_printat(5, 1, "f");
- return rval;
- }
- void mrf24j40ma_short_address_write(uint8_t addr, uint8_t data)
- {
- mrf24j40ma_select();
- addr <<= 1; // address at 1:6
- addr &= ~(1<<7); // MSB low
- addr &= ~1; // LSB high
- _mrf24j40ma_spi(addr);
- _mrf24j40ma_spi(data);
- mrf24j40ma_unselect();
- }
- uint8_t mrf24j40ma_long_address_read(uint16_t addr)
- {
- uint8_t addr8, rval;
- mrf24j40ma_select();
- addr8 = addr >> 3; // high part at 3:9
- addr8 |= 1 << 7; // MSB high
- _mrf24j40ma_spi(addr8);
- addr8 = addr << 5; // low part at 0:2, top of byte 2
- _mrf24j40ma_spi(addr8);
- rval = _mrf24j40ma_spi(0);
- mrf24j40ma_unselect();
- return rval;
- }
- void mrf24j40ma_long_address_write(uint16_t addr, uint8_t data)
- {
- uint8_t addr8;
- mrf24j40ma_select();
- addr8 = addr >> 3; // high part at 3:9
- addr8 |= 1<<7; // MSB high
- _mrf24j40ma_spi(addr8);
- addr8 = addr << 5; // low part at 0:2, top of byte 2
- addr8 |= 1 << 4; // byte 5 high
- _mrf24j40ma_spi(addr8);
- _mrf24j40ma_spi(data);
- mrf24j40ma_unselect();
- }
Advertisement
Add Comment
Please, Sign In to add comment