|
|
|
|
|
|
|
|
//return port().POPR; |
|
|
//return port().POPR; |
|
|
} |
|
|
} |
|
|
uint16_t transfer16(uint16_t data) { |
|
|
uint16_t transfer16(uint16_t data) { |
|
|
uint16_t ret_val = transfer(data >> 8); |
|
|
|
|
|
ret_val = (ret_val << 8) | transfer(data & 255); |
|
|
|
|
|
//port().SR = SPI_SR_TCF; |
|
|
|
|
|
//port().PUSHR = data | SPI_PUSHR_CTAS(1); |
|
|
|
|
|
//while (!(port().SR & SPI_SR_TCF)) ; // wait |
|
|
|
|
|
//return port().POPR; |
|
|
|
|
|
return ret_val; |
|
|
|
|
|
|
|
|
uint32_t tcr = port->TCR; |
|
|
|
|
|
port->TCR = (tcr & 0xfffff000) | LPSPI_TCR_FRAMESZ(15); // turn on 16 bit mode |
|
|
|
|
|
port->TDR = data; // output 16 bit data. |
|
|
|
|
|
while ((port->RSR & LPSPI_RSR_RXEMPTY)) ; // wait while the RSR fifo is empty... |
|
|
|
|
|
port->TCR = tcr; // restore back |
|
|
|
|
|
return port->RDR; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void inline transfer(void *buf, size_t count) {transfer(buf, buf, count);} |
|
|
void inline transfer(void *buf, size_t count) {transfer(buf, buf, count);} |