工具/软件:Code Composer Studio
大家好、
我将驱动 TLE5012B (SSC 通信)在 SPI 3线模式下使用 TMS320F28035。当我使用仿真模式与 TLE5012B 通信时、没问题。
关于该过程、将 SPI SIMO 引脚设置为输出模式、发送与上图类似的命令。 然后在输入接收数据中设置 SIMO 引脚。没问题。(请参阅下图)
但是、当我使用实数 SPI 3线模式并发送相同的命令时、它始终是高电平。(请参阅下图)
代码如下:
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
大家好、
我将驱动 TLE5012B (SSC 通信)在 SPI 3线模式下使用 TMS320F28035。当我使用仿真模式与 TLE5012B 通信时、没问题。
关于该过程、将 SPI SIMO 引脚设置为输出模式、发送与上图类似的命令。 然后在输入接收数据中设置 SIMO 引脚。没问题。(请参阅下图)
但是、当我使用实数 SPI 3线模式并发送相同的命令时、它始终是高电平。(请参阅下图)
代码如下:
您好!
首先、感谢您的帮助。
我说过的仿真是、将 SPICLK SPISTE SPISIMO 引脚设置为通用 GPIO。 然后根据通信时间序列设置高电平或低电平。
代码如下:
#define SSC_SCK_SET GpioDataRegs.GPASET.bit.GPIO18 = 1;
#define SSC_SCK_RESET GpioDataRegs.GPACLEAR.bit.GPIO18 = 1;
#define SSC_CSQ_SET GpioDataRegs.GPASET.bit.GPIO19 = 1;
#define SSC_CSQ_RESET GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;
#define SSC_DATA_SET GpioDataRegs.GPASET.bit.GPIO16=1;
#define SSC_DATA_RESET GpioDataRegs.GPACLEAR.bit.GPIO16=1;
#define SSC_DATA GpioDataRegs.GPADAT.bit.GPIO16
空 Init5012BGpio (空)
{
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;//将 GPIO17配置为 SPISOMIA
GpioCtrlRegs.GPADIR.bit.GPIO16=1;// 1=输出、0=输入
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;//将 GPIO18配置为 SPICLKA
GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;// 1=输出、0=输入
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;//将 GPIO19配置为 SPISTEA
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;// 1=输出、0=输入
GpioDataRegs.GPASET.bit.GPIO19=1;
EDIS;
}
void data_for_read (void)
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO16 = 0;// 1=输出、0=输入
EDIS;
}
void data_for_Write (void)
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO16=1;// 1=输出、0=输入
EDIS;
}
unsigned int SW = 0;
unsigned int TLE5012B_Read_Angle (void)
{
unsigned char count = 0;
unsigned int add = 0;
unsigned int add_int = 0;
unsigned int read_data = 0;
ssc_sck_reset;
ADD = 0x8021;
SSC_CSQ_RESET;
asm (" NOP ");
asm (" NOP ");
for (计数=0;计数<16;计数++)
{
if (添加0x8000)
{
ssc_data_set;
}
其他
{
ssc_data_reset;
}
ssc_sck_set;
asm (" NOP ");
asm (" NOP ");
ADD = ADM<<1;
ssc_sck_reset;
asm (" NOP ");
asm (" NOP ");
}
ssc_data_set;
asm (" NOP ");
asm (" NOP ");
for (计数=0;计数<16;计数++)
{
Read_data = Read_data <<1;
ssc_sck_set;
asm (" NOP ");
asm (" NOP ");
ssc_sck_reset;
asm (" NOP ");
asm (" NOP ");
data_for_read ();
if (ssc_data)
{
READ_DATA = READ_DATA|0x0001;
}
}
for (计数=0;计数<16;计数++)
{
SW = SW<<1;
ssc_sck_set;
asm (" NOP ");
asm (" NOP ");
ssc_sck_reset;
asm (" NOP ");
asm (" NOP ");
if (ssc_data)
{
SW = SW|0x0001;
}
}
DATA_for_Write();
SSC_CSQ_SET;
asm (" NOP ");
asm (" NOP ");
asm (" NOP ");
asm (" NOP ");
返回 READ_DATA-32768;
}
而且、在数据表中、传输的主 TX 和从 TX 阶段之间的时间为130ns。我在前面提到的图表中、您可以看到时间大约为3us、因此就足够了。 在 仿真中、时间是完全相同的。
我在实际 SPI 三线制模式或采样中获得的代码是否错误?
谢谢、此致!