static void spi_at91_transaction_end(cyg_spi_device* dev) { // Disable the SPI controller HAL_WRITE_UINT32(AT91_SPI+AT91_SPI_CR, AT91_SPI_CR_SPIDIS); // Disable SPI clock HAL_WRITE_UINT32(AT91_PMC+AT91_PMC_PCDR, AT91_PMC_PCER_SPI); spi_at91_drop_cs((cyg_spi_at91_device_t *) dev); }
static void spi_at91_transaction_end(cyg_spi_device* dev) { cyg_spi_at91_device_t * at91_spi_dev = (cyg_spi_at91_device_t *)dev; cyg_spi_at91_bus_t *spi_bus = (cyg_spi_at91_bus_t *)at91_spi_dev->spi_device.spi_bus; // Disable the SPI controller HAL_WRITE_UINT32(spi_bus->base+AT91_SPI_CR, AT91_SPI_CR_SPIDIS); // Disable SPI clock HAL_WRITE_UINT32(AT91_PMC+AT91_PMC_PCDR,1<<spi_bus->interrupt_number); spi_at91_drop_cs((cyg_spi_at91_device_t *) dev); }
static void spi_at91_transaction_transfer(cyg_spi_device *dev, cyg_bool polled, cyg_uint32 count, const cyg_uint8 *tx_data, cyg_uint8 *rx_data, cyg_bool drop_cs) { cyg_spi_at91_device_t *at91_spi_dev = (cyg_spi_at91_device_t *) dev; // Select the device if not already selected spi_at91_start_transfer(at91_spi_dev); // Perform the transfer if (polled) spi_at91_transfer_polled(at91_spi_dev, count, tx_data, rx_data); else spi_at91_transfer(at91_spi_dev, count, tx_data, rx_data); // Deselect the device if requested if (drop_cs) spi_at91_drop_cs(at91_spi_dev); }