您好!
我正在使用 EVMSKAm335x 处理器套件和处理器 SDK RTOS。 由于 AM335x 的入门套件中没有从器件连接到 SPI、因此我们能否通过环回检查 SPI?
如何配置 SPI 进行环回? 我没有在任何寄存器中获得任何位来配置回送。
此致
高拉夫
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.
您好!
我正在使用 EVMSKAm335x 处理器套件和处理器 SDK RTOS。 由于 AM335x 的入门套件中没有从器件连接到 SPI、因此我们能否通过环回检查 SPI?
如何配置 SPI 进行环回? 我没有在任何寄存器中获得任何位来配置回送。
此致
高拉夫
您好、Gaurav、
我还无法在 TRM 中找到 McSPI 的硬件回送模式。
我在 AM335x PRSDK 6.0.0.7中看到一个 McSPI 环回示例:pdk_am335x_1_0_15\packages/ti\drv\spi\examples\mcspiLoopbackApp 此示例的源代码为:pdk_am335x_1_0_15\packages/ti\drv\spi\spi\examples\mspiLoopbackApp src\mspiLoopbackApp 查看此文件内部、我会看到以下注释:
*\brief 此文件包含演示 McSPI 回送的应用程序
*它从数据 I/O 信号传输一些数据模式并接收数据
*来自相同数据 I/O 信号的数据。
/* Mspi 不支持环回模式。 要测试 McSPI 上的环回、
* McSPI 的 Tx 和 Rx 引脚上的接收位都启用
*
此目录包含 AM335x 特定于平台的文件、例如 :pdk_am335x_1_0_15\packages/ti\drv\spi\examples\mcspiLoopbackApp\AM335x\armv7\BIOS。 在此目录中、我只能看到 evmAM335x 和 iceAMIC110的项目文本文件。 但是、我认为应该可以为 skAM335x 添加项目文件:
1.将 mcspi_loopback_arm_evmAM335x.cfg 复制到名为 mcspi_loopback_arm_skAM335x.cfg 的同一目录中的新文件
2.更新 mcspi_loopback_arm_skAM335x.cfg 中的设置:
2.将 MCSPI_Loopback_evmAM335x_armExampleProject.txt 复制到名为 MCSPI_Loopback _skAM335x_armExampleProject.txt 的同一目录中的新文件。
3.更新 MCSPI_Loopback _skAM335x_armExampleProject.txt 中的设置:
4.创建新的 SK 项目:pdkprojectcreate AM335x skAM335x 小 SPI 示例 arm
此致、
弗兰克
您好、Gaurav、
我已验证上述方法是否适用于为 McSPI 环回示例创建新的 SK CCS 项目。
CCS 工程在执行 pdkprojectcreate: pdk_am335x_1_0_15\packages/MyExampleProjects\MyExamples\f4之后放置在这里。 我验证了能否导入 CCS 工程以及工程是否已编译。 遗憾的是、我目前无法访问 SK 来验证构建的正确操作。
我已附加以下文件。 在 SK 上执行程序时、您可能仍需要修改一些设置以了解您观察到的行为。
此致、
弗兰克
e2e.ti.com/.../mcspi_5F00_loopback_5F00_arm_5F00_skAM335x.cfg
e2e.ti.com/.../MCSPI_5F00_Loopback_5F00_skAM335x_5F00_armExampleProject.txt
您好!
我编写了一个用于发送和接收的 SPI 程序。 我物理连接了 D0和 D1线路、但 SPI 不工作。 请检查程序流程、如果缺少任何配置、请告知我。 我要附加 mcspi.c 和 mcspi.h 文件来获取声明和函数定义。
我将在3引脚模式下配置 SPI。
unsigned int a=0;
SPI0ModuleClkConfig();
McSPIPinMuxSetup();
/*重置 McSPI 实例。*/
McSPIReset (SOC_SPI_0_regs);
/*启用芯片选择引脚。*/
McSPICSDisable (SOC_SPI_0_regs);
/*启用主操作模式。*/
McSPIMasterModeEnable (SOC_SPI_0_regs);
//为主控模式执行必要的配置。
McSPIMasterModeConfig (SOC_SPI_0_regs、MCSPI_SINGLE_CH、
MCSPI_TX_RX_MODE、MCSPI_DATA_LINE_COMM_MODE_0、
chNum);
//根据时钟模式配置 McSPI 总线时钟。
McSPIClkConfig (SOC_SPI_0_regs、48000000、24000000、chNum、
MCSPI_CLK_MODE_0);
/*配置字长。*/
McSPIWordLengthSet (SOC_SPI_0_regs、MCSPI_WORD_LENGTH (8)、chNum);
/*将 SPIEN 的极性设置为低。*/
McSPICSPPolarityConfig (SOC_SPI_0_regs、MCSPI_CS_POL_LOW、chNum);
/* SPIEN 线被迫处于低电平状态。*/
McSPICSAssert (SOC_SPI_0_regs、chNum);
/*启用 McSPI 通道进行通信。*/
McSPIChannelEnable (SOC_SPI_0_regs、chNum);
/*强制 SPIEN 线进入非活动状态。*/
McSPICSDeAssert (SOC_SPI_0_regs、chNum);
while (1)
{
//while (!(HWREG (SOC_SPI_0_regs + MCSPI_CHSTAT (0))&(1<<1)));
McSPITransmitData (SPI_base_Add、8、MCSPI_channel_0);
控制台 UtilsPrintf ("a1=%d\n",a);
//while (!(HWREG (SOC_SPI_0_regs + MCSPI_CHSTAT (0))&(1<0)));
A=McSPIReceiveData (SPI_base_Add、MCSPI_channel_0);
控制台 UtilsPrintf ("a=%d"、a);
}
/*禁用 McSPI 通道。*/
McSPIChannelDisable (SOC_SPI_0_regs、chNum);
此致
Gaurav、
我快速查看了您的计划流程。 总体来说还可以。 我有几个问题和看法。
SPI0ModuleClkConfig()和 McSPIPinMuxSetup()您是否创建了 API? 这可能还可以(尤其是对于原型设计和调试)、但我们鼓励将电路板库用于模块时钟和引脚多路复用配置。 请访问 http://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_00_00_07/rtos/index_board.html#board-support。 您是否在函数执行后通过检查存储器映射中的引脚多路复用寄存器来检查您的函数是否应用了正确的引脚多路复用设置?
2、其余的 API 函数来自 CSL、因此您似乎不打算使用 SPI LLD? 这对于裸机应用是可以的。
3.我注意到程序流与 pdk_am335x_1_0_15\packages/ti\cSL\src\IP\mcspi\v0\mcspi.h 文件头中提到的流程之间存在一些细微差异 例如、您启用 CS 断言和取消断言之间的通道。 我认为这些微小的差异不应导致您无法观察任何 SPI 活动。
4.在调用 McSPITransmitData()和 McSPIReceiveData()之前,您不会在循环中轮询 Tx/Rx 状态。 我会使用 McSPIChannelStatusGet ()来添加它。
此致、
弗兰克
弗兰克、
在 CRO 中、这三个引脚(SPI_SCLK、SPI_D0、SPI_D1)上没有活动。
是的、您是对的、我将用于裸机。
我使用的是 AM335X_StarterWare_02_00_01_01、这是我的客户想要的。
我已创建 SPI0ModuleClkConfig()和 McSPIPinMuxSetup()。 您可以在 SKAM335x 板上检查此程序吗? 如果程序流中存在任何差异、您可以修改代码并将其发送给我吗?
在调用 McSPITransmitData()和 McSPIReceiveData()之前,我正在进行轮询,如下所示,我在 CRO 中仍然没有得到任何活动。
while (1)
{
while (!(HWREG (SOC_SPI_0_regs + MCSPI_CHSTAT (0))&(1<<1)));
McSPITransmitData (SPI_base_Add、8、MCSPI_channel_0);
控制台 UtilsPrintf ("a1=%d\n",a);
while (!(HWREG (SOC_SPI_0_regs + MCSPI_CHSTAT (0))&(1<0)));
A=McSPIReceiveData (SPI_base_Add、MCSPI_channel_0);
控制台 UtilsPrintf ("a=%d"、a);
}
此致
高拉夫