mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-26 06:53:52 +01:00
cc110x: Acquire exclusive access to SPI bus.
Signed-off-by: Joakim Gebart <joakim.gebart@eistec.se>
This commit is contained in:
parent
1f577b4fee
commit
af1ddef1fb
@ -16,6 +16,7 @@
|
||||
* @author Thomas Hillebrandt <hillebra@inf.fu-berlin.de>
|
||||
* @author Heiko Will <hwill@inf.fu-berlin.de>
|
||||
* @author Fabian Nack <nack@inf.fu-berlin.de>
|
||||
* @author Joakim Gebart <joakim.gebart@eistec.se>
|
||||
* @}
|
||||
*/
|
||||
|
||||
@ -65,17 +66,22 @@ void cc110x_cs(void)
|
||||
|
||||
void cc110x_writeburst_reg(uint8_t addr, char *src, uint8_t count)
|
||||
{
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_regs(CC110X_SPI, addr | CC1100_WRITE_BURST, src, 0, count);
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
}
|
||||
|
||||
void cc110x_readburst_reg(uint8_t addr, char *buffer, uint8_t count)
|
||||
{
|
||||
int i = 0;
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_byte(CC110X_SPI, addr | CC1100_READ_BURST, 0);
|
||||
while (i < count) {
|
||||
@ -84,46 +90,59 @@ void cc110x_readburst_reg(uint8_t addr, char *buffer, uint8_t count)
|
||||
}
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
}
|
||||
|
||||
void cc110x_write_reg(uint8_t addr, uint8_t value)
|
||||
{
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_reg(CC110X_SPI, addr, value, 0);
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
}
|
||||
|
||||
uint8_t cc110x_read_reg(uint8_t addr)
|
||||
{
|
||||
char result;
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_reg(CC110X_SPI, addr | CC1100_READ_SINGLE, CC1100_NOBYTE, &result);
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
return (uint8_t) result;
|
||||
}
|
||||
|
||||
uint8_t cc110x_read_status(uint8_t addr)
|
||||
{
|
||||
char result;
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_reg(CC110X_SPI, addr | CC1100_READ_BURST, CC1100_NOBYTE, &result);
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
return (uint8_t) result;
|
||||
}
|
||||
|
||||
uint8_t cc110x_strobe(uint8_t c)
|
||||
{
|
||||
char result;
|
||||
unsigned int cpsr = disableIRQ();
|
||||
unsigned int cpsr;
|
||||
spi_acquire(CC110X_SPI);
|
||||
cpsr = disableIRQ();
|
||||
cc110x_cs();
|
||||
spi_transfer_byte(CC110X_SPI, c, &result);
|
||||
gpio_set(CC110X_CS);
|
||||
restoreIRQ(cpsr);
|
||||
spi_release(CC110X_SPI);
|
||||
return (uint8_t) result;
|
||||
}
|
||||
|
||||
@ -76,7 +76,9 @@ int cc110x_initialize(netdev_t *dev)
|
||||
|
||||
/* Configure SPI */
|
||||
spi_poweron(CC110X_SPI);
|
||||
spi_acquire(CC110X_SPI);
|
||||
spi_init_master(CC110X_SPI, SPI_CONF_FIRST_RISING, SPI_SPEED_5MHZ);
|
||||
spi_release(CC110X_SPI);
|
||||
|
||||
/* Load driver & reset */
|
||||
power_up_reset();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user