1. 533SPI的特性
  • 最高速度可达SCLK/4;
  • 支持主模式和从模式;
  • 可使用8个GPIO口作为从选择线:
    • 1 slave select input pins
    • 7 slave select output pins
  • DMA支持
  • 可编程的时钟极性和相位;
  • 可编程的波特率;
  • 可编程的字长度:8或16bits
  1. 接口信号说明
  • 时钟信号SCK

由主设备产生,是门控的,即只在传输期间有效,在没有数据操作时,是无脉冲波形的。在一个边沿输出数据、另一个边缘采样数据。

  • Master Out Slave In(MOSI)/Master In Slave Out(MISO)

双向数据引脚,方向取决于设备是主设备还是从设备。

  • SPISS,PF0

作为从机时的片选信号;

PFx:作为主机时的设备选择信号。

  1. 电路连接方法如下:

    

  4. 时钟的极性与相位问题:

  这里的设置要取决于我们所采用的设备的SPI接口模式,假如设备是上升沿采样,下降沿输出,空闲时间为高电平,则对应的DSP设置为:CPOL = 1, CPHA = 1,即模式4.

  5. 时钟频率问题:

    时钟频率是由SPI_BAUD register决定的,计算方法为:

        SCK = SCLK/(2*SPI_BAUD);

    假设我们SCLK = 120MH,SPI_BAUD = 4,则SCK = 15M,即SPI的波特率为15MHz。

  6.其它寄存器的设置

  其它寄存器的设置按照寄存器的手册相关位的说明即可,需要解释的是SPI_CTL中TIMOD位的设置。

从时钟SCK与数据的关系波形中注意到,在8个时钟周期中,可以同时发送一个字节的数据,同时采样一个字节的数据。本例程中设置为01,也就是发起传输是由向SPI_TDBR寄存器中写数据导致的。那接受数据时如何发起SCLK呢?答案是要在读SPI_RDBR之前,发送一个字节的数,这个数发送完成的同时,采样也结束了。因此:

因此(这里为16位操作):

  • 写操作:spi_send_read_data(0xaabb);  //发送数据0xaabb
  • 读操作:var = spi_send_read_data(0xffff);    //0xffff为发送无效数据

  7.具体的代码:

void init_spi(void)
{
*pSPI_BAUD=; //配置速率为1/4系统时钟 SPI速率 = SCLK/2*SPI_BAUD
*pSPI_FLG |=FLS2; //选择SPISEL2接口作为slave选择引脚
//enable spi,master mode,MSB first,16 bit transfer
//CPOL,CPHA(slave select pin controlled by software)
//start transfer with write of SPI_TDBR
*pSPI_CTL = SPE|MSTR|CPHA|CPOL|SIZE|0x0001;
} uint16_t spi_send_read_data(uint16_t data)
{
uint16_t i; *pSPI_FLG &= ~FLG2; //将SPISEL2拉到0
*pSPI_TDBR = data; //将数据送入SPI传输数据寄存器
while(*pSPI_STAT & TXS); //查看SPI传输状态是否完成,用示波器测试要花费一个CLK周期; //读过程
while(!(*pSPI_STAT & RXS));//查看SPI传输状态是否有数据需要接收
i = *pSPI_RDBR; //读取数据
*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输
return i;
}

 

   

Blackfin DSP(五):BF533的SPI接口的更多相关文章

  1. Blackfin DSP(八):1D DMA与音频处理模板

    1.DMA产生的背景 在许多需要使用DSP 的场合,一般都需要大量的数据搬移工作,而如果每次数据搬移都由DSP 内核来参与完成,将大大占用DSP 内核的处理时间,从而严重影响其信号处理能力.因此,Bl ...

  2. Blackfin DSP(七):用SPORT口模拟SPI

    1.问题的提出 当系统从SPI device启动时,若SCLK = 133M,则SPI的最大速度为33M.然而,有一些串行的flash设备能更快的运行,因此,如果我们使用SPORT口,它的最大速度为S ...

  3. BF533的SPORT接口

    BF533的SPORT接口 1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCL ...

  4. 自定义AXI总线形式SPI接口IP核,点亮OLED

    一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做 ...

  5. flash读写学习笔记与spi接口及简单测试验证(三)

    FPGA中的视频图像资源,以及想要永久存储的程序都是要存储在flash中,flash是FPGA一个不可缺少的部分,flash的种类有很多,根据winbond公司的128Mbit Qual SPI接口的 ...

  6. SPI接口在LCD上的应用

    ​小分辨率的LCD,比如QQVGA,QCIF,QVGA等,广泛应用于功能手机和穿戴设备(比如手表)上.这类小分辨率的LCD,除了支持并行接口(比如i80),一般也会支持串行接口.在实际产品中广泛运用的 ...

  7. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  8. spi接口的ds1302时钟芯片控制在lcd1602上显示

    spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

  9. CC3000 SPI接口编程介绍

    CC3000 SPI 操作: CC3000的SPI 是基于五根线CLCK,CSn,IRQ,MISO,MOSI:通信模式如下图: CLCK:时钟频率0-26M从主机到从机,提供SPI接口时钟 CSn:低 ...

随机推荐

  1. (BFS)poj1465-Multiple

    题目地址 题意可理解为我们有一些给定的元素,要用它们组成数,如果一个长度(x)所有组成的数都不是给定的另一个数(n)的倍数,并且长度为x的数中有模n的不同于长度小于x的数模n的数,那么继续延长这个数的 ...

  2. Rhel6-piranha配置文档

    系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 192.168.12 ...

  3. css定位之浮动定位

    浮动定位可以是原本垂直排列的块级元素,变成水平排列 1浮动元素 float:left 或者float:right  这些浮动会直接碰到父容器的边界为止. 2设置了浮动的元素,元素会脱离标准文档流中,但 ...

  4. android studio 开启genymotion 出现"failed to create framebuffer image"

    出现错误 Unable to start the virtul device To start virtual devices, make sure that your video card supp ...

  5. css2----实现三角形和带角框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. UISegmentedControl的详细使用

    当用户输入不仅仅是布尔值时,可使用分段控件(UISegmentedControl).分段控件提供一栏按钮(有时称为按钮栏),但只能激活其中一个按钮.分段控件会导致用户在屏幕上看到的内容发生变化.它们常 ...

  7. 解决如何监听Activity切换

    本篇博文在我之前的博文中已经提到了,但是监听Activity切换又可以作为一个单独的内容来叙述,因此这里又单独拿了出来进行赘述. Activity的切换无非有两种,第一种:启动或者创建一个新的Acti ...

  8. 字体Unicode编码

    客专家福利     有奖试读&征文——我们在互联网上奋斗的故事      10月推荐文章汇总      加入“技术热心人”,赢丰厚奖品 html-中文字体在CSS中的显示(Unicode编码) ...

  9. Linux线程-pthread_kill

    该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...

  10. C语言基本数据类型

    一.数据类型与“模子” short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过 ...