
是不是Serial Periphieral Interface , 串行外设接口
RC32332/4中的SPI接口:
SPI四由个引脚:spi_miso,spi_mosi,spi_sck,spi_ss_n。
SPI支持RC32332与外部设备(E2ROM etc...)全双工模式的,同步串行数据传输。
主设备通过spi_mosi发送数据给从设备,从设备通过主设备的spi_miso发送数据给主设备,两个方向的传输可以同时同步进行。
主设备发送数据:
将发送数据写入SPI Data Register(SPDR),这个数据将被移到shift register后被立即发送,在8个串行时钟周期后,SPI标识位(SPI Flag,SPIF)被设置,表示数据传输完成。在进行下一次传输前,必须通过读取SPI 状态寄存器(SPI Status Register),清除SPIF位和SPDR内容。对于打开SPI中断,在传输完成后,将会产生SPI中断信息。
SPI四个寄存器,基地址0x1800 0900
SP_Clock Divisor/Prescalar Register(SPCNT) offset:0x00
SP_Control Register SPCNTL 0x04
SP_Status Register (SPSR) 0x08
SP_Data I/O Register (SPDR) 0x0C
SPCNT:设置spi_sck=system clock / [2*(SPCNT+1)*SPR]
SPCNTL:
SPIE:1-在SPIF设1时使能SPI 卡中断0-关SPI中断(默认)
SPE:1-打开SPI,0-关闭SPI(默认)
MSTR:1-SPI主模式0-保留使用,RC32334/2只能为SPI主模式
CPOL:时旅链钟级性,0-当传输时spi_sck为逻辑0(Default),1-当传输时spi_sck为逻辑1.
CPHA:
SPR:00除以2(Default)01除以4;10除以1611除以32
SPSR:
SPIF:传输完成标致,0-空闲,为传输做好准备,1-数据传输完成,被隐式设置。
WCOL:写冲突,如果为1,则出现写冲突,此时的写入将被忽略。
MODF:Master Error Flag,置1说明出现违例。
SPDR:
数据寄存器,由主设备发起数据传输,当数据传输完成,主从SPI设备的SPIF状态位都将被置1。
当要发送汪埋数据时,向此寄存器写入数据,当数据传输完成后,SPIF状态寄存器被置1,读取SPSR,而后从此寄存器读取接收到的数据。
主模式编程范例:
系统时钟频率67MHz下初始一个2MHz的SPI接口。
1.设置SPCNT寄存器为0x0000 0008,设置SPI时钟为3.7MHz
2.设置SPCR寄存器为0x0000 00F0,设置SPIE=1,使能SPI中断,SPE=1使能SPI接口。MSTR=1,这个通常设为1。CPOL=0时钟为低电频表示SPI非激活,CPHA=0:在第一个活动沿采样数据。SPR=0,将内部时钟二分,则SPI时钟为3.7/2=1.85MHz
3.设置中断掩码寄存器14(0x1800_05E4)为0x0000 0001,打开系统SPI中断服务。
4.读取SPSR和SPDR寄存器,清除SPIF位。
5.设置PIO中的spi_ss_n的输出模式,并设置为低电频。
6.将要发送的数据写入SPDR寄存器。
7.等待SPI中断产生,中断服务程序完成以下步骤
8.读取SPSR,确保没有任何错误发生。
9.读取SPDR寄存器,获取SPDR寄存器的内容,同时重置SPSR中的SPIF位。
10.设置SPI中断重置寄存器(0x1800_05E8)为0x0000_0001,清除SPI中断Pending寄存器。
11.如果完成了命令系列,拉高spi_ss_n引脚。
12.重复5-11的步骤,完成新一伦的命令。
////
初始化SPI应该注意几点内容:
1.正确选择主机或从机,以及工作模式(极性),数据传输率。
2.注意传送字节的顺序,是低位优先(LBS First)还是高位优先(MSB First)。
3.正确设置MOSI和MISO接口的困镇蚂输入,输出方向,输入引脚上拉电阻,可以节省总线上的吊高电阻。
您好,您是想问三线spi和四线spi转换的区别是什么吗?三线斗咐spi和四线spi转换的区空雹纯别是速度不同。三线spi转换速度较快,而四线spi转换速度较慢,程序较为复杂,肆燃所以三线spi和四线spi转换的区别是速度不同。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)