6629 SPI作为从机链表接收的驱动

徽信管理团队 · 9次点击 · 2天前

考虑到有些项目需要使用我们6629的芯片作为spi从机,但是主机的发包间隔又不可控,为了解决spi每一帧数据的衔接问题,我们可以考虑spi的链表方式,目前该驱动主要是针对6629作为spi从机,只接收。驱动详情参考附件


使用示例:

#define TEST_TRANS_SIZE                 4   //100
static uint8_t spi_rx_buf[TEST_TRANS_SIZE];
static uint8_t spi_rx_buf1[TEST_TRANS_SIZE];
static void spi_pinmux_init(void)
{
    drv_pin_init(pin_cfg_cnt, sizeof(pin_cfg_cnt) / sizeof(pin_cfg_cnt[0]));

    memset(spi_rx_buf, 0xFF, sizeof(spi_rx_buf));

    // drv_spi_transfer_int(OM_SPI0, spi_tx_buf, TEST_TRANS_SIZE, spi_rx_buf, TEST_TRANS_SIZE);
    // while (!int_transfer_is_done);
    // int_transfer_is_done = 0;

}


void spi_transfer_dma_ll_cb(void *om_reg, drv_event_t event, void *rcv, void *num)
{
    if(event == DRV_GPDMA_EVENT_TERMINAL_COUNT_REQUEST)
    {
        LOG_DBG_ARRAY_EX("receive data:",rcv, (uint32_t)num);
        memset(rcv, 0, (uint32_t)num);
    }
}

void slave_spi_trans_dma_ll(void)
{
    switch_96m_clk();
    OM_LOG_INIT();
    // evt_timer_set(&ctr_gpio_timer, 500, EVT_TIMER_REPEAT, ctr_gpio_timer_cb, NULL);
    LOG_INF("----------------test spi slave dma start-------------------\n");
    LOG_INF("slave spi test cs = %d, clk = %d, miso = %d, mosi = %d\n",
                               PAD_SPI0_CS, PAD_SPI0_CLK, PAD_SPI0_DI, PAD_SPI0_DIO);

    for (uint16_t i = 0; i < TEST_TRANS_SIZE; i++) {
        spi_tx_buf[i] = TEST_TRANS_SIZE - i;
    }
    spi_cfg.role        = SPI_ROLE_SLAVE;
    spi_pinmux_init();

    drv_spi_init(OM_SPI0, &spi_cfg);
    drv_spi_register_dma_ll_isr_callback(OM_SPI0, spi_transfer_dma_ll_cb);


    // 4 wire spi
    LOG_DBG("spi_rx_buf addr is 0x%08x, spi_rx_buf1 addr is 0x%08x\n",(uint32_t)spi_rx_buf, (uint32_t)spi_rx_buf1);
    drv_spi_read_dma_ll(OM_SPI0, NULL, 0, spi_rx_buf, TEST_TRANS_SIZE);
    drv_spi_read_dma_ll(OM_SPI0, NULL, 0, spi_rx_buf1, TEST_TRANS_SIZE);
}

移植的话,可以把my_drv_spi.c替换掉默认的drv_spi.c,但是drv_spi.h还是要保留的

ll_spi_driver-202509303076.rar
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站