ADI Blackfin DSP处理器-BF533的开发详解7:SPI接口的驱动和应用(含源代码)
创始人
2024-03-28 16:15:19
0

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

接口功能介绍

SPI 接口是 4 线串口,可以连接 SPIFLASH,SPI 接口的 AD,DA 等等。ADSP-BF533 的 SPI 接口支持主机模式和从机模式,它有 7 个 SPI 从机片选,在主机模式下,它同时可以挂载 7 个 SPI 设备,还可以在主机模式或从机模式下进行 BOOT 启动。

SPI 管脚定义:

MOSI:主输入从输出接口,根据主机和设备模式确定功能
MISO:从输入主输出接口,根据主机和设备模式确定功能
SCK:SPI 时钟
SPISELx SPI:设备选则接口
SPISS SPI:从机片选接口

SPI 接口时钟最快可以到系统时钟的 1/4,其配置公式为:

SCK Frequency = (Peripheral clock frequency SCLK)/(2 x SPI_BAUD)

接口寄存器说明

在这里插入图片描述

核心代码分析

pSPI_BAUD=2; //配置速率为 1/4 系统时钟 SPI 速率 = SCLK/2SPI_BAUD
*pSPI_FLG |=FLS2; //选择 SPISEL2 接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式为手动片选模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能 SPI 接口
*pSPI_FLG &= ~FLG2; //将 SPISEL2 拉到 0
while(!(*pSPI_STAT & SPIF)); //查看 SPI 传输状态是否完成
*pSPI_TDBR = 0x55; //将数据送入 SPI 传输数据寄存器
*pSPI_FLG |= FLG2; //将 SPISEL2 拉到 1,完成数据传输
*pSPI_FLG &= ~FLG2; //将 SPISEL2 拉到 0
while(*pSPI_STAT & RXS)//查看 SPI 传输状态是否有数据需要接收
i = *pSPI_RDBR; //读取数据
*pSPI_FLG |= FLG2; //将 SPISEL2 拉到 1,完成数据传输

ADSP-BF53x 的 SPI 接口支持手动片选和自动片选两种模式,通过 SPI_CTL 寄存器的 CPHA 和 CPOL 位配置,例子代码采用的是手动片选模式,每次读取数据和数据读取结束后需要通过代码来选通和关闭片选,自动片选的例子可以参考板卡驱动程序中的 SD 卡驱动代码。

代码实现功能

代码实现了采用 SPI 接口发送 0x55 数据和读取 SPI 接口数据。由于没有相关硬件为 SPI 发送数据,所以代码只是为了学习 SPI 接口的使用,实现了读取和传输数据的功能,并不能查看发送数据和读取数据的结果。

运行程序后,SPI 接口发送数据 0x55 后读取 SPI 接口数据。

#include

unsigned char buff_w[512];
unsigned char buff_r[512];

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void SPI_init(void)
{
pSPI_BAUD=2; //配置速率为1/4系统时钟 SPI速率 = SCLK/2SPI_BAUD
*pSPI_FLG |=FLS2; //选择SPISEL2接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式为手动片选模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}

int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();	
*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;		
while(1);		

}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...