您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> Blackfin入门教程---BF53x_SPI
本帖共有931个阅读者
发表帖子 发表投票 回复主题
Blackfin入门教程---BF53x_SPI
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
Blackfin入门教程---BF53x_SPI

接口功能介绍

SPI接口是4线串口,可以连接SPIFLASH,SPI接口的AD,DA等等。ADSP-BF53x的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)

接口寄存器说明



寄存器

功能

SPI_CTL

SPI控制寄存器,配置SPI工作模式及相位等

SPI_FLG

SPI从机选择寄存器,用于选择使用哪一个片选控制设备

SPI_STAT

SPI状态寄存器,获取SPI当前工作状态

SPI_TDBR

SPI数据传输寄存器

SPI_RDBR

SPI数据接收寄存器

SPI_SHADOW

SPI_RDBR的影子寄存器,可用于读取数据

例子代码分析

       *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接口    

       *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接口数据。


上传的附件
   2011682023552.rar [ 294.76 KB ]



「该帖子被 andy 在 2011-06-08 20:02:38 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/8 20:01:50
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154352 Call, 1 Queries, Processed in 0.011719 second(s),