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.
您好!
我正在尝试在 TMS320F280039C 评估板上启用 SPI 模块。
我 要配置的引脚是 GPIO22、GPIO23、GPIO24、GPIO25、作为 CLK、CS、 MOSI 和 MISO。 我在板上使用 SPIB。
我目前没有在 CLK (GPIO22)引脚上获得时钟、它要么保持持续 高电平、要么保持低电平。
您能否共享配置以启用 SPIB、或者 您能否共享一些示例代码。
请告诉我是否需要从我的一方获得任何其他信息。
您 能给我电话吗
-如何检查 SPI w.r.t 系统时钟的时钟设置。
- 如何检查系统时钟是否设置正确,SPI 时钟是否与系统时钟同步。
-如何检查计数器的系统时钟和 SPI 时钟(外设时钟)
是否确定要检查 GPIO22的正确引脚? 您是否尝试将 GPIO22切换为输出引脚、并确保正在探测评估板上的正确引脚。
下面提到的 C2000Ware 示例
路径: \driverlib\f28003x\examples\spi\
示例:
SPI_ex3_external_loopback
SPI_ex4_external_loopback _fifo_interrupts
此处显示了 SYSCLK/LSPPCLK 和 SPICLK 之间的关系。
SPI 波特率由 SPIBRR 寄存器决定。 因此、实际上 LOSPCP、PCLKCRx 寄存器、SPIBRR 寄存器将影响 SPICLK (SPI 波特率)
要观察 SYSCLK、您需要使用 XCLKOUTSEL、XCLKOUTDIVSEL 寄存器并配置 GPIO16 (或) 18来探测 XCLKOUT 引脚中的 SYSCLK。 可以通过探测 SPICLK 引脚来观察 SPI 波特率。
AFA 我知道我正在寻找正确的 GPIO 并探测正确的引脚。
我还配置了其他 GPIO、下面是 GPIO12和相关引脚的代码。
例如 、GPIO12、GPIO11、GPIO16、GPIO17作为 CLK、CS、 MOSI 和 MISO。
我 将分别探测 CLK 和 CS 的引脚51和引脚52。
下面是 SPI 的配置:
// SPICCR -配置控制寄存器
//在配置更改之前将 RESET 设置为低电平
SpiaRegs.SPICCR.bit.SPISWRESET = bit_reset;
//时钟极性(0 =上升、1 =下降)
SpiaRegs.SPICCR.bit.CLKPOLARITY = bit_RESET;
//高速模式被禁用
SpiaRegs.SPICCR.bit.HS_MODE = bit_RESET;
//启用环回
SpiaRegs.SPICCR.bit.SPILBK = bit_RESET;
// 16位字符
SpiaRegs.SPICCR.bit.SPICHAR =(16 - 1);
// SPICCR -操作控制寄存器
//溢出中断使能= 0
SpiaRegs.SPICTL.bit.OVERRUNINTENA = bit_RESET;
//时钟相位(0 =正常、1 =延迟)
SpiaRegs.SPICTL.bit.CLK_PHASE = bit_RESET;
//启用主设备(0 =从设备,1 =主设备)
SpiaRegs.SPICTL.bit.master_slave = bit_set;
//启用传输(TALK)
SpiaRegs.SPICTL.bit.TALK = bit_set;
//禁用 SPI 中断
SpiaRegs.SPICTL.bit.SPIINTENA = bit_RESET;
// SPIBRR -波特率寄存器
SpiaRegs.SPIBRR.ALL =(60000000 / 15000000)- 1);
这是 SPI 的 GPIO 配置
//为 SPI-A 配置 GPIO 引脚
// SPI_CS_GPIO 配置
GPIO_setPinConfig (GPIO_11_GPIO11);// SPIA -CS
GPIO_setDirectionMode (SPI_CS_GPIO、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (SPI_CS_GPIO、GPIO_PIN_TYPE_STD);
GPIO_setMasterCore (SPI_CS_GPIO、GPIO_CORE_CPU1);
GPIO_setQualificationMode (SPI_CS_GPIO、GPIO_QUAL_SYNC);
// SPI_CLK_GPIO 配置
GPIO_setPadConfig (GPIO_PIN_SPIA_CLK、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (GPIO_PIN_SPIA_CLK、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_12_SPIA_CLK);// SPIA -CLK
GPIO_setPadConfig (GPIO_PIN_SPIA_SIMO、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (GPIO_PIN_SPIA_SIMO、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_16_SPIA_SIMO);// SPIA-SIMO
GPIO_setPadConfig (GPIO_PIN_SPIA_SOMI、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (GPIO_PIN_SPIA_SOMI、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_17_SPIA_SOMI);// SPIB-SOMI
我使用的库与您参考和参考的 SPI 示例相同。
您能不能检查一下、并告诉我是否缺少了一些东西、我去了某个地方出错了。
因为我参考了 C2000ware 中提供的几乎所有示例。
Vikas、
您没有使用我建议的 C2000Ware driverlib 示例代码。 您使用的是位字段方法。 我建议您使用 driverlib 方法、因为它支持 SysConfig、允许您以图形方式配置 GPIO 和 SPI 模块、该工具会自动生成代码。
此外、您是否正在探测 TMDSHSECDOCK 电路板中的信号? 如果没有、请提供原理图。 您已将 SPI_CS_GPIO (GPIO11)配置为输出引脚、但似乎也使用 GPIO_QUAL_SYNC。 此选项仅在 GPIO 用作输入引脚并且不能用作输出引脚时使用。
检查 SPISWRESET 是否 在 SPI 配置结束时设置为1。 只有这样、SPI 才会准备好发送/接收下一个字符。 使用 SysConfig 将有助于避免不正确的 SPI/GPIO 配置。
此致、
曼诺伊
感谢您的回复、
实际上、我最初使用的是 driverlib API 方法、但这种方法不起作用、然后我切换到了位字段方法。 我可以重试并再次检查。
我有定制板和 TI 控制卡、在这里我检查 GPIO 引脚。 此外、对于 GPIO 11、我最初将其配置为 SPI_ste、但这不起作用、因此我更改为正常的 GPIO 输出引脚。
我将设置 SPISWRESET 位。 可能是我没有共享代码。
您能告诉我是否需要在板上或代码中执行任何额外的配置/设置、但我缺少这些配置/设置吗?
尝试切换用作 SPI 引脚的所有 GPIO 作为输出引脚、并确保 按预期切换。 使用 SysConfig 和 driverlib 方法更容易。 因此 、我不会尝试使用位字段方法。
您好!
我收到了定制板、我们尝试在 TI MCU 上配置 SPI。
我们可以获得 SPI_CLK、SPI_CS 和 SPI_MOSI。 我们检查 CRO、并根据配置获得这些引脚上的波形。
但我们没有在 SPI_MISO 上获得任何内容(在 CRO 上检查)。
此外、
1) 1)我们从 SPI_O_RXBUF 寄存器读取数据、但不提供任何值(仅为"0x0000"值)
当我们将 SPI_O_RXEMU 寄存器设置为读取时、它会在观察窗口中提供一些输出(但在 CRO 上没有、例如在 SPI_MISO 引脚上)
2)我们从 SPI_O_TXBUF 发送数据、然后在寄存器(SPI_O_RXBUF/SPI_O_RXEMU)和上未接收任何数据
当我们使用 SPI_O_DAT 时、我们开始接收数据、但不传输任何数据(即 SPI_O_TXBUF 上没有任何数据)。
您能检查一下这个并告诉我们吗?
Vikas、
我不知道您想要检查什么。 事实上、SPIA/SPIB 在器件上作为主器件(发送器/接收器)(或)从器件(发送器/接收器)工作、因为每个单独的器件在交付给客户之前都经过详尽测试。
您的 C2000 SPI 主器件/从器件吗? 您尝试连接到什么? 您对 C2000Ware 示例代码进行了哪些修改?
您是否尝试运行示例代码以了解它们的工作原理?
此致、
曼诺伊