主题中讨论的其他器件:TMDS570LS31HDK、 HALCOGEN
您好!
此问题与有关 SPI 通信的多项测试有关。
第一个成功测试基于 TMS570LS12x。 SPI1和 SPI3所涉及的测试基于"Example_SPI_Master_Slave.c"代码。 URL 的链接是 https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/902181。
第二个失败测试基于我电路板上的 TMS570LS12x 和 AD7705。 URL 的链接是 https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/907453。
为了找出第二次测试的原因、我在 TMS570LS12x launchpad 中的 SPI1 (作为第一次测试等轮询模式下的主器件)和 TMDS570LS31HDK 中的 SPI2 (作为中断模式下的从器件、如第一次测试)之间进行了第三次测试。 根据主器件的观测接收缓冲器、每一个数据为65535、如下所示。
SPI1和 SPI2的配置如下所示。
下面是在 TMS570LS12x 上运行的 SPI1的测试代码。
//*用户代码开始(0)*// //*用户代码结束*// * Include Files */ #include "sys_common.h" /*用户代码开始(1)*/ #include "spi.h" #include "Gio.h" //*用户代码结束*// @fn void main (void) *@简要应用程序 main 函数 *@注意此函数默认为空。 * *此函数在启动后调用。 *用户可以使用此函数来实现应用程序。 */ *用户代码开始(2)*/ #define DELAY_VALUE 1000000 uint16 TX_Data_Master[16]={0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08、0x09、0x0A、 0x0B、0x0C、0x0D、0x0E、0x0F、 0x10}; uint16 TX_Data_Slave[16]={0x11、0x12、0x13、0x14、0x15、 0x16、0x17、0x18、0x19、0x1A、 0x1b、0x1C、0x1D、0x1E、0x1F、 0x20}; uint16 RX_Data_Master[16]={0}; uint16 RX_Data_Slave[16]={0}; uint16 cmd=0; //用户代码结束* / int main (void) { //用户代码开始(3)*/ int i; spiDAT1_t 数据通信 fig1_t; dataconfig1_t.CS_hold = false; dataconfig1_t.WDEL = true; dataconfig1_t.DFSEL = SPI_FMT_0; dataconfig1_t.CSNR = 0x01;/0xFE; gioInit(); /*根据 GUI 配置初始化 SPI 模块 * SPI1 -主器件(SIMO、SOMI、CLK、CS0)@TMS570LS12x 轮询模式 * SPI2 -从机(SIMO、SOMI、CLK、CS0)@TMDS570LS31HDK 中断模式 *这是 SPI1的主器件 ***/ spiInit(); while (1) { /*通过轮询模式启动 SPI1发送和接收*/ TransmitAndReceiveData (spiREG1、&dataconfig1_t、16、TX_Data_Master、RX_Data_Master); while (SPI_completed=SpiRxStatus (spiREG1)); if (RX_Data_Master[15]=0x20) { RX_Data_Master[15]=0xff; gioToggleBit (gioPORTB、1); } 其他 { gioSetBit (gioPORTB、2、1); // while (1); } } for (i=0;i下面是在 TMDS570LS31HDK 上运行的 SPI2的测试代码。
//*用户代码开始(0)*// ////*用户代码结束*// * include Files */ #include "sys_common.h" //*用户 代码开始(1)*/#include "gio.h"#include "het.h"#include "spi.h"#include "RTI.h"// @主 函数为 void n *@ @void n 默认为空。 * *此函数在启动后调用。 *用户可以使用此函数来实现应用程序。 */ *用户代码开始(2)*/ #define DELAY_VALUE 1000000 uint16 TX_Data_Master[16]={0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08、0x09、0x0A、 0x0B、0x0C、0x0D、0x0E、0x0F、 0x10}; uint16 TX_Data_Slave[16]={0x11、0x12、0x13、0x14、0x15、 0x16、0x17、0x18、0x19、0x1A、 0x1b、0x1C、0x1D、0x1E、0x1F、 0x20}; uint16 RX_Data_Master[16]={0}; uint16 RX_Data_Slave[16]={0}; uint16 cmd=0; //用户代码结束* / int main (void) { //用户代码开始(3)*/ int i; spiDAT1_t 数据通信 fig1_t; dataconfig1_t.CS_hold = false; dataconfig1_t.WDEL = true; dataconfig1_t.DFSEL = SPI_FMT_0; dataconfig1_t.CSNR = 0x01;/0xFE; gioInit(); hetInit(); /*通过 CPSR 启用 CPU 中断*/ _enable_IRQ (); /*初始化 RTI */ rtiInit(); /*启用 RTI 比较0通知*/ rtiEnableNotification (rtiNOTIFICATION_COMPARE0); /*开始计数器*/ rtiStartCounter (rtiCOUNTER_BLOCK0); /*这是从器件 SPI2。 * spiInit(); while (1) { /*通过中断模式启动 SPI2发送和接收*/ SendspiAndGetData (spiREG2、&dataconfig1_t、16、TX_Data_Slave、RX_Data_Slave); while (cmd==1); CMD=0; } /*用户代码结束*/ 返回0; } /*用户代码开始(4)*/ void spiEndNotification (spiBASE-t * SPI) { IF (SPI_completed=SpiRxStatus (SPI)) { if (RX_Data_Slave[15]=0x10) { RX_Data_Slave[15]=0; gioToggleBit (hetPORT1、27); CMD==1; 返回; } 其他 { gioSetBit (hetPORT1、17、1); 返回; } }else if (SPI_completed=SpiTxStatus (SPI))(否则(SPI_completed=SpiTxStatus (SPI) { gioToggleBit (hetPORT1、5); 返回; } 其他 { gioSetBit (hetPORT1、25、1); 返回; } } void rtiNotification (uint32通知) { gioToggleBit (hetPORT1,29); }/* 用户代码结束*/下面 显示了连接 TMS570LS12x Launchpad 和 TMDS570LS31HDK 的图片。
请帮助我找出我的错误或遗漏的东西。
此致
Datïan μ A



