ATMEL START с ультраплатой SAMV71X, о которой идет речь, простой пример отправки спама из коробки, похоже, не работает - PullRequest
0 голосов
/ 15 октября 2019

Я некоторое время пользуюсь платформой ATMEL START, и она отлично работала, но недавно я столкнулся с проблемой с SPI DMA.

Я использую осциллограф для наблюдения за выбором ведомого (SS)), тактовые сигналы (SCK) и MOSI. Когда я запускаю loopback без dma, все работает нормально (это означает, что драйвер SPI_Master_Async- или SPI_Master_Sync выбран в помощнике по настройке проекта ATMEL START). Когда 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

Так почему это не работает? И как мне заставить его работать? Я что-то забыл?

...