工具/软件:Code Composer Studio
您好!
我有两个 TMS320C2000实验板套件、它们分别为28335和 B。通过使用 EPWMSYNCO I/O 在两个电路板上应用同步的7kHz PWM 中断、并且效果良好。
电路板进入 PWM 中断后、它将在完成一些计算后通过 SPI 发送16位数据(波特率:9.375MHz)。 供参考、SPI 传输前的计算时间约为30us。
对于 B 板、它会在进入 PWM 中断后立即等待 SPI 数据接收。
在16位数据传输和同步7kHz PWM 中断的情况下、我认为 B 板接收 PWM 中断中 SPI 数据的时间应该足够长。
但是、我发现 B 板需要中断的整个时间来等待数据。 这是从示波器测量的时序。
B 板接收到的数据也不完整。 缺少一些数据点。
SPI 设置如下:
1) 1)电路板:
void SPI_init()
{
SpiaRegs.SPICCR.bit.SPISWRESET = 0;//在更改 SPI 配置之前清除此位
SpiaRegs.SPICCR.ALL = 0x000F; //复位打开,写入:上升沿;读取:下降沿
//无回路,16位字符位
// 0000 1111
SpiaRegs.SPICTL.ALL = 0x0006; //启用主控模式、正常相位(无延迟半周期)、
//启用 TALK、禁用 SPI int。
// 0000 0110
SpiaRegs.SPIBRR = 0x0000; // LSPCLK/4、37.5MHz/4 = 9.375MHz
SpiaRegs.SPICCR.ALL = 0x008F; //从复位中撤回 SPI、1100 1111
SpiaRegs.SPIPRI.bit.FREE = 1; //设置断点以使断点不会干扰 xmission
}
void SPI_xmit (uint16 A)
{
volatile UINT16 dummy_x = 0;
GpioDataRegs.GPACLEAR.bit.GPIO19=1;
SpiaRegs.SPITXBUF=A;
while (SpiaRegs.SPISTS.bit.INT_flag = 0){}
dummy_x = SpiaRegs.SPIRXBUF;
GpioDataRegs.GPASET.bit.GPIO19=1;
}
2) 2) B 板:
void SPI_init()
{
SpiaRegs.SPICCR.bit.SPISWRESET = 0;//在更改 SPI 配置之前清除此位
SpiaRegs.SPICCR.ALL = 0x000F; //复位打开,写入:上升沿;读取:下降沿
//无回路,16位字符位
// 0000 1111
SpiaRegs.SPICTL.ALL = 0x0002; //启用从机模式、正常相位(无延迟半周期)、
//启用 TALK、禁用 SPI int。
// 0000 0010
SpiaRegs.SPIBRR = 0x0000; // LSPCLK/4、37.5MHz/4 = 9.375MHz
SpiaRegs.SPICCR.ALL = 0x008F; //从复位中撤回 SPI、1100 1111
SpiaRegs.SPIPRI.bit.FREE = 1; //设置断点以使断点不会干扰 xmission
}
void SPI_receive()
{
while (SpiaRegs.SPISTS.bit.INT_flag = 0){}
drive_data = SpiaRegs.SPIRXBUF;
}
由于我研究中的应用、PWM 中断是必需的、因此此处不考虑 SPI 数据接收的中断。
是否有人有办法解决这个问题? 感谢您的任何帮助。
谢谢。 )
Hung-Yen


