// Set register bank void enc28j60_set_bank(uint8_t adr) { uint8_t bank; if( (adr & ENC28J60_ADDR_MASK) < ENC28J60_COMMON_CR ) { bank = (adr >> 5) & 0x03; //BSEL1|BSEL0=0x03 if(bank != enc28j60_current_bank) { enc28j60_write_op(ENC28J60_SPI_BFC, ECON1, 0x03); enc28j60_write_op(ENC28J60_SPI_BFS, ECON1, bank); enc28j60_current_bank = bank; } }
void enc28j60_set_bank(u8 address) { /*if current bank not match, then switch it */ if((address & BANK_MASK) != enc28j60_bank) { enc28j60_write_op(CMD_BIT_FIELD_CLR, ECON1, ECON1_BSEL1|ECON1_BSEL0); enc28j60_write_op(CMD_BIT_FIELD_SET, ECON1, (address&BANK_MASK)>>5); enc28j60_bank = (address&BANK_MASK); }
void enc28j60_write(u8 address, u8 data) { enc28j60_set_bank(address); enc28j60_write_op(CMD_WRITE_CTRL_REG, address, data); }