TMS320F2812delay 延时完整程序
- 格式:doc
- 大小:25.00 KB
- 文档页数:2
M0和M1:2组1K×16SARAM。
③16个12位模拟-数字转换通道. All Rights Reserved.图1LQTP封装引脚排列(b)JTAG接口图2基本系统框图(c). All Rights Reserved.(a)F2812芯片(d)(e)图3基本系统原理图系统组成本文介绍的TMS320F2812基本系统的框图如图2所示,板载TMS320F2812芯片、1个复位按钮、外扩1路SCI接口、外扩1路RS485标准接口、外扩1路CAN收发转换个电源指示LED、间距2.0mm的排针将所有有用的管脚引出针标准JTAG调试接口,全面支持TDS、XDS等各类仿真器TMS320F2812芯片的电路原理如图3(a)所示;JTAG接口电路原(b)所示;CAN接口电路采用TI公司的3.3VCAN总线收发芯片型号为SN65HVD230。
其电路原理如图3(c)所示;RS485用MAXIM公司的3.3VRS-485收发器,芯片其电路原理如图3(d)所示;RS232接口电路采用MAXIM3.3VRS-232收发器,芯片型号为MAX3232。
其电路原理如图基本系统采用4层PCB板大小94×64mm2,其引出脚如图系统等工业现场、运动控制产品中。
图4基本系统板引脚排列3使用实例基本系统的开发环境是CCS集成开发环境和XD510仿真器。
板上设有符合IEEE1149.1标准的片内扫描仿真接口(JTAG),用于实验或应用系统的在线仿真调试。
本文取基本系统板上56个多功能GPIO口中的8个,外接8个发光二级管进行流水灯演示。
外接电路如图5所示。
由于F2812芯片输出引脚输出缓冲器驱动能力的典型值是4mA,为了保护芯片,在发光管与芯片引脚之间增加一片74HC373锁存器。
3.3V电源电路如图6所示。
图5流水灯演示电路图6 3.3V电源电路实验程序如下:******************************************************* *************************文件:Water_lamp.c内容:8个发光二极管LED1(L1)-LED8(L8)流水灯实验。
TMS320F2812的SPWM原程序//实现了SPWM的输出#include "DSP281x_Device.h"#include "stdio.h"#include "math.h"#include "float.h"#define NX 404#define PI 3.1415925float M=0.8;int k0=0,h1=0;double a[NX];void zkb();interrupt void eva_T1UFINT_ISR(void);unsigned int n=0;float q,l,j;void main(void){InitSysCtrl(); //系统初始化DINT; //禁止全局中断IER=0x0000;IFR=0x0000;EALLOW;GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6 pins EDIS;InitPieCtrl();InitPieVectTable();EALLOW; //使能定时器1下益中断PieVectTable.T1UFINT=&eva_T1UFINT_ISR;EDIS;IER|=M_INT2; //开中断2PieCtrlRegs.PIEIER2.bit.INTx6=1; //开下益中断////////////////////while (n<=NX){q=(n+0.75); //为消除偶次偕波,减少谐波角度出发,选择从A 相3/4周期进行采样q=q*2*PI;q/=405;j=sin(q);l=1875*(1+M*j);//M为调制比 //计算占空比表达式//if(l>=187&l<=1687)(此处网友设置为错误的)if(l>=375&l<=3375)a[n]=l;else{if(l>3375)a[n]=3375;elsea[n]=375;}n=n+1;/////////////////////////////////init_eva///////////////////////////////EvaRegs.ACTRA.all=0x0666;EvaRegs.DBTCONA.all = 0x0000; // Disable deadbandCONA.all = 0xa600; //使能比较操作EvaRegs.EVAIMRA.all=0x0200; //EVAIMRA(EVA的中断屏蔽寄存器A).T1UIINT(通用定时器1的下溢中断使能)EvaRegs.EVAIMRB.all=0x0000;EvaRegs.EVAIMRC.all=0x0000;EvaRegs.EVAIFRA.all=0xffff;//EVAIFRA(EVA的中断标志寄存器.T1UIINT(通用定时器1的下溢中断标志)EvaRegs.EVAIFRB.all=0xffff;//写1清除定时器1的下溢中断标志EvaRegs.EVAIFRC.all=0xffff;EvaRegs.CMPR1=0; //初始化寄存器的值EvaRegs.CMPR2=0;EvaRegs.CMPR3=0;EvaRegs.GPTCONA.all=0x0041;//周期必须大于最大的正弦表格值EvaRegs.T1PR = 3750; // Timer1 period PWM载波周期为 65536个定标的定时器时钟周期//EvaRegs.T1PR = 0xffff;//EvaRegs.T1CNT = 937; // Timer1 counterEvaRegs.T1CNT = 937;//EvaRegs.T1CON.all = 0x0b4e; // 选择模式产生PWM波10EvaRegs.T1CON.all = 0x0b4e;EINT;return;///////////////////////////EvaRegs.T1CON.all=EvaRegs.T1CON.all|0x0040; //启动定时器1for(;;);}interrupt void eva_T1UFINT_ISR(void) // EV-A{int h2;int flag;flag=(EvaRegs.EVAIFRA.all)&0x0200; //T1UFINT中下益中断标志位置1if(flag!=0x0200){EINT;return;}else{if(k0<=NX){h1=k0+135; //B相表达式if(h1>=404)h1=h1-404;h2=k0+270; //C相表达式if(h2>=404)h2=h2-404;EvaRegs.CMPR1=a[k0];EvaRegs.CMPR2=a[h1]; //更新比较寄存器2的值EvaRegs.CMPR3=a[h2]; //更新比较寄存器3的值k0=k0+1;}else{k0=0;}}EvaRegs.EVAIMRA.bit.T1UFINT=1; //清除中断屏蔽标志EvaRegs.EVAIFRA.bit.T1UFINT=1; //清楚中断使能标志PieCtrlRegs.PIEACK.all=0x0002; //响应同组中断EINT; //开全局中断}。
TMS320F2812外设例程系列之SPI//############################################### ######################//文件:Example_281xSpi_FFDLB_int.c//发送的数据流如下://0000 0001 0002 0003 0004 0005 0006 0007//0001 0002 0003 0004 0005 0006 0007 0008//0002 0003 0004 0005 0006 0007 0008 0009//....//FFFE FFFF 0000 0001 0002 0003 0004 0005//FFFF 0000 0001 0002 0003 0004 0005 0006//etc..//观测变量:// sdata[8]:要发送的数据// rdata[8]:接收的数据// rdata_point//############################################### #######################include "DSP281x_Device.h" //头文件#include "DSP281x_Examples.h"//功能函数原型//interrupt void ISRTimer2(void);interrupt void spiTxFifoIsr(void);interrupt void spiRxFifoIsr(void);void delay_loop(void);void spi_fifo_init(void);void error();//全局变量Uint16 sdata[8]; //发送数据缓冲器Uint16 rdata[8]; //接收数据缓冲器Uint16 rdata_point; //跟踪在数据流里检测接收到的数据//主程序void main(void){Uint16 i;//Step 1. 初始化系统控制(PLL、看门狗、使能外设时钟)InitSysCtrl();//Step 2. 初始化GPIO//InitGpio(); //本例中略过//在本程序中只需设置下列 GPIO 口为特殊功能口(SPI口)EALLOW;GpioMuxRegs.GPFMUX.all=0x000F; //配置 GPIOs 为SPI 引脚//Port F MUX - x000 0000 0000 1111EDIS;//Step 3. 清除所有中断、初始化 PIE 中断向量表并禁止 CPU 中断DINT;IER = 0x0000;IFR = 0x0000;//初始化 PIE 控制寄存器到默认状态InitPieCtrl();//初始化 PIE 向量表使它们指向一些空的中断服务子程序InitPieVectTable();//映射中断向量EALLOW;PieVectTable.SPIRXINTA = &spiRxFifoIsr;PieVectTable.SPITXINTA = &spiTxFifoIsr;//Step 4. 初始化所有的外设//InitPeripherals(); //本例中省略spi_fifo_init(); //初始化SCI//Step 5. 用户程序段,使能中断//初始化发送数据缓冲器for(i=0; i<8; i++){sdata[i] = i;}rdata_point = 0;//使能所需的中断PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块PieCtrlRegs.PIEIER6.bit.INTx1=1; //使能 PIE Group 6, INT 1PieCtrlRegs.PIEIER6.bit.INTx2=1; //使能 PIE Group 6, INT 2IER=0x20; //使能 CPU INT6EINT; //使能全局中断//Step 6. 空循环for(;;);}//用户定义程序段void delay_loop(){long i;for (i = 0; i < 1000000; i++) {}}void error(void){asm(" ESTOP0"); //出现错误,测试失败,停止!for (;;);}//SPI FIFO 初始化程序void spi_fifo_init(){//初始化 SPI FIFO 寄存器组SpiaRegs.SPICCR.bit.SPISWRESET=0; //复位SPI SpiaRegs.SPICCR.all=0x001F; //16位数据位,自主循环模式SpiaRegs.SPICTL.all=0x0017; //使能中断,使能主从模式SpiaRegs.SPISTS.all=0x0000;SpiaRegs.SPIBRR=0x0063; //波特率SpiaRegs.SPIFFTX.all=0xC028; //使能FIFO, 设置TX FIFO level为8SpiaRegs.SPIFFRX.all=0x0028; //设置RX FIFO level为8SpiaRegs.SPIFFCT.all=0x00;SpiaRegs.SPIPRI.all=0x0010;SpiaRegs.SPICCR.bit.SPISWRESET=1; //使能SPI SpiaRegs.SPIFFTX.bit.TXFIFO=1;SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;}//SPI发送中断服务程序interrupt void spiTxFifoIsr(void){Uint16 i;for(i=0;i<8;i++){SpiaRegs.SPITXBUF=sdata[i]; //发送数据}for(i=0;i<8;i++) //每一次循环数据都加1{sdata[i]++;}SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1; //清除中断标志位PieCtrlRegs.PIEACK.all|=0x20;}//SPI 接收中断服务程序interrupt void spiRxFifoIsr(void){Uint16 i;for(i=0;i<8;i++){rdata[i]=SpiaRegs.SPIRXBUF; //读数据}for(i=0;i<8;i++) //检测接收到的数据{if(rdata[i] != rdata_point+i) error();}rdata_point++;SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; //清除溢出标志位SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; //清除中断标志位PieCtrlRegs.PIEACK.all|=0x20;}。
TMS320F2812开发板软件调试说明书2812开发学习板的测试程序包括下面几个方面:测试存储系统,包括SRAM和外扩FLASH测试BOOT过程测试所有F2812的外设测试LCD接口测试网络接口测试音频输入输出测试以太网接收和发送注意:测试程序的调式工具是以本公司的USB仿真器下,为了方便起见,建议用户用本公司USB仿真器,如果使用其它类型的仿真器,请参考有关资料真确安装驱动。
第一章 如何开始DSP编程第一步:安装CCS,可参考其他书籍,主要提醒一点,如果不使用仿真器,CCS的运行环境要设置成一个模拟仿真器。
第二步:运行CCS,则进入CCS开发环境,如下图所示新建一个工程,如下图第四步:选择路径,输入工程项目名,并确定,则如下图所示添加源文件,添加CMD文件,添加库文件,如下图所示:添加CMD文件和库文件跟添加源文件的方法相似,在这里不在赘述。
添加完成后整个工程如下所示:第六步:设置BUILDING OPTIONS主要是Linker选项:Output Module: absolute executableAutoinit Mode: run-time AutoinitializeStack Size: 200h (可以设置,也可以不设置,可在CMD中包含)Code Entry Point: main这是默认设置。
第七步:编译,生成 *.out文件,如图下图所示:如果程序有错误,必须修改正确。
直到编译没错误。
第八步:LOAD程序,如下图所示(注意:*.out文件在工程目录中的DEBUG文件夹中)第九步:单步运行程序,把光标摆在 main()函数中第一条语句,按“执行到光标处”图标,如下图所示:第十步:单步跟踪或全速运行,观看结果,具体操作根据具体情况,在此不在赘述。
第二章 2812开发学习套件演示程序测试注意:所有演示程序必须拷到硬盘,并且去掉其“只读属性”。
1.TIMER0测试F2812上有3个32位的CPU定时器,本程序主要对CPU定时器0进行操作,100MS产生1次中断,在中断中让 2812开发板上的L1—L8发光二极管闪烁,实现跑马灯的效果。
CCS集成开发环境的应用3.3.1 CCS(Code Composer Studio)集成开发环境简介TI公司为推广其DSPs芯片而开发了DSPs调试和软件工具:CCS(Code Composer Studio)集成开发环境。
它提供了环境配置、源文件编辑、程序调试、跟踪与分析等工具,帮助用户在软件环境下完成编辑、编译、链接、调试和数据分析等工作。
与TI公司早期提供的开发工具相比,利用CCS能够加快系统的开发过,提高工作效率。
CCS可以工作在两种模式:软件仿真(Simulator)模式和硬件仿真(Emulator)模式。
前者不需要在DSPs芯片运行,在计算机上就可以模拟DSPs指令集与工作机制,主要用于前期算法仿真与调试。
后者实时运行在DSPs芯片上,可以在线编制及调试应用程序。
CCS主要有以下特性和功能: 集成可视化代码编辑界面,可以直接编写C/C++、汇编、头文件及CMD文件等。
集成图形显示工具,可绘制时域、频域波形等。
集成调试工具,可以完成执行代码的装入、寄存器和存储器的查看、反汇编器、变量窗口的显示等功能,同时还支持C源代码级的调试。
集成代码生成工具,包括汇编器、C/C++编译器和链接器等。
支持多DSPs调试。
集成断点工具,包括设置硬件断点、数据空间读/写断点、条件断点等。
集成探针工具,可用于算法仿真、数据监视等。
提供代码分析工具,可用于计算某段代码的执行时间,从而能对代码的执行效率做出评估。
支持通过GEL来扩展CCS的功能,可以实现用户自定义的控制面板、菜单、自动修改变量或配置参数的功能。
支持RTDX技术,可在不暂停目标系统运行的情况下,实现DSPs与其他应用程序的数据交换。
提供开放的plug-ins技术,支持第三方的ActiveX插件,支持包括软件仿真在内的各种仿真器(需要安装相应的驱动程序)。
提供DSP/BIOS工具,增强了对代码的实时分析能力,如分析代码的执行效率、调度程序执行的优先级、方便对系统资源的管理或使用(代码/数据空间的分配、中断服务程序的调用、定时器的使用等),减小了开发人员对DSPs硬件知识的依赖程度,从而缩短了软件系统的开发进程。
引 言 TMS320F2812(以下简称F2812)是美国德州仪器公司(TI公司)推出的C2000家族中最新一代产品。
该芯片采用32位操作,大大提高了处理能力,主频可以工作在150 MHz(时钟周期可达6.67 ns),其先进的内部和外设结构使得该处理器主要用于大存储设备管理、高性能的控制场合。
较之C2000系列的其他产品,该芯片的时序操作更加灵活、独立。
为了进一步理解F2812和缓慢外设的接口和设计技术,有必要讨论该芯片时序操作的特点。
1 F2812的读写时序特点 在F2812中,对外部器件的读、写访问都是通过外部接口模块XINTF来实现的。
它类似于C240X的外部接口,但也作了三方面的改进。
①原来的TMS320LF240X系列,程序存储空间、数据存储空间和I/o空间都映射在相同的地址(0000~FFFF),对它们的访问是通过不同的指令来区分的;而在F2812中,外部接口模块分成了5个固定的存储映像区域:XZCS0、XZCSl、XZCS2、XZCS6、XZCS7,可寻址1 MB的片外存储器空间,具有独立的地址。
②F2812的每个XINTF区都 "",{tr}有一个片选信号。
其中,有地区域的片选信号在内部是“与”在一起的,组成了一个共享的芯片选择,比如XZCSo和XZXSl共享一个片选信号XZCSO、ANDI,XZCS6和XZCS7共享一个片选信号XZCS6XZCS7.在这种方式下,同一个外部器件可被连到两个区,或者可以用外部译码逻辑来区分这两个区。
③5个固定存储映像区域的每一个区还可以分别对等待状态数、读写选通信号的建立时间、激活时间和保持时间进行编程。
可编程的等待状态、芯片选择和可编程的选通时间使得该接口与外部存储器及外设脱离了联系,可以灵活、独立地进行外部扩展。
这里,对外部器件进行读、写访问的基时钟是xINTF内部时钟xTIMCLK。
通过写XINTF-CNJF2寄存器的XTIMCLK位,可以将该时钟配置成与SYSCLK0UT相等和等于SYSCLKOUT的1/2,并且,对任何一个映射在XINTF区的外部器件进行读、写访问都可划分为建立、激活和跟踪三个阶段。