This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/AWR1642BOOST:具有 ISR 的从模式 SPI

Guru**** 2587365 points
Other Parts Discussed in Thread: AWR1642, SYSBIOS, MMWAVE-SDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/649505/rtos-awr1642boost-spi-in-slave-mode-with-isr

器件型号:AWR1642BOOST
Thread 中讨论的其他器件:AWR1642SYSBIOSMMWAVE-SDK

工具/软件:TI-RTOS

你(们)好
我一直在尝试在 SPI 从模式下配置 AWR1642升压。 我能够配置它 pinmux 并设置参数、但当我执行 SPI_Transfer()时、DSS_MAIN 组件失败。
然后、我意识到、如果之前的传输未正确发生、则无法在循环中调用 SPI_Transfer。 这让我编写 GPIO ISR、以便在主器件准备好请求数据时触发 SPI_Transfer。 我不熟悉 TI-RTOS 和 SYSBIOS、如果我能获得一些有关如何将中断附加到 GPIO 的指针。 我要感谢。  

谢谢、此致、  
Rakshit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rakshit、

    您可以参阅 MMWAVE-SDK "$MMWAVE-SDK\packages/ti\drivers\GPIO\test\xwr16xx\"中提供的 GPIO 驱动程序测试应用程序。 在此示例中、"GPIO_1"配置为具有中断功能的输入引脚。 测试应用程序为您提供了一个详细的分步过程、可将引脚设置为中断、注册处理程序等

    希望这有助于解决您的问题。

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  
    我设法将处于阻塞模式的 SPI 作为从设备工作、但当我将其配置为在非阻塞模式下工作时、我面临着一些问题。  
    所发生的情况是、回调模式下的 SPI_Transfer 不会在传输完成时触发回调、也不会接收/传输数据。

    我配置 DMA  

    dma_params_init (&dmaParams);
    gDmaHandle = dma_open (0、&dmaParams、&errCode);
    if (gDmaHandle ==空)
    {
    printf ("打开 DMA 驱动程序失败,错误=%d\n",错误代码);
    返回;
    } 

    和 SPI

    SPI_PARAMS_INIT (params);
    params.mode = SPI_SLAVE;
    params.dataSize = 8;
    params.dmaEnable = 1;
    params.dmaHandle = gDmaHandle;
    Params.U.slaveParams.dmaCfg.txDmaChanNum =1U;
    Params.U.slaveParams.dmaCfg.rxDmaChanNum =0U;
    params.frameFormat = SPI_POL0_PHA1;
    Params.ShiftFormat = SPI_MSB_FIRST;
    Params.pinMode = SPI_PINMODE_4PIN_CS;
    params.transferMode = SPI_MODE_CALLACK;
    params.eccEnable = 1;
    params.csHold = 1;
    params.transferCallbackFxn = spiCallback;
    

    我的回叫:  

    void spiCallback (SPI_Handle handle、SPI_Transaction *事务)
    {
    
    
    if (事务->状态=SPI_TRANSFER_Completed)
    {
    Semaphore_post (SPISem);
    
    }
    
    return;
    } 

    空 SPITASK (UARg arg0、UARg arg1)
    {
    
    char *msg ="1abcdefghijklmnopqrstuvwxyzDONE2abcdefghijklmnopqrstuvwxyzDONE";
    字符 Rx[63];
    System_printf ("SPI 任务已启动\n");
    spiTransaction.count =(size_t) 62;
    spiTransaction.txBuf =(void*) msg;
    spiTransaction.rxBuf =(void *) rx;
    spiTransaction.arg =空;
    spiTransaction.slaveIndex = 0U;
    while (1){
    Semaphore_pend (SPISem、BIOS_wait_forever);
    System_printf ("立即传输\n");
    SPI_transfer (handle、&spiTransaction);
    }
    } 






    此外,在阻塞模式下,当传输帧较长(大于50)时,SPI_TRANSFT()调用不会阻塞。

    谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Raghunandan、
    从另一个线程继续,问题可能是什么?