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/MSP432E401Y:我无法启用 SPI 端口 SSI3

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/823412/ccs-msp432e401y-i-cannot-enable-spi-port-ssi3

器件型号:MSP432E401Y

工具/软件:Code Composer Studio

我正在尝试修改 SimpleLink SDK 中 spislave 示例中的代码。 我希望 MSP432成为另一个器件的 SPI 从器件、并将其传输的数据发送到网络套接字。

1) 1)我已经编辑了 MSP_EXP432E401Y.c 文件的 SPI 部分、如下所示:

/*
 * ========================================= SPI ========================================================
 *
#include
#include

SPIMSP432E4DMA_Object spiMSP432E4DMAObjects[MSP_EXP432E401Y_SPICOUNT];

/*
 *注意:SD 驱动程序可使用以下 SPI 实例进行通信
 *通过 SPI 使用 SD 卡。  下面的'DEFaultTxBufValue'字段被设置为
 *(~0)以满足 SDSPI 驱动器要求。
 *
CONST SPIMSP432E4DMA_HWAttrs spiMSP432E4DMAHWAttrs[MSP_EXP432E401Y_SPICOUNT]={
   {
       baseAddr = SSI2_base、
       .intNum = INT_SSI2、
       .intPriority =(~0)、
       defaultTxBufValue =(~0)、
       .rxDmaChannel = UDMA_CH12_SSI2RX、
       TxDmaChannel = UDMA_CH13_SSI2TX、
       .minDmaTransferSize = 10、
       clkPinMask = SPIMSP432E4_PD3_SSI2CLK、
       fsPinMask = SPIMSP432E4_PD2_SSI2FSS、
       .xdata0 PinMask = SPIMSP432E4_PD1_SSI2XDAT0、
       .xdata1 PinMask = SPIMSP432E4_PD0_SSI2XDAT1
   }、
   {
       baseAddr = SSI3_base、
       .intNum = INT_SSI3、
       .intPriority =(~0)、
       defaultTxBufValue =(~0)、
       .minDmaTransferSize = 10、
       .rxDmaChannel = UDMA_CH14_SSI3RX、
       TxDmaChannel = UDMA_CH15_SSI3TX、
       clkPinMask = SPIMSP432E4_PQ0_SSI3CLK、
       fsPinMask = SPIMSP432E4_PQ1_SSI3FSS、
       .xdata0引脚掩码= SPIMSP432E4_PQ2_SSI3XDAT0、
       .xdata1引脚掩码= SPIMSP432E4_PQ3_SSI3XDAT1
   }
};

CONST SPI_Config SPI_CONFIG[MSP_EXP432E401Y_SPICOUNT]={
   {
       .fxnTablePtr =&SPIMSP432E4DMA_fxnTable、
       .object =&spiMSP432E4DMAObjects[MSP_EXP432E401Y_SPI2]、
       hwAttrs =&spiMSP432E4DMAHWAttrs[MSP_EXP432E401Y_SPI2]
   }、
   {
       .fxnTablePtr =&SPIMSP432E4DMA_fxnTable、
       .object =&spiMSP432E4DMAObjects[MSP_EXP432E401Y_SPI3]、
       hwAttrs =&spiMSP432E4DMAHWAttrs[MSP_EXP432E401Y_SPI3]
   }、
};

const uint_least8_t SPI_count = MSP_EXP432E401Y_SPICOUNT;

2) 2)我编辑了 MSP_EXP432E401Y.h 文件:

/*!
 * @def   MSP_EXP432E401Y_SPIName
 * @ MSP_EXP432E401Y 开发板上 SPI 名称的简要枚举
 *
typedef 枚举 MSP_EXP432E401Y_SPIName{
   MSP_EXP432E401Y_SPI2 = 0、
   MSP_EXP432E401Y_SPI3、

   MSP_EXP432E401Y_SPICOUNT
} MSP_EXP432E401Y_SPIName;

3)在 Board.h 中:

#define Board_SPI0                 MSP_EXP432E401Y_SPI2
#define Board_SPI1                 MSP_EXP432E401Y_SPI3

4) 4)在我的代码中:

SPI_Params_init (&spiParams);
   spiParams.frameFormat = SPI_POL0_PHA0;
       spiParams.mode = SPI_SLAVE;
       //spiParams.transferCallbackFxn = transferCompleteFxn;
       spiParams.transferMode = SPI_MODE_BLOCKING;
       spiParams.transferTimeout = SPI_TIMEOUT;
       slaveSpi = SPI_open (Board_SPI1、&spiParams);
       if (slaveSpi == NULL){
           Display_printf (display、0、0、"初始化从器件 SPI\n"时出错);
           while (1);
       }
       否则{
           display_printf (display、0、0、"已初始化从器件 SPI \n");
       }

但是、当我转到代码的这一部分时、我收到一条消息、指出初始化从器件 SPI 时出错。

您能告诉我在这里发生了什么错误吗? 设置 SPI 端口还需要做什么吗?

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

    查看原始示例、您只会更改应用程序。  如果您使用 Board_SPI0、您是否仍然获得 SPI 的错误初始化?  我将尝试从我的一侧运行该示例。

    Chris

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

     我找到了这个问题。 我已按顺序运行 SPI_init()函数。 当我修正它时、它就能工作。

    谢谢。