尊敬的 TI 团队:
我一直在努力处理 Piccolo 28035器件的 SPI 配置。
我使用了无中断 SPI 回送的示例代码、运行良好。 我禁用了环回并将 SIMO 和 SOMI 引脚连接在一起。
这也很好。
然后、我将字符大小更改为8位、而不是16位。 我在 SIMO 线上几乎没有看到任何数据3秒钟。 同时、时钟和 CS/STEA 工作正常。
我的代码如下所示。 您能告诉我问题是什么吗?
包括"DSP28x_Project.h"//器件头文件和示例包含文件
//此文件中找到的函数的原型语句。
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、安全装置、启用外设时钟
//此示例函数位于 DSP2803x_SYSCTRL.c 文件中。
InitSysCtrl();
//步骤2. 初始化 GPIO:
//此示例函数位于 DSP2803x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();//针对此示例跳过
//仅为 SPI-A 功能设置 GP I/O
//此函数位于 DSP2803x_SPI.c 中
InitSpiaGpio();
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 DSP2803x_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 DSP2803x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 DSP2803x_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++;
DELAY_US (10000);
}
}
//步骤7. 在此处插入所有本地中断服务例程(ISR)和函数:
空错误(空)
{
_asm (" ESTOP0");//测试失败!! 停下来!
适用于(;);
}
void SPI_init()
{
SpiaRegs.SPICCR.all =0x0007;//复位打开、上升沿、8位字符位
SpiaRegs.SPICTL.ALL =0x0006;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR = 0x007F;
SpiaRegs.SPICCR.all =0x0087;//从复位中撤回 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;
}