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/TMS320F28374D:SPI 问题

Guru**** 2581345 points
Other Parts Discussed in Thread: TMS320F28374D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/652156/ccs-tms320f28374d-spi-problem

器件型号:TMS320F28374D
主题中讨论的其他器件: C2000WARE

工具/软件:Code Composer Studio

你(们)好
我已经使用微控制器 TMS320F28374D 制作了一个 PCB+组件、以便使 SPI 能够与其他器件通信。 我使用 C2000Ware、编写了以下代码、非常简单、但无法正常工作。


//包含的文件
#include "driverlib.h"
#include "device.h"

//函数原型
void initSPIAMaster (void);
void configGPIO (void);

//主函
void main (void)

//初始化设备时钟和外设
device_init();

//禁用引脚锁定并启用内部上拉。
DEVICE_initGPIO();

//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
interrupt_initModule();

//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
interrupt_initVectorTable();

//为外部回送配置 GPIO。
configGPIOs();

//将 SPI A 设置为主器件,将其初始化为 FIFO 模式
initSPIAMaster();

//启用全局中断(INTM)和实时中断(DBGM)
EINT;
ERTM;

//永久循环。 暂停或放置断点以观察缓冲区。
while (1)

SPI_writeDataNonBlocking (SPIB_BASE、0xAA);
DEVICE_DELAY_US (50000);

//函数将 SPI A 配置为主器件并启用 FIFO。
void initSPIAMaster (void)

//必须在配置 SPI 之前将其复位
SPI_disableModule (SPIB_BASE);

// SPI 配置。 使用500kHz SPICLK 和8位字大小。
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、
SPI_MODE_MASTER、50000、8);
SPI_disableLoopback (SPIA_BASE);
SPI_setEmulationMode (SPIA_BASE、SPI_emulation_free_run);

//配置完成。 启用模块。
SPI_enableModule (SPIB_BASE);

//为外部回送配置 GPIO。
void configGPIO (void)

// GPIO17是 SPISOMIA。
GPIO_setMasterCore (17、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_17_SPISOMIA);
GPIO_setPadConfig (17、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (17、GPIO_QUAL_异 步);

// GPIO16是 SPISIMOA 时钟引脚。
GPIO_setMasterCore (16、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_16_SPISIMOA);
GPIO_setPadConfig (16、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (16、GPIO_QUAL_异 步);

// GPIO19是 SPISTEA。
GPIO_setMasterCore (19、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_19_SPISTEA);
GPIO_setPadConfig (19、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (19、GPIO_QUAL_异 步);

// GPIO18是 SPICLKA。
GPIO_setMasterCore (18、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_18_SPICLKA);
GPIO_setPadConfig (18、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (18、GPIO_QUAL_异 步);

//文件结束


使用示波器、我每500ms 测量一次 SPICLKA 的输出、似乎是正确的、我在上面看到8个时钟周期。 但是,SPISIMOA 我没有得到任何脉冲。 如果有任何帮助或意见,我将不胜感激。

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

    您好、Ehsan、

    我注意到、在您的代码中、您有时会写入 SPIA_BASE、但有时会使用 SPIB。  也许这会对您的问题产生影响。  我建议修复该问题并查看问题是否得到解决。


    谢谢、
    Brett