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.
工具/软件:Code Composer Studio
大家好、
我尝试将 SPI-C 与 TMS320F2837xD 上的 GPIO50、GPIO51、GPIO52和 GPIO53搭配使用
首先、我在 controlSUITE 中的文件夹"v190"中提供名为"SPI_LOOP_CPU1"的示例代码(如果有要求、我可以帮助找到该代码。 也添加到末尾、无变化)
配置为 GPIO16、GPIO17、GPIO18和 GPIO19上的 SPI-A。 当代码被烧断时、我可以看到 CLK 信号、它工作正常。 我可以更改引脚、如果我使用端口 A、则仍然可以正常工作
但是、当根据 SPI-C 使用 GPIO50、GPIO51、GPIO52和 GPIO53进行配置时、它不起作用。 我要做的是更改 GPIO init 文件上的 GPIO、并使用"SpicRegs"而不是"SpiaRegs"。
我检查了以下情况:示例代码(SPICCR、SPICTL、SPIBRR、SPICCR、SPIPRI、 SPITXBUF、SPIFFTX、SPIFFRX 和 SPIFFCT)应具有与端口相关的差异、但"高速 SPI"除外、此时我不感兴趣、并且已取消标记(SPICCR 位#5为零)
请告诉我您的建议。
谢谢、
Okan
//######################################################################################################################
//文件:example_2837xDSpi_FFDLB.c
//标题:SPI 数字环回程序。
//
//! addtogroup cpu01_example_list
//!
#include "F28x_Project.h"//设备头文件和示例 include 文件
//此文件中找到的函数的原型语句。
//__interrupt void ISRTimer2 (void);
void delay_loop (void);
void SPI_xmit (uint16 a);
void SPI_Fifo_init (void);
void SPI_init (void);
void 错误(void);
void main (void)
{
uint16 sdata;//发送数据
uint16 RDATA;//接收的数据
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
InitSysCtrl();
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();//针对此示例跳过
//仅为 SPI-A 功能设置 GP I/O
//此函数位于 F2837xD_SPI.c 中
InitSpiaGpio();
//步骤3. 清除所有_interrupts 并初始化 PIE 矢量表:
//禁用 CPU __interrupts
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE __interrupts 和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是__interrupt
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
InitPieVectTable();
//步骤4. 初始化器件外设:
SPI_Fifo_init();//初始化 SPI FIFO
SPI_init();// init SPI
//步骤5. 用户特定代码:
//此示例中不使用中断。
sdata = 0x0000;
for (;;)
{
//发送数据
SPI_xmit (sdata);
//等待数据被接收
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
//检查已发送的数据
RDATA = SpiaRegs.SPIRXBUF;
if (RDATA!= sdata) error();
sdata++;
}
}
//步骤7. 在此处插入所有本地中断服务例程(ISR)和函数:
void delay_loop ()
{
长 I;
对于(i = 0;i < 1000000;i++){}
}
空错误(空)
{
asm (" ESTOP0");//测试失败!! 停下来!
适用于(;);
}
void SPI_init()
{
SpiaRegs.SPICCR.all =0x000F;//复位打开、上升沿、16位字符位
SpiaRegs.SPICTL.ALL =0x0006;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR.ALL =0x007F;
SpiaRegs.SPICCR.all =0x009F;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
}
void SPI_xmit (uint16 A)
{
SpiaRegs.SPITXBUF=A;
}
void SPI_Fifo_init()
{
//初始化 SPI FIFO 寄存器
SpiaRegs.SPIFFTX.All=0xE040;
SpiaRegs.SPIFFRX.All=0x2044;
SpiaRegs.SPIFFCT.All=0x0;
}
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
您好、Okan、
在 CCS 中、当您启动调试会话时、您将看到 "Registers"窗口。 您应该能够在其中找到 SpicRegs。 我会检查那里、以确保在您更改代码后确实正确配置了 SPI 寄存器。
另一个潜在问题可能是引脚多路复用器配置不正确。 如果您可以发布该代码片段、我们可以查看。