DSP的SPI接口
- 格式:doc
- 大小:239.50 KB
- 文档页数:16
DSP的 SPI 口和串行 EEPROM在变频器中的应用纲要:实现了一种全集成可变带宽中频宽带低通滤波器,议论剖析了跨导放大器 - 电容 (OTA—C)连续时间型滤波器的构造、设计和详细实现,使用外面可编程电路对所设计滤波器带宽进行控制,并利用 ADS软件进行电路设计和仿真验证。
仿真结果表示,该滤波器带宽的可调范围为 1~26 MHz,阻带克制率大于 35 dB ,带内涟漪小于 0.5 dB ,采纳 1.8 V 电源, TSMC 0.18μm CMOS工艺库仿真,功耗小于 21 mW,频响曲线靠近理想状态。
重点词: Butte1前言变频器的开发中我们采纳TMS320F240芯片做主 CPU, TMS320F240系列是美国TI 企业于 1997 年推出的,专为数字电机控制和其余控制应用系统而设计的 16 位定点数字信号办理器。
它将数字信号办理的高速运算功能与面向电机的强盛控制能力联合在一同,成为中低端变频器理想的主控芯片。
F240 片内外设包含双 10 位 A/D 变换器,带有锁相环 PLL 时钟模块,带中止的看门狗准时器模块,串行通讯接口 SCI 及串行外设接口 SPI,此外,还集成了一个事件管理模块EVM。
所以, TMS320F240基本能知足笔者变频器设计的要求。
变频器有几百甚至上千个参数,这些参数值都要求系统断电后不可以丢掉,在设计中我们采纳非易失性储存器 EEPROM保留数据。
每次上电时,从 EEPROM中读取上一次参数的设定值,以保证变频器运转状态的连续性,相同每次断电时,也要保留变频器此次运转的参数设定状况,以便开机时读取。
本文论述了变频器开发中 F240 扩展 EEPROM(X5168)的设计思路和实现过程。
2 对 TMS320F240的串行外设接口( SPI)的说明TMS320F240的串行外设接口( SPI)模块是一个高速同步串行输入/ 输出端口,它同意 F240 控制器和片外外设或其余控制器进行串行通讯,在通讯过程中,SPI 可以以随意给定的传输速率对拥有可编成长度(1-8 位)的串行比特流进行收发。
DSPF28335---SPI模块DSPF28335--串行外设接口(SPI模块)问题1:什么是串行外设接口(SPI)?答:SPI(Serial Peripheral Interface)接口是高速同步串行I/O接口。
问题2:串行通信接口(SCI)和串行外设接口(SPI)主要区别?答:(1)SPI采用同步通讯方式,除了发送和接受两根线之外,还需要一根同步时钟线;SCI采用异步通信方式,只需要发送和接收两根线,通讯双方微处理器使用各自的时钟。
(2)SPI适用于板上短距离高速通讯;SCI适用于对另外的外设长距离的低速率通讯,在默认状态下,其最高通讯速率只相当于SPI通讯速率的1/4。
(3)SPI的时钟可反映在外在的同步时钟线上;SCI的时钟时隐藏的。
问题3:TMS320F28335有几个SPI接口模块?答:有一个专门的SPI模块,另外两个McBSP也可以配置为SPI接口。
问题4:F28335SPI接口由几组寄存器控制?答:12组,位于控制寄存器帧0x7040h开始的位置。
问题5:SPI FIFO模式下如何对传输和接收16级FIFO进行操作?直接对SPITXBUF寄存器进行赋值以传输数据。
例如:SpiaRegs.SPITXBUF=sdata[i],此操作可理解为:首先使TXFIFO头指针加1,然后把值写入TXFIFO头指针指向的位置。
如果当前没有一个激活的传输过程时,对SPITXBUF的写入会激活一个传输过程。
直接读取SPIRXBUF寄存器的值以接收数据。
例如:rdata[i]=SpiaRegs.SPIRXBUF,此操作可理解为:首先从RXFIFO 头指针处读取1个字符,然后使RXFIFO头指针减1。
问题6:SPI FIFO模式下传输和接收中断何时产生?答:是在数据传输或接收结束后,再判断传输和接收FIFO队列中有多少数据(SPIFFTX.TXFFST(4-0)和SPIFFRX.RXFFST(4-0)的值)。
通过SPI接口协议实现DSP与其它设备的通信
通过SPI(Serial Peripheral Interface)接口协议可以实现DSP(Digital Signal Processor)与其他设备的通信。
SPI是一种同步串行通信协议,常用于外围设备与主控制器之间的数据传输。
以下是基本的SPI通信步骤:
1. 确定SPI主设备和从设备的角色:DSP作为主设备,与其他设备进行通信。
2. 配置SPI主设备的工作模式:设置SPI主设备的时钟频率、数据位宽等参数。
3. 选中从设备:设置 SPI 的片选信号,选中需要进行通信的从设备。
4. 主设备发送数据:将需要发送的数据写入 SPI 的数据寄存器。
5. 数据传输:SPI 主设备将数据发送至从设备,从设备接收数据。
6. 从设备发送数据:从设备将需要发送的数据写入 SPI 的数据寄存器。
7. 数据传输:SPI 主设备接收从设备发送的数据,从设备接收数据。
8. 取消片选信号:取消 SPI 的片选信号,完成本次通信。
9. 重复前述步骤进行进一步通信。
具体实施需要根据DSP和其他设备的硬件和软件特性进行配置和实现。
一般可以使用DSP的SPI模块或者通过GPIO口模拟SPI接口来实现通信。
其中包括设置时钟频率,配置数据位宽,设置片选信号,发送和接收数据等操作。
具体的实现可以参考DSP和目标设备的数据手册以及SPI接口的规范。
DSP通讯协议引言DSP(数字信号处理器)通讯协议是一种用于在DSP芯片之间或者DSP芯片与外设之间进行数据传输和通信的协议。
它定义了一套规范和标准,以确保不同设备之间的互操作性和数据的正确传输。
本文主要介绍DSP通讯协议的基本概念以及常见的通讯方式和协议。
1. DSP通讯协议概述DSP通讯协议是一种用于在DSP芯片之间或者DSP芯片与外设之间进行数据传输和通信的协议。
它定义了数据传输的格式、规范和流程,以确保数据的正确性和可靠性。
DSP通讯协议根据通信方式的不同可以分为串行通信和并行通信两种方式。
1.1 串行通信串行通信将数据位依次以一位一位的方式进行传输。
串行通信一般使用单一的信道来传输数据,可以通过串行接口、串行总线等多种方式实现。
串行通信方式相对于并行通信方式占用的引脚数目较少,通信速度相对较低,但它具有传输距离长、布线简单等优点。
常见的串行通信协议有SPI(串行外围接口)、I2C(串行总线接口)和UART(通用异步收发传输器)等。
1.2 并行通信并行通信将数据位同时以多位的方式进行传输。
并行通信一般使用多个并行的信道来同时传输数据,可以通过并行总线等方式实现。
并行通信方式相对于串行通信方式占用的引脚数目较多,通信速度相对较高,但它对布线要求较高,传输距离较短。
常见的并行通信协议有PCI(外设互联设备接口)、VME(维基媒体引擎)和ISA(个人计算机总线接口)等。
2. 常见的DSP通讯协议2.1 SPI(串行外围接口)SPI是一种全双工、同步、串行通信协议。
它使用一根时钟线和两根数据线(Master Out Slave In - MOSI和Master In Slave Out - MISO)进行数据的传输。
SPI协议中,一个主设备控制多个从设备,可以同时实现多个设备之间的通信。
SPI协议具有传输速度快、连接简单、灵活可靠等特点,广泛应用于各种数字设备之间的通信。
2.2 I2C(串行总线接口)I2C是一种双向、两线制的串行通信协议。
2014~2015学年第一学期《DSP原理及应用》课程设计报告题目:DSP的SPI接口班级:11电子信息(1)电气工程学院2014年11月《DSP原理及应用》任务书课题名称DSP的SPI接口指导教师陶沙执行时间2014~2015学年第一学期第9 周学生姓名学号承担任务评分系统方案设计及协调DA转换实验DA转换实验DA转换实验EEPROM存储区访问EEPROM存储区访问EEPROM存储区访问论文撰写设计要求1完成SPI接口的DA转换实验和EEPROM存储区访问。
2完成硬件原理图,撰写课程设计说明书。
目录目录 (1)摘要 (1)第1章硬件电路设计 (3)1.1 TMS320LF2407A的介绍 (3)1.2 TLV5617的介绍 (4)1.3 DA转换系统原理图 (5)第2章软件的设计 (6)2.1 程序流程图 (6)2.2 SPI 接口的DA 实验编程 (6)第3章SPI接口的EEPROM存储区访问 (8)3.1 接口特点 (8)3.2 硬件设计 (8)3.3 软件设计 (8)总结...................................................................................... 错误!未定义书签。
参考文献................................................................................ 错误!未定义书签。
附录...................................................................................... 错误!未定义书签。
1摘要数字信号处理就是用数值计算的方式对信号进行加工的理论和技术,它的英文原名叫digital signal processing,简称DSP。
它是集成专用计算机的一种芯片,只有一枚硬币那么大。
有时人们也将DSP看作是一门应用技术,称为DSP技术与应用。
介绍TMS320LF2407A的SPI的D/A转换芯片采用TLV5617进行数字到模拟的转换通过观察输出的结果来验证通信和转换的情况。
TLV5617是单极性,10位串口DA,所以生成的正弦波数据要换算到TLV5617的数据范围,而且根据TLV5617要求的数据格式还要对换算后的数据做相应的变换才能最终通过SPI接口发送给TLV5617.在这个应用中SPI用于控制TLV5617工作,所以配置为主模式。
从TLV5617的控制时序中可以发现串行数据在时钟的上升沿锁存。
因此SPI时钟配置选择无延下降沿即SPI在时钟的下降沿发送数据在时钟的上升沿数据被锁存在TLV5617。
本设计对DA转换的工作原理的分析以及对DSP的数模转换系统进行功能分析设计出数模转换接口的系统框图硬件电路图和软件程序。
DSP的串行外设接口(SPI)完成EEPROM的存储区访问。
关键词:数字信号处理器串行外设接口D/A转换TLV5617 EEPROM2第1章硬件电路设计1.1 TMS320LF2407A的介绍TMS320LF2407A的D/A转换是基于2407的SPI接口以及TLV5617芯片里完成。
SPI参与数据传输的寄存器有9个,其中SPICCR、SPICTL用于设置SPI 的工作状态工作方式、数据长。
作为主器件时,时钟模式的选择要参考工作方式。
SPIBRR用于设定SPI的波特率;SPISTS反映数据传输的状态;SPIRXBUF、SPITXBUF用于数据的接收和发送;SPIDAT为数据的发送/接收缓冲寄存器。
(1)2407A的SPI工作方式和时钟模式工作方式:2407A的SPI功能模块是一种真正的同步串行接方式无延时上升沿有延时上升沿无延时下降沿有延时下降沿SPICLK信号上升沿发送数据,下降沿接00收数据提前SPICLK信号上升沿半个周期发送数据,上升沿接收数据SPICLK信号下降沿发送数据,上升沿接01口,可以工作于主动和从动方式。
将SPICTL寄存器的位2(MASTER/SLA VE)设置为1,即选择了主动工作方式,2407A 作为主器件;反之,为从动方式,2407A作为从器件。
当SPI工作在主动方式时,SPICLK为时钟信号输出端,与从器件的时钟信号输入引脚相连接,二者共用2407A的时钟信号。
SPI数据传输由第30、32、33、35引脚完成。
引脚功能见表1。
表1 引脚功能表引脚名称:SPISIMO(30引脚)SPISOMI(32引脚)SPISTE(33引脚)SPICLK(35引脚)2407A数据字长度可以是1到16位,收发数据的功能从动输入/主动输出从动输出3/主动输入从动发送使能串行时钟输入/输出位数由SPI的配置控制寄存器SPICCR的低四位(SPICHAR3~SPICHAR0)决定。
在二进制中,这四位共有16种组合,每一个组合对应一种数据长度,比如:组合是0000时,规定收发数据的位数是1位;当组合是1111时,就规定了收发数据位数为16位。
SPI数据的收发都经过发送/接收缓冲寄存器SPIDAT。
SPIDAT是一个16位寄存器,SPI发送采用左对齐方式,所以当要发送的数据小于16位时,需对要发送的数据进行调整,有效位要从高位开始放置(靠左),无效位可为随意的数据。
(2) 时钟模式SPI的时钟模式有四种。
时钟模式的选择由配置控制寄存器SPICCR的时钟极性位(位6:CLOCKPO2LARITY)和接口操作控制寄存器SPICTL的时钟相位位(位3:CLOCKPHASE)的组合状态来决定。
图2 SPI数据传输格式时序波特率的设定要参考外设的最大传输频率。
通过向波特率寄存器(SPIBRR)写入设定值,就可以得到不同的波特率。
波特率计算公式如下:SPI波特率=SYSCLK/(SPIBRR+1)(3ΦSPIBRRΦ127)(SPISPI波特率=SYSCLK/4BRR=0,1,2时)其中,SPIBRR为SPI模块的SPIBRR寄存器中的内容,SYSCLK为倍频或分频后的系统时钟频率。
1.2 TLV5617的介绍TLV5617A是带有灵活3线串行接口的双10位电压输出数/模转换数,DAC 串行接口可与TMS320 SPITM QSPIM和MiscrowaresTM的串行端口兼容。
它可用含有4个控制位和10个数据位的串行16位字符串编程。
其特点双10位电压输出数/模转换器DAC:可编程的内部基准,可编程的稳定时4间,快速方式2.5s,慢速方式12s,可与TMS320和SPITM串行端口兼容应用范围:数据伺服系统控制回路,数据偏置和增益调节器,工业处理控制,机械和运作控制器件,海量存储器一般功能TLV5617A是一个基于串联电阻结构的双10位电源的DAC,它由一个串行接口一个速度和掉电控制逻辑一个电阻字符串和一个轨对轨的输出缓冲器组成输出电压全额度由内部基准决定由一下公式给出:2REF CODE/0*1000【v】其中REFSHI 电压基准,CODE是在0x000至0xFFC范围内的数字输入值一次上电复位初始化内部锁存至置位状态所有位均为0。
串行接口CS引脚的下降沿开始将数据一位接一位从最高有效位开始转移到在SCLK 引脚的下降沿上的内部寄存器中在16位数据传送完或CS上升时转移寄存器的内部被移入目标锁存DACA DACB缓冲器或控制中这取决于数据字中的控制位。
转换系统原理图1.3 DA5第二章软件的设计2.1 程序流程图图4 SPI模块软件流程当SPICTL的使能发送允许位TALK位为1时,写数据到SPIDAT或SPITXBUF就启动了SPISIMO引脚的数据发送,数据从SPIDAT的最高位依次发送出去。
在数据移出SPIDAT时,将置位SPI的接口状态寄存器SPISTS的中断标志位SPIINTFLAG;若中断使能,将发生中断事件。
2407A发送数据的状态可以用两种方法检测:一是中断方式,二是查询方式。
查询方式查询SPI中断标志位SPIINTFLAG是否为1,若为1,则数据发送完毕。
2.2 SPI 接口的DA实验编程DA转换程序#include "global.c" void SystemInit(); void Timer1Init(); void KickDog(); void SPI_Init(); void DA_OUT(unsigned CHANNEL,unsigned int RNG,unsigned int SPI_DATA); int numled0=200; unsigned int t0=0,i=0; int V oltage=0; main() { SystemInit(); //系统初始化6MCRA=MCRA & 0xC0FF; //IOPB0-6设为IO口模式PBDA TDIR=0xFFC2; //所有LED=0 PBDA TDIR=PBDATDIR | 0x003D; //所有LED=1 SPI_Init(); // CreateDASigal(); /* while(1) { CreateDASigal(); i=10; for(i=0;i<100;i++); } */ Timer1Init(); //定时器初始化asm(" CLRC INTM "); while(1); } void SystemInit() { asm(" SETC INTM "); //关闭总中断asm(" CLRC SXM "); //禁止符号位扩展asm(" CLRC CNF "); //B0块映射为on-chip DARAM asm(" CLRC OVM "); //累加器结果正常溢出SCSR1=0x87FE; //系统时钟CLKOUT=20*2=40M //打开ADC,EV A,EVB,CAN和SCI的时钟WDCR=0x006F; //禁止看门狗,看门狗时钟64分频KickDog(); //初始化看门狗IFR=0xFFFF; //清除中断标志IMR=0x0003; //打开中断2 } void Timer1Init() { EV AIMRA=0x0080; // 定时器1周期中断使能EV AIFRA=0xFFFF; // 清除中断标志GPTCONA=0x0000; T1PR=2500; // 定时器1初值,定时0.4us*2500=1ms T1CNT=0; T1CON=0x144E; //增模式, TPS系数40M/16=2.5M,T1使能} void SPI_Init() //SPI-DA初始化{ MCRB=MCRB | 0x0014; //SPISIMO,SPICLK特殊功能方式PBDATDIR=PBDATDIR | 0x0002; //CS_DA=1 SPICCR=0x004a; //11bit数据SPICTL=0x0006; //禁止中断SPIBRR=0x0027; //1M波特率,40M/40=1M SPICCR=SPICCR | 0x80; } void DA_OUT(unsigned CHANNEL,unsigned int RNG,unsigned int SPI_DATA) { unsigned char flag=0; SPITXBUF=(CHANNEL<<14)|(RNG<<13)|(SPI_DATA<<5) ; //bit10,9~CHANNEL;bit8~RNG倍数while(1) { flag=SPISTS&0x40; if(flag==0x40) break; } SPIRXBUF=SPIRXBUF; //虚读寄存器以清除中断标志PBDATDIR=PBDATDIR & 0xFFFD; //CS_DA=0,更新模拟信号输出for(i=0;i<5;i++); //延时PBDATDIR=PBDATDIR | 0x0002; //CS_DA=1,锁存数据} void c_int2() //定时器1中断服务程序{ if(PIVR!=0x27) { asm(" CLRC INTM "); return; } T1CNT=0; numled0--; if(numled0==0) { numled0=200; if((PBDATDIR & 0x0001)==0x0001) PBDATDIR=PBDATDIR & 0xFFFE; //IOPB0=0;LED灭else PBDATDIR=PBDATDIR |0x0101; //IOPB0=1;LED亮} if(V oltage<0) V oltage=0; DA_OUT(0,0,V oltage); //V oltage范围0-255对应0-3.3V DA_OUT(1,0,V oltage); //V oltage范围0-255对应0-3.3V。