void mrf24j40_long_addr_write(uns16 addr, uns8 data){ #ifndef __PIC32MX__ clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin); addr = addr & 0b0000001111111111; // <9:0> bits addr = addr << 5; set_bit(addr, 15); // long addresss set_bit(addr, 4); // set for write spi_hw_transmit(addr >> 8 ); spi_hw_transmit(addr & 0x00ff); spi_hw_transmit(data); set_pin(mrf24j40_cs_port, mrf24j40_cs_pin); #endif #ifdef __PIC32MX__ ZIGCS=0; addr=((addr<<1)&0x7FF)|0x801; addr<<=4; SPI_write(addr>>8); SPI_write(addr); SPI_write(data); ZIGCS=1; #endif }
uns8 mrf24j40_long_addr_read(uns16 addr){ uns8 result; #ifndef __PIC32MX__ clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin); addr = addr & 0b0000001111111111; // <9:0> bits addr = addr << 5; set_bit(addr, 15); // long addresss spi_hw_transmit(addr >> 8); spi_hw_transmit(addr & 0x00ff); result = spi_hw_receive(); set_pin(mrf24j40_cs_port, mrf24j40_cs_pin); #endif #ifdef __PIC32MX__ ZIGCS=0; addr=((addr<<1)&0x7FE)|0x800; addr<<=4; SPI_write(addr>>8); SPI_write(addr); result=SPI_read(); ZIGCS=1; #endif return result; }
void mrf24j40_short_addr_write(uns8 addr, uns8 data) { #ifndef __PIC32MX__ clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin); addr = addr & 0b00111111; // <5:0> bits addr = addr << 1; // LSB = 0, means read set_bit(addr, 0); // write spi_hw_transmit(addr); spi_hw_transmit(data); set_pin(mrf24j40_cs_port, mrf24j40_cs_pin); #endif #ifdef __PIC32MX__ addr=((addr<<1)&0x7F)|1; ZIGCS=0; SPI_write(addr); SPI_write(data); ZIGCS=1; #endif }
uns8 mrf24j40_short_addr_read(uns8 addr) { #ifndef __PIC32MX__ clear_pin(mrf24j40_cs_port, mrf24j40_cs_pin); addr = addr & 0b00111111; // <5:0> bits addr = addr << 1; // LSB = 0, means read spi_hw_transmit(addr); uns8 result = spi_hw_receive(); set_pin(mrf24j40_cs_port, mrf24j40_cs_pin); #endif #ifdef __PIC32MX__ addr = (addr << 1) & 0x7E; ZIGCS=0; // CS must be held low while communicationg with MRF24J40 SPI_write(addr); u8 result = SPI_read(); ZIGCS=1; // end of communication #endif return result; }