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.

[参考译文] CCS/LAUNCHCC3220MODASF:cc3220modasf launcpad

Guru**** 2560390 points
Other Parts Discussed in Thread: SYSCONFIG, ADS1292R

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/869887/ccs-launchcc3220modasf-cc3220modasf-launcpad

器件型号:LAUNCHCC3220MODASF
Thread 中讨论的其他器件:SysConfigADS1292R

工具/软件:Code Composer Studio

你(们)好  

我正在使用 CC3220modasf launchpad、我尝试通过 SPI 与 ADS1292R 板进行通信、我在 SPI 通信中遇到了一些问题。 我已经验证了 ADS1292R 与 其他一些 MCU 的代码、它工作正常。 下面是我将获得的 SPI 波形、MOSI 引脚始终为高电平。 SPI 在返回时被正确初始化、SPI 句柄也返回 SPI_TRANSFCTION 成功并且没有错误。 因此、我想知道我在初始化 SPI 或数据传输时是否出错。 还添加了 SPI 通信的代码。 我使用 SysConfig 进行默认 SPI 引脚分配(P05、P06、P07、P08)。

请建议 MOSI 引脚显示此行为的潜在问题是什么。   

静态 SPI_Handle ADS_SPI_Handle = NULL;


bool SPI_open (uint32_t 比特率)
{
char ret = 0;
SPI_Params ADS_SPI_params;

SPI_Params_init (&ADS_SPI_params);
ADS_SPI_params.bitrate =比特率;
ADS_SPI_params.mode = SPI_MASTER;
ADS_SPI_params.transferMode = SPI_MODE_BLOCKING;
ads_spi_params.frameFormat = SPI_POL0_PHA1;

ADS_SPI_Handle = SPI_open (CONFIG_SPI_0、&ADS_SPI_params);

if (ads_spi_handle!=空)
{
display_printf (display、0、0、"Master SPI initialized %d\n"、bitrate);
RET = 1;
}

return;
}

//
int spi_transfer (const uint8_t * TXBUF、const uint8_t * RXBUF、size_t len)
{
SPI_Transaction 事务;
内转台;
transaction.count = len;
transaction.txBuf =(void *) TXBUF;
transaction.rxBuf =(void *) RXBUF;
transaction.arg =空;
RET = SPI_TRANSFCTION (ADS_SPI_Handle、事务);

return;
}
*/

void SPI_close()
{
if (ads_spi_handle!=空)
{
SPI_Close (ADS_SPI_Handle);
ADS_SPI_Handle = NULL;
}
}



int spi_write (const uint8_t * buf、size_t len)
{
SPI_Transaction masterTransaction;

masterTransaction.count = len;
masterTransaction.txBuf =(void*) buf;
masterTransaction.arg =空;
masterTransaction.rxBuf =(void *) NULL;

返回 SPI_TRANSIZE (ADS_SPI_Handle、&masterTransaction);
}

