如何使用ADSP BF53x的SPI接口[学习心得]
0赞SPI 接口是4 线串口,可以连接SPI FLASH,SPI接口的AD,DA等等。ADSP-BF53x的SPI接口支持主机模式和从机模式,它有7个SPI从机片选,在主机模式下,它同时可以挂载7个SPI设备,还可以在主机模式或从机模式下进行BOOT 启动。那么,如何使用BF53x的SPI接口跟其他设备进行通信呢?
首先是硬件电路的连接,如下图为BF533作为从机的电路连接,只要将主机和从机的SPI接口互相连接即可,注意MOSI端口还是连到MOSI端口,而不是MISO端口。

下图则为BF533作为主机实现一主多从通信模式的电路连接图,MISO,MOSI和SCK分别连接到各个从机的相应端口,PF口连接到各个从机的使能端口SPISS,BF533如果想跟哪个从机通信,就使能该从机的SPISS端口对应的PF口,然后就能进行相应通信啦。

然后是软件程序的设计,要实现完整的SPI通信,主机和从机都得进行相应的程序设计,今天主要是对主机程序设计的学习,以下是BF533的SPI主机初始化程序:
void SPI_init(void)
{
*pSPI_BAUD=2; //配置速率为1/4系统时钟 SPI速率= SCLK/2*SPI_BAUD
*pSPI_FLG |=FLS2; //选择SPISEL2接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式为手动片选模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}
下面对其进行详细解释,并总结SPI主机设备的使用步骤:
1. 设置波特率
*pSPI_BAUD=2;该语句的作用是配置速率为1/4系统时钟,当SPI_BAUD为不同值时,对应的波特率如下表所示:

2. 使能从机设备
*pSPI_FLG |=FLS2; 由下表可知该语句的作用是选择SPISEL2 接口,对应的端口为PF2端口,也就是说,从机设备的使能端口SPISS连接到了BF533的PF2口。

3. 设置SPI接口的控制方式,主要是通过设置SPI_CTL寄存器,该寄存器是设置SPI接口的一个非常重要的寄存器,寄存器的具体功能如下图:

下面简单介绍几个比较常用的控制位:第14位为SPI使能控制位,当要使用SPI功能时,该位一定要置1;第12位为SPI设备的模式控制位,通过该位设置设备为主机或者从机;第10位为SPI通信的传输模式和操作模式,主要用于设置SPI通信模式的手动和自动属性;第1位和第0位是SPI通信传输的标志位,可以用来判断数据传输的完成与否;
*pSPI_CTL = 0x1001|CPHA| CPOL; 该语句的功能是设置设备为SPI通信中的主要设备,配置SPI模式为手动片选模式,并且当对SPI_TDBR进行写操作时启动SPI数据传输,并且当SPI_TDBR为空时进入中断处理。
4. 最后一步是使能设备的SPI功能
*pSPI_CTL = (*pSPI_CTL | SPE);该语句的功能是置位SPI_CTL寄存器中的SPE位,使能SPI功能。如果要进行SPI通信,该位是一定要使能的。
以上是BF533的SPI接口初始化的程序设计,只要熟悉各个寄存器各个位的功能,就能进行相应的设置啦。SPI接口初始化后就能通过对数据寄存器的读写实现SPI通信啦,以下是相关程序,首先是写数据的程序:
*pSPI_FLG &= ~FLG2; //将SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));//查看SPI传输状态是否完成
*pSPI_TDBR = 0x55; //将数据送入SPI传输数据寄存器
*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输
然后是读数据的程序:
*pSPI_FLG &= ~FLG2;
while(*pSPI_STAT & RXS);//查看SPI传输状态是否有数据需要接收
i = *pSPI_RDBR; //读取数据
*pSPI_FLG |= FLG2;
通过以上学习,基本上可以了解BF533的SPI接口是如何使用的。以上是本人学习SPI接口的一点心得,仅供参考。。。
