主题中讨论的其他器件: ADS1298
工具/软件:Code Composer Studio
我正在尝试使用 SPIA 在 TMS320F28377和 ADS1298之间建立连接。 我目前正在独立测试 TMS、以确保它通过重复传输0x24实现我所期望的通信。 为此,我创建了函数 init_spi(),以确保将我需要的 GPIO 引脚设置为输出,将引脚多路复用器设置为所需的 SPI,并启用外设时钟。 在执行此操作时、我可以确认/CS 工作正常、时钟也工作正常。 但是、数据不会在环路上传输。 相反、我只接收0 (我通过勤奋的模拟发现板查看此情况)。 我检查了寄存器状态、发现 INTFLAG 和 BUFFULL 被保持在高电平。 我想这会导致数据锁存。 因此、我设置了一个 while 条件、等待该位清零。 当我运行代码时、我意识到它没有触发我的暂停条件。 然后、我注意到:
变量和寄存器具有不同的值。 几分钟后、我决定验证寄存器的地址(我右键单击 BUFFULL 并选择"查看地址处的存储器")、结果如下:
请注意、这里的地址与我的变量的地址不同。 我已经添加了代码和项目窗口的副本、以帮助您确定发生这种情况的原因。 请提供任何帮助。
附录:
(二
这是我到目前为止拥有的代码:
/********
*包括
(二 /
#include "F28x_Project.h"
#include "sysctl.h"
#include "spi.h"
#include "cputimer.h"
#include "gpio.h"
#include "pin_map.h"
/********
*定义
(二 /
#define CPU_CLK 200000000
#define SPI_Clk 30000000
#define SPI_bps 500
/********
*函数-原型
(二 /
void init_spi();
/********
*主函数
(二 /
int main()
{
// EALLOW;
// CPUTimer_selectClockSource (CPUSYS_base、CPUTIME_CLOCK SOURCE_SYS、CPUTIME_CLOCK_PRER_1);
// EDIS;
/*设置时钟
* CLKSRCCTL1、2、3
* CPUSYSREGS
*
*
init_spi();
// GPIO_setDirectionMode (123、GPIO_DIR_MODE_OUT);
// GPIO_writePin (123、1U);
while (1)
{
SPI_writeDataNonBlocking (SPIA_BASE、0x24);
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG = 1);
NOP;
NOP;
NOP;
NOP;
}
}
/********
*函数-声明
(二 /
空 init_spi()
{
//GPIO MUX 配置
GPIO_setDirectionMode (58、GPIO_DIR_MODE_OUT); // SPI-A-SIMO (引脚58)设置为输出
GPIO_setDirectionMode (61、GPIO_DIR_MODE_OUT); // SPI-A-CS (引脚61)设置为输出
GPIO_setDirectionMode (60、GPIO_DIR_MODE_OUT); // SPI-A-CLK (引脚60)设置为输出
GPIO_setPinConfig (GPIO_58_SPISIMOA); // PIN58多路复用器配置设置为 SPI-A-SIMO
GPIO_setPinConfig (GPIO_61_SPISTEA); // PIN61多路复用器配置设置为 SPI-A-CS
GPIO_setPinConfig (GPIO_60_SPICLKA); // PIN60多路复用器配置设置为 SPI-A-CLK
//sysctl_resetPeripheral (sysctl_Periph_CLK_SPIA);
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_SPIA);
SPI_setConfig (SPIA_BASE、SPI_Clk、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、SPI_bps、 8);
//SPI_setConfig (SPIA_BASE、100000000、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、50000、16);
SPI_enableModule (SPIA_BASE);
}
以下是我的项目窗口的屏幕截图:




