28035 SPI使用笔记
先插图一张,来自应用手册的配置步骤:
**
Step 1
**: 将SPI外设复位 SPISWRESET=0,在复位状态下可以更改SPI的寄存器。
SpiaRegs.SPICCR.bit.SPISWRESET=0;
**
Step 2
1、 按照实际需求配置SPI模式。
配置主从模式,这里选择主机模式
SpiaRegs.SPICTL.bit.MASTER_SLAVE=1; //0:Slave 1:Master
2、设置相位极性 a、SpiaRegs.SPICCR.bit.CLKPOLARITY=?;
极性:SPI在闲置的时候,时钟总线的电平。
SpiaRegs.SPICCR.bit.CLKPOLARITY=1; //总线闲置为高电平
``
SpiaRegs.SPICCR.bit.CLKPOLARITY=0; //总线闲置为低电平
b、SpiaRegs.SPICTL.bit.CLK_PHASE= ? ;
相位:SPI在采样数据输入或输出的时候选择在时钟前沿或者后沿(上升沿与下降沿)
当在(时钟极性为低前沿采样)时,意味着在上升沿的时候会发生:主机获取从机输出以及主机输出从机输入,而每个bit数据移位到发送 寄存器的时刻是在下降沿开始后。
0:前沿 1:后沿
3、时钟设置
因为28035的SPI时钟频率不能大于LSPCLK/4,所以分两段设置频率。
LSPCLK为低速外设的时钟,由系统时钟SYSCLKOUT (一般设置60M)分频得到,在 SysCtrlRegs.LOSPCP_BITS.LSPCLK[2:0]中设置, 在这里我设置了4分频(系统默认)。那么LSPCLK的频率就是15Mhz
设置波特率大概是195000bps
SpiaRegs.SPIBRR = 76; // 60M/4 / (76+1) = 194805.2
4、设置发送接收字符的长度(bit)
SpiaRegs.SPICCR.bit.SPICHAR=?;
5、清楚标记位
SpiaRegs.SPISTS.all=0;
6、配置FIFO
//配置发送FIFO
SpiaRegs.SPIFFTX.bit.SPIRST=1; //SPI FIFO可以恢复发送或接收。对SPI寄存器位没有影响。
SpiaRegs.SPIFFTX.bit.TXFFIENA=1; //启用了SPI FIFO增强。
SpiaRegs.SPIFFTX.bit.TXFIFO=1; //
SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1; //清除中断位
//配置接收FIFO
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; //清除RXFFOVF位
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; //清除中断标志
SpiaRegs.SPIFFRX.bit.RXFFIL=0x1f; //复位值
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1; //复位接收FIFO
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; //清除中断标志
SpiaRegs.SPIFFRX.bit.RXFFIL=0x1f; //复位值
SpiaRegs.SPIFFCT.all = 0x0000;
7、开启四线模式
SpiaRegs.SPICTL.bit.TALK=1;
8、不受仿真断点闲置
SpiaRegs.SPIPRI.bit.FREE = 1;
Step 3、停止复位操作
SpiaRegs.SPICCR.bit.SPISWRESET = 1;