本文主要是介绍CH549/CH548学习笔记5 - SPI主模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1. 时钟频率
2. IO设置
3. SPI0_SETUP设置
4. SPI0_CTRL
5. 读写数据
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,可位寻址
这篇关于CH549/CH548学习笔记5 - SPI主模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!