forked from Imagelibrary/rtems
bsp/atsam: Simplify SPI initialization
This commit is contained in:
@@ -23,8 +23,8 @@ extern "C" {
|
|||||||
|
|
||||||
int spi_bus_register_atsam(
|
int spi_bus_register_atsam(
|
||||||
const char *bus_path,
|
const char *bus_path,
|
||||||
Spi *register_base,
|
uint8_t spi_peripheral_id,
|
||||||
rtems_vector_number irq,
|
Spi *spi_regs,
|
||||||
const Pin *pins,
|
const Pin *pins,
|
||||||
size_t pin_count
|
size_t pin_count
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ typedef struct {
|
|||||||
spi_bus base;
|
spi_bus base;
|
||||||
Spi *regs;
|
Spi *regs;
|
||||||
rtems_vector_number irq;
|
rtems_vector_number irq;
|
||||||
uint32_t board_id;
|
|
||||||
uint32_t msg_todo;
|
uint32_t msg_todo;
|
||||||
const spi_ioc_transfer *msgs;
|
const spi_ioc_transfer *msgs;
|
||||||
rtems_id task_id;
|
rtems_id task_id;
|
||||||
@@ -170,7 +169,7 @@ static void atsam_configure_spi(atsam_spi_bus *bus)
|
|||||||
SPID_Configure(
|
SPID_Configure(
|
||||||
&bus->SpiDma,
|
&bus->SpiDma,
|
||||||
bus->regs,
|
bus->regs,
|
||||||
bus->board_id,
|
bus->SpiDma.spiId,
|
||||||
(SPI_MR_DLYBCS(delay_cs) |
|
(SPI_MR_DLYBCS(delay_cs) |
|
||||||
SPI_MR_MSTR |
|
SPI_MR_MSTR |
|
||||||
SPI_MR_MODFDIS |
|
SPI_MR_MODFDIS |
|
||||||
@@ -512,47 +511,35 @@ static int atsam_spi_setup(spi_bus *base)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atsam_spi_init(
|
|
||||||
atsam_spi_bus *bus,
|
|
||||||
const Pin *pins,
|
|
||||||
size_t pin_count
|
|
||||||
)
|
|
||||||
{
|
|
||||||
PIO_Configure(pins, pin_count);
|
|
||||||
ENABLE_PERIPHERAL(bus->board_id);
|
|
||||||
XDMAD_Initialize(&bus->Dma, 0);
|
|
||||||
bus->base.mode = 0;
|
|
||||||
bus->base.bits_per_word = 8;
|
|
||||||
bus->base.speed_hz = bus->base.max_speed_hz;
|
|
||||||
bus->base.delay_usecs = 1;
|
|
||||||
bus->base.cs = 1;
|
|
||||||
|
|
||||||
atsam_configure_spi(bus);
|
|
||||||
atsam_set_dmac(bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_bus_register_atsam(
|
int spi_bus_register_atsam(
|
||||||
const char *bus_path,
|
const char *bus_path,
|
||||||
Spi *register_base,
|
uint8_t spi_peripheral_id,
|
||||||
rtems_vector_number irq,
|
Spi *spi_regs,
|
||||||
const Pin *pins,
|
const Pin *pins,
|
||||||
size_t pin_count
|
size_t pin_count
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
atsam_spi_bus *bus;
|
atsam_spi_bus *bus;
|
||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
uint32_t board_id = (uint32_t) irq;
|
|
||||||
|
|
||||||
bus = (atsam_spi_bus *) spi_bus_alloc_and_init(sizeof(*bus));
|
bus = (atsam_spi_bus *) spi_bus_alloc_and_init(sizeof(*bus));
|
||||||
if (bus == NULL) {
|
if (bus == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bus->regs = register_base;
|
bus->base.bits_per_word = 8;
|
||||||
bus->board_id = board_id;
|
bus->base.speed_hz = bus->base.max_speed_hz;
|
||||||
|
bus->base.delay_usecs = 1;
|
||||||
|
bus->base.cs = 1;
|
||||||
|
bus->regs = spi_regs;
|
||||||
bus->irq = ID_XDMAC;
|
bus->irq = ID_XDMAC;
|
||||||
|
bus->SpiDma.spiId = spi_peripheral_id;
|
||||||
|
|
||||||
atsam_spi_init(bus, pins, pin_count);
|
PIO_Configure(pins, pin_count);
|
||||||
|
PMC_EnablePeripheral(spi_peripheral_id);
|
||||||
|
XDMAD_Initialize(&bus->Dma, 0);
|
||||||
|
atsam_configure_spi(bus);
|
||||||
|
atsam_set_dmac(bus);
|
||||||
|
|
||||||
sc = rtems_interrupt_handler_install(
|
sc = rtems_interrupt_handler_install(
|
||||||
bus->irq,
|
bus->irq,
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ int atsam_register_spi_0(void)
|
|||||||
|
|
||||||
return spi_bus_register_atsam(
|
return spi_bus_register_atsam(
|
||||||
ATSAM_SPI_0_BUS_PATH,
|
ATSAM_SPI_0_BUS_PATH,
|
||||||
SPI0,
|
|
||||||
ID_SPI0,
|
ID_SPI0,
|
||||||
|
SPI0,
|
||||||
pins,
|
pins,
|
||||||
RTEMS_ARRAY_SIZE(pins)
|
RTEMS_ARRAY_SIZE(pins)
|
||||||
);
|
);
|
||||||
@@ -92,8 +92,8 @@ int atsam_register_spi_1(void)
|
|||||||
|
|
||||||
return spi_bus_register_atsam(
|
return spi_bus_register_atsam(
|
||||||
ATSAM_SPI_1_BUS_PATH,
|
ATSAM_SPI_1_BUS_PATH,
|
||||||
SPI1,
|
|
||||||
ID_SPI1,
|
ID_SPI1,
|
||||||
|
SPI1,
|
||||||
pins,
|
pins,
|
||||||
RTEMS_ARRAY_SIZE(pins)
|
RTEMS_ARRAY_SIZE(pins)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user