系统采用ST12C5A60AD(外挂24M晶振)与STC12C5620AD(外挂16M晶振)实现SPI通讯传递数据。
其中60AD为从机:
void SPI_slave(void)
{
SPCTL = 0;
SPDAT = 0;
SPSTAT= 0XC0;
SPCTL = 0xED;
IP2 |= 0x02;
IP2H |= 0x02; //优先级提高到第一级
}
5620AD配置为主机:
void SPI_master(void)
{
SPCTL = 0;
SPDAT = 0;
SPSTAT= 0xc0;
SPCTL = 0xfd;
SPSTAT = SPIF;
}
两个单片机的SPI端口都设置为准双向口模式,
在通讯中发现一个现象,就是数据传输的时候:如果传输的数据是奇数,最高位被置1,传输的数据时偶数,最高位被清0
将LSB改为MSB后SCK信号都产生不了,看了数据手册实在想不明白是怎么回事,请高手指点。
用逻辑分析仪读各信号逻辑和数据都是正确的。 |