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.

[参考译文] CC2640R2F:CC2640R2F 的 SPI 默认已使用 DMA 吗?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1175444/cc2640r2f-does-the-spi-of-cc2640r2f-already-use-dma-by-default

器件型号:CC2640R2F
主题中讨论的其他器件:ADS1291

大家好、

最近、我使用 SPI 读取 ADS1291数据、我觉得数据读取的频率不是很稳定。 使用 DMA 是否更好?

然后、我查看了 SPI 程序、并觉得 SPI 已配置了 DMA、因此我想确保这是否正确?

CONST SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[Board_SPICOUNT]={

baseAddr = SSI0_BASE、
.intNum = INT_SSI0_comb、
.intPriority =~0、
.wiPriority = 0、
powerMngrId = PowerCC26XX_Periph_SSI0、
defaultTxBufValue = 0、
.rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
.mosipin = Board_SPI0_MOSI、
MISO 引脚= Board_SPI0_MISO、
clkPin = Board_SPI0_SCK、
.csnPin =Board_SPI0_CSn

};

//SPI_CONFIG 包括 DMA 的配置?

CONST SPI_Config  SPI_CONFIG[Board_SPICOUNT]={

.fxnTablePtr =&SPICC26XXDMA_fxnTable
.object =&spiCC26XXDMAObjects[Board_SPI0]、
hwAttrs =&spiCC26XXDMAHHWAttrs[Board_SPI0]

};

/* SPICC26XXDMA 实现的 SPI 函数表*/
CONST SPI_FxnTable  SPICC26XXDMA_fxnTable =
SPICC26XXDMA_CLOSE、
SPICC26XXDMA_CONTROL、
SPICC26XXDMA_init、
SPICC26XXDMA_open、
SPICC26XXDMA_transfer、
SPICC26XXDMA_transferCancel
};

SPI_Handle  SPI_OPEN (uint_least8_t 索引、SPI_Params *参数)

SPI_Handle handle = NULL;

if (isInitialized &&(索引< SPI_COUNT)){
/*如果参数为 NULL,则使用默认值*/
if (params =NULL){
Params =(SPI_Params *)&SPI_defaultParams;

/*获取此驱动程序实例的句柄*/
句柄=(SPI_Handle)&(SPI_CONFIG[index]);  
handle = handle->fxnTablePtr ->openFxn (handle、params);

返回(句柄);

SPIHandle = SPI_OPEN (Board_SPI0、&SPIparams);

传输时、我应该使用 SPICC26XXDMA_transfer 而不是 SPI_transfer ()吗?

此致、

凯瑟琳

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

    最后 、SPI_TRANSFH ()仍然称为 SPICC26XXDMA_TRANSFRATEND。

    void SPI_transferCancel(SPI_Handle handle)
    {
    handle->fxnTablePtr->transferCancelFxn(handle);
    }
    
    const SPI_FxnTable SPICC26XXDMA_fxnTable = {
    SPICC26XXDMA_close,
    SPICC26XXDMA_control,
    SPICC26XXDMA_init,
    SPICC26XXDMA_open,
    SPICC26XXDMA_transfer,
    SPICC26XXDMA_transferCancel
    };
    
    typedef struct {
    /*! Function to close the specified peripheral */
    SPI_CloseFxn closeFxn;
    
    /*! Function to implementation specific control function */
    SPI_ControlFxn controlFxn;
    
    /*! Function to initialize the given data object */
    SPI_InitFxn initFxn;
    
    /*! Function to open the specified peripheral */
    SPI_OpenFxn openFxn;
    
    /*! Function to initiate a SPI data transfer */
    SPI_TransferFxn transferFxn;
    
    /*! Function to cancel SPI data transfer */
    SPI_TransferCancelFxn transferCancelFxn;
    } SPI_FxnTable;
    
    const SPI_Config SPI_config[EEG_BOARD_SPICOUNT] = {
    {
    .fxnTablePtr = &SPICC26XXDMA_fxnTable,
    .object = &spiCC26XXDMAObjects[EEG_BOARD_SPI0],
    .hwAttrs = &spiCC26XXDMAHWAttrs[EEG_BOARD_SPI0]
    }
    }; 
    
    

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

    您好 Katherine、

    如您所知 、SPI TI 驱动程序 确实使用 DMA 外设。  您应该使用 SPI_TRANSFRA传输、它将映射到 SPICC26XXDMA_TRANSFRA传输 的正确实现。  请参阅 spimaster spiffsexternal 示例、并指定您观察到的不稳定性、最好使用终端输出日志和逻辑分析仪屏幕截图。

    此致、
    Ryan