structspi_module spi_master_instance;structspi_module spi_slave_instance;
structdma_resource example_resource_tx;structdma_resource example_resource_rx;
staticvolatilebooltransfer_tx_is_done =false;staticvolatilebooltransfer_rx_is_done =false;
#define BUF_LENGTH 20
staticconstuint8_t buffer_tx[BUF_LENGTH] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,};staticuint8_t buffer_rx[BUF_LENGTH];
structspi_config config_spi_master;
structspi_config config_spi_slave;
spi_get_config_defaults(&config_spi_master);
spi_get_config_defaults(&config_spi_slave);
config_spi_master.mux_setting = CONF_MASTER_MUX_SETTING;
config_spi_slave.mux_setting = CONF_SLAVE_MUX_SETTING;
spi_init(&spi_master_instance, CONF_MASTER_SPI_MODULE, &config_spi_master);
spi_init(&spi_slave_instance, CONF_SLAVE_SPI_MODULE, &config_spi_slave);
spi_enable(&spi_master_instance);
spi_enable(&spi_slave_instance);
structdma_resource_config tx_config;
structdma_resource_config rx_config;
dma_get_config_defaults(&tx_config);
dma_get_config_defaults(&rx_config);
tx_config.peripheral_trigger = CONF_PERIPHERAL_TRIGGER_TX;tx_config.trigger_action = DMA_TRIGGER_ACTON_BEAT;
rx_config.peripheral_trigger = CONF_PERIPHERAL_TRIGGER_RX;rx_config.trigger_action = DMA_TRIGGER_ACTON_BEAT;
dma_allocate(tx_resource, &tx_config);
dma_allocate(rx_resource, &rx_config);
structdma_descriptor_config tx_descriptor_config;
structdma_descriptor_config rx_descriptor_config;
dma_descriptor_get_config_defaults(&tx_descriptor_config);
dma_descriptor_get_config_defaults(&rx_descriptor_config);
tx_descriptor_config.beat_size = DMA_BEAT_SIZE_BYTE;tx_descriptor_config.dst_increment_enable =false;tx_descriptor_config.block_transfer_count =sizeof(buffer_tx)/sizeof(uint8_t);tx_descriptor_config.source_address = (uint32_t)buffer_tx +sizeof(buffer_tx);tx_descriptor_config.destination_address =(uint32_t)(&spi_master_instance.hw->SPI.DATA.reg);
rx_descriptor_config.beat_size = DMA_BEAT_SIZE_BYTE;rx_descriptor_config.src_increment_enable =false;rx_descriptor_config.block_transfer_count =sizeof(buffer_rx)/sizeof(uint8_t);rx_descriptor_config.source_address =(uint32_t)(&spi_slave_instance.hw->SPI.DATA.reg);rx_descriptor_config.destination_address =(uint32_t)buffer_rx +sizeof(buffer_rx);
dma_descriptor_create(tx_descriptor, &tx_descriptor_config);
dma_descriptor_create(rx_descriptor, &rx_descriptor_config);