SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;
相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。
但是关键在于在MSP430中的描述与常规就不同了(见MSP430用户手册的描述)
我配置SPI的程序如下:
void SPI_init()
{
U0CTL =CHAR+SYNC+MM+SWRST; //8位SPI,SPI模式,主机模式,保持在复位状态
U0TCTL =CKPH+SSEL1+SSEL0+STC; //时钟源为MCLK,3线模式;
U0BR0 =0x002;
U0BR1 =0x000; //波特率设定
U0MCTL =0x000; //调整寄存器没有调整;
ME1 =USPIE0; //打开SPI使能
U0CTL &=~SWRST; //关复位
}
经过实验
U0TCTL =CKPH+SSEL1+SSEL0+STC;
U0TCTL =CKPL+SSEL1+SSEL0+STC;
两种配置都行。
在SST25V016B中的时钟描述中说Mode0,Mode3,都支持
即支持 CKPH CKPL
0 0
1 1
即两位都选或都不选
显然于上述结果矛盾