采用SAMV71X的ATMEL START超级板,简单的SPI DMA发送开箱即用的示例似乎不起作用

时间:2019-10-15 13:02:04

标签: c dma atmel

我使用ATMEL START框架已有一段时间,并且效果很好,但是最近我遇到了SPI DMA的问题。

我正在使用示波器观看从设备选择(SS),时钟(SCK)和MOSI信号。 当我在没有dma的情况下运行环回时,一切工作正常(这意味着使用ATMEL START项目配置助手中选择的SPI_Master_Async-或SPI_Master_Sync驱动程序)。 启用dma时,SCK线在复位时被拉高,然后在调用atmel_start_init()函数时正确地降至低电平。此后,时钟线仅处于低电平,什么也没发生。

除了下面的代码,我尝试直接使用_spi_m_dma_transfer,但没有用。由于某些原因,我无法介入框架的胆量。而且该用户指南并没有太大帮助。

这是代码:

main.c

int main(void)
{
    /* Initializes MCU, drivers and middleware */
    atmel_start_init();

    ams_system32_setupGPIO(PIN_ABCC_SPI_SS, GPIO_DIRECTION_OUT, GPIO_PULL_OFF);
    ams_system32_setupGPIO(PIN_LED, GPIO_DIRECTION_OUT, GPIO_PULL_OFF);

    gpio_set_pin_level(PIN_ABCC_SPI_SS, 1);

    gpio_set_pin_level(PIN_ABCC_SPI_SS, 0);
    SPI_0_example();

    while(1){}

}

driver_examples.c(由框架提供,我没有更改)

static uint8_t example_SPI_0[12] = "Hello World!";

static void tx_complete_cb_SPI_0(struct _dma_resource *resource)
{
    /* Transfer completed */
}

void SPI_0_example(void)
{
    struct io_descriptor *io;
    spi_m_dma_get_io_descriptor(&SPI_0, &io);

    spi_m_dma_register_callback(&SPI_0, SPI_M_DMA_CB_TX_DONE, (spi_m_dma_cb_t)tx_complete_cb_SPI_0);
    spi_m_dma_enable(&SPI_0);
    io_write(io, example_SPI_0, 12);
}

这是配置的图片ATMEL START config

那为什么不起作用?以及如何使它工作?我忘了什么吗?

0 个答案:

没有答案