STC8H8K64 SPI从机 接收一个字节时间超长
SPI 当作从机 接收数据
SS_2 平时低电平,接收到一个字节 ,变高字节。 然后再低电平准备接收下一个。
void SPI_INIT(void)
{
// P_SW1 = 0x00; //SS/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
P_SW1 = 0x04; //SS_2/P2.2, MOSI_2/P2.3, MISO_2/P2.4, SCLK_2/P2.5
//P_SW1 = 0x08; //SS_3/P5.4, MOSI_3/P4.0, MISO_3/P4.1, SCLK_3/P4.3
//P_SW1 = 0x0c; //SS_4/P3.5, MOSI_4/P3.4, MISO_4/P3.3, SCLK_4/P3.2
SPCTL = 0x40; //使能SPI从机模式
SPSTAT = 0xc0; //清中断标志
}
u8 SPI_receive(void)
{
while (!(SPSTAT & 0x80)); //查询完成标志
SPSTAT = 0xc0; //清中断标志
//SPDAT = SPDAT; //将接收到的数据回传
return SPDAT;
}
while(1)
{
//test_display();
RE2_BUSY_L; // SS_2=0;
RevData1=SPI_receive(); // 接收一个字节
DisplayHex(RevData1);
RE2_BUSY_H; // SS_2=1
LED=1; // LED
P34=1; // 逻辑分析仪查看
//RE2_BUSY_L;
delay_ms(200);
LED=0;
P34=0;
//RE2_BUSY_H;
delay_ms(200);
}
这是逻辑分析抓 的数据,接收一个字节,P34应该马上就有信号
逻辑分析仪看到100多毫秒才有信号
是我自己弄错了,发现问题了。
while(1)
{
//test_display();
RE2_BUSY_L; // SS_2=0;
RevData1=SPI_receive(); // 接收一个字节
//DisplayHex(RevData1); // 这个函数 占了大量时间
RE2_BUSY_H; // SS_2=1
LED=1; // LED
P34=1; // 逻辑分析仪查看
//RE2_BUSY_L;
delay_ms(200);
LED=0;
P34=0;
//RE2_BUSY_H;
delay_ms(200);
} :handshake
页:
[1]