目录
CH549/CH548拥有1个硬件SPI接口,支持主/从模式,这里只讨论主模式。另外,SPI主模式只支持模式0和模式3,考虑常用性,只设置为模式0。
1. 时钟频率
CH549/CH548通过寄存器SPI0_CK_SE(默认为0x20)设置频率,最高可达系统主频的一半。datasheet上没有说明计算公式,猜测是
freq = Fsys / (SPI0_CK_SE + 1)
2. IO设置
P1_MOD_OC &= ~(bMOSI | bSCK);
P1_DIR_PU |= (bMOSI | bSCK); //SCS, MOSI, SCK设推挽输出
P1_MOD_OC |= bMISO; //MISO 上拉输入
P1_DIR_PU |= bMISO;
这里CS脚用的是P1.4,实际可以换为任意IO,SCS功能是用于从模式。
3. SPI0_SETUP设置
主模式下有效的位:
一般情况下不使用中断,一般为MSB高位在前,所以这些位都为0.
4. SPI0_CTRL
设置MOSI和SCK为输出(位6和位5设置为1),模式0(位3设置为0),三线模式(位2设置为0)
SPI0_CTRL = (bS0_MOSI_OE | bS0_SCK_OE);
5. 读写数据
SPI0_DATA = (wrBuf != NULL) ? wrBuf[i] : 0xff;
while(S0_FREE == 0);
if(rdBuf != NULL)
rdBuf[i] = SPI0_DATA;
SPI是全双工,所以读写同步完成。SPI0_DATA寄存器是两个物理上分开的 FIFO,读操作对应接
收数据 FIFO;写操作对应发送数据 FIFO。
S0_FREE是寄存器SPI0_STAT的位3,可位寻址