int SPI_read (const INT8_t * RXBUF、size_t len)
{
SPI_Transaction masterTransaction;
int retval;

masterTransaction.count = len;
masterTransaction.txBuf =(void *) NULL;
masterTransaction.arg =空;
masterTransaction.rxBuf =(void *) RXBUF;

RetVal = SPI_transfer (ADS_SPI_Handle、masterTransaction);
display_printf (display、0、0、"SPI transfer SPI read =%d \n"、retval);
返回评估;

} 

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

    Deepak Kumar1、您好!

    您使用的是哪个 SDK 版本? 您还可以在.syscfg 或 CC3220_LAUNCHXL.c 文件中共享 SPI 配置吗?

    此致、

    Sarah

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

    您好、Sarah、

    我使用的是 SDK cc32xx_sdk_3_30_01_02。 以下是 SysConfig 为 SPI 生成的代码。 我现在使用的是3引脚 SPI、我将手动使用 CS 引脚。 CLK 和 MISO 引脚波形现在符合预期。  

    但我想知道如何同时使用 GSPI 和 NWP SPI。 您是否在我的 SPI 代码中看到任何问题? 此外、在 SPI 传输函数中以何种格式发送和接收数据。 什么是 SPI_transfer 的字节序。

    /*
    ================================================ SPI ========================================================
    */
    
    #include 
    #include 
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #define CONFIG_SPI_COUNT 2
    
    /*
    === spiCC32XXDMAObjects ===
    */
    SPICC32XXDMA_Object spiCC32XXDMAObjects[CONFIG_SPI_COUNT];
    
    uint32_t spiCC32XXSDMAscratchBuf[CONFIG_SPI_COUNT];
    
    /*
    === spiCC32XXDMAHWAttrs ===
    */
    const SPICC32XXDMA_HWAttrsV1 spiCC32XXDMAHWAttrs[CONFIG_SPI_COUNT]={
    /* CONFIG_NWP_SPI *
    /*网络处理器 SPI 总线*/
    {
    baseAddr = LSPI_base、
    .intNum = INT_LSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_LSPI、
    .csControl = SPI_SW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVEHIGH、
    .pinMode = SPI_4PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    .scratchBufPtr =&spiCC32XXSDMAscratchBuf[0]、
    defaultTxBufValue = 0、
    .rxChannelIndex = UDMA_CH12_LSPI_RX、
    txChannelIndex = UDMA_CH13_LSPI_TX、
    .minDmaTransferSize = 100、
    .mosipin = SPICC32XXDMA_PIN_NO_CONFIG、
    MISO 引脚= SPICC32XXDMA_PIN_NO_CONFIG、
    clkPin = SPICC32XXDMA_PIN_NO_CONFIG、
    csPin = SPICC32XXDMA_PIN_NO_CONFIG
    }、
    /* GSPI */
    {
    baseAddr = GSPI_base、
    .intNum = INT_GSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_GSPI、
    .csControl = SPI_SW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVELOW、
    .pinMode = SPI_3PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    .scratchBufPtr =&spiCC32XXSDMAscratchBuf[1]、
    defaultTxBufValue =~0、
    .rxChannelIndex = UDMA_CH30_GSPI_RX、
    txChannelIndex = UDMA_CH31_GSPI_TX、
    .minDmaTransferSize = 10、
    .mosipin = SPICC32XXDMA_PIN_07_MOSI、
    MISO 引脚= SPICC32XXDMA_PIN_53_MISO、
    clkPin = SPICC32XXDMA_PIN_05_CLK、
    csPin = SPICC32XXDMA_PIN_NO_CONFIG
    },
    };
    

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

    Deepak Kumar1、您好!

    您能否澄清您在软件中看到的问题? NWP SPI 在器件内部、由主机驱动程序处理。 此配置不应影响您的 GSPI。

    SDK 的 examples/drivers 文件夹中有一个 spimaster 和 spislave 示例、但您对 SPI 传输的使用看起来不错。 如何使用 SPI_WRITE 和 SPI_READ 传递 Rx 和 Tx 缓冲器?

    此致、

    Sarah

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

    你(们)好  

    我的代码正在 dmaErrorFxn 中获取。 以下是为 DMA 生成的代码。

    /*
    ================================================ DMA ================================================
    */
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    /*确保 DMA 控制表按照 UDMA 硬件的要求对齐*/
    静态 tDMAControlTable dmaControlTable[64]__attribute__(aligned (1024)));
    
    //这是 UDMA 错误中断的处理程序。 */
    static void dmaErrorFxn (uintptr_t arg)
    {
    int status = map_uDMAErrorStatusGet ();
    map_uDMAErrorStatusClear ();
    
    /*禁止未使用的变量警告*/
    (无效)地位;
    
    while (1);
    }
    
    UDMACC32XX_Object udmaCC3220SObject;
    
    const UDMACC32XX_HWAttrs udmaCC3220SHWAttrs ={
    .controlBaseAddr =(void *) dmaControlTable、
    .dmaErrorFxn =(UDMACC32XX_ErrorFxn) dmaErrorFxn、
    .intNum = INT_UDMAERR、
    .intPriority =(~0)
    };
    
    const UDMACC32XX_Config UDMACC32XX_CONFIG ={
    .object = udmaCC3220SObject、
    hwAttrs =&udmaCC3220SHWAttrs
    };
    

    我将在 SPI_READ 和 SPI_WRITE 函数中传递缓冲区、如下所示:

    signed char rxbuf[2];

    unsigned char txbuf[2];

    spi_read (rxbuf,1);

    SPI_WRITE( txbuf, 1);

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

    Deepak Kumar、您好!

     在 SPI_open 之前,您是否在应用程序中调用了 SPI_init()? 此函数用于初始化 DMA。

    此致、

    Sarah