TMS320F2812delay 延时完整程序
TMS320F2812 SCI口FLASH编程操作指南
TMS320F2812 SCI Flash 编程操作指南
目录
胜翼科技
1 文档介绍 ............................................................................................................... 3 2 软件准备 ............................................................................................................... 3 3 环境配置 ............................................................................................................... 5 4 烧写操作 ............................................................................................................... 8 5 波特率设置及操作时间 ..................................................................................... 11
3
销售邮箱:Sales@
胜翼科技
SDFlash algorithms for F28xxx flash programming via an RS232 serial link 需要进行 安装,一般情况下与 CCS 3.3 保持一个目录即可。
SDFlash 软件在 Spectrumdigital 公司网站上提供的是非安装版,无需安装。但需 要注意的是,非安装版缺少了相关的配置文件(如 sdopts.cfg、sdtsrv.dll)。软件是无 法直接运行的。需要安装 SD 公司的 CCS Emulation Drivers 软件。如图 2‐1 所示:
DSP之工MS320F2812基本系统及使用实例
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原程序
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
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_CPU 定时器
定时器的初始化和配置
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) { Uint32 temp;
// 定时器周期初始化 // 将后两个实参的乘积作为定时器的周期值存入定时器周期寄存器 Timer->CPUFreqInMHz = Freq; Timer->PeriodInUSec = Period; temp = (long) (Freq * Period); Timer->RegsAddr->PRD.all = temp;
TMS320 F2812上的CPU 定时器
SYSCLKOUT为系统的工作时钟,一旦定时器被使能,则预 定标计数器PSC递减计数,预定标计数器产生下溢后向定时器 的32位计数器借位,最后定时器计数器产生溢出使定时器向 CPU发送中断。每次预定标PSC产生溢出后,使用TDDR中的 值重新装载,同样PRD为32位计数器提供重新装载值。
知识背景:C语言基础-结构体和联合(共用)体
结构指针 结构指针对结构成员的访问表示为: 结构指针名->结构成员 例如要给上面定义的结构中age赋值, 可以用下面语句: student->age=18; 实际上, student-> age就是(*student). age的缩写形式。 需要指出的是结构指针是指向结构的一个指针, 即结构中 第一个成员的首地址, 因此在使用之前应该对结构指针初 始化, 即分配整个结构长度的字节空间。
外设位域结构体
TMS320F2812头文件与C语言编程
知识背景:C语言基础-结构体和联合(共用)体
结构体 结构体也是一种数据类型, 可以使用结构体变量, 在使用 结构体变量时要先对其定义。定义结构体变量的一般格 式为: struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 类型可以 整型、浮点型、字符型、指针型和无值型。
TMS320F2812开发板软件调试说明书
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发光二极管闪烁,实现跑马灯的效果。
第4章_TMS320F2812系统控制及中断
4.2 时钟及系统控制
华东交通大学电气学院
4.3 振荡器及锁相环模块
2812 基于 PLL 的时钟模块可以采用两种模式,一种是 PLL 未被禁止的情况下(旁路 或使能), 使用外部晶振给 2812 提供时钟信号,使用 X1/CLKIN 引脚和 X2 引脚;另外 一种 PLL 被禁止的情况下,旁 路片内振荡器,由外部时钟源提供时钟信号,即将外部振
PIEIERx。每个寄存器的低 8 位对应于 8 个外设中断,高 8 位保留。例如 T1PINT对应于PIEIFR2 的第 4 位和 PIEIER2 的第 4 位。
因为 PIE 模块是多路复用的,那么每一组同一时间应该只能是一个中断被响应,
PIE 是怎么做到的呢?PIE 除了每组具有 刚才的 PIEIERx,PIEIFRx 寄存器 之外,还有一个 PIEACK 寄存器,它的低 12 位分别对应着 12 个组,即 INT1INT12,高位保留。假如 T1 的周期中断被响应了,则 PIEACK 寄存器的第 2 位(对应于 INT2)就会被置位,并且一直保持直到手动清除这个标志位。当 CPU 在响应 T1PNT 的时候,PIEACK 的第 2 位一直是 1, 这时候如果 PIE2 组内发生其他的外设中断,则暂时不会被 PIE 响应送给 CPU,必须等到 PIEACK 的第 2 位被复位之后,如果该中断请求还存在,那么立马由 PIE 控制 块将中断请求送至 CPU。所以,每个外设中断被响应之后,一定要对 PIEACK 的相关位进行手动服务,否则同组内的其他中断都不会被响应。
时钟频率具体的计算如下面所示。 晶振为 30M,
PLLCR 的 DIV 位被设置成 1010 时的时钟频率
CLKIN=(OSCLKIN*10)/2=(XCLKIN*10)/2=(30M*10)/2=150M Hz
TMS320F2812应用程序开发过程
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慢速外设接口的时序控制
引 言 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区的外部器件进行读、写访问都可划分为建立、激活和跟踪三个阶段。
TMS320F2812系统控制和中断
LPMCR1
0x0000 701F
保留
0x0000 7020
PLLCR
0x0000 7021
SCSR
0x0000 7022
WDCNTR
0x0000 7023
保留
0x0000 7024
WDKEY 保留 WDCR 保留
0x0000 7025
0x0000 7026 0x0000 7028
0x0000 7029
0110
CLKIN = (OSCCLK * 6.0)/2
0111
CLKIN = (OSCCLK * 7.0)/2
1000
CLKIN = (OSCCLK * 8.0)/2
1001
CLKIN = (OSCCLK * 9.0)/2
1010
CLKIN = (OSCCLK * 10.0)/2
1011
保留
1100 1101
0x0000 702A 0x0000 702F
3.1.2 时钟寄存器
1
外设时钟控制寄存器
1
1
低功耗模式控制寄存器0
1
低功耗模式控制寄存器1
1
1
PLL控制寄存器
1
系统控制和状态寄存器
1
看门狗计数寄存器
1
1
看门狗复位key寄存器
3
1
看门狗控制寄存器
6
3.1.2.1 外设时钟控制寄存器
外设时钟控制寄存器(PCLKCR)控制片上各种时钟的工作状态,使能或禁止相关外设 的时钟。
3.1.2.3 高/低速外设时钟寄存器 HISPCP和LOSPCP控制寄存器分别控制高/低速的外设时钟,具体功能如下:
图3.4 高速外设时钟寄存器(HISPCP) 表3.4 高速外设时钟寄存器(HISPCP)功能定义
TMS320F2812工作机制及指令周期测试
TMS320F2812是TI公司的一款用于控制的高性能和高性价比的32位定点DSP芯片。
该芯片最高可在150 MHz主频下工作(本文将其设置到100 MHz),并带有18K×16位0等待周期片上SRAM和128K×16位片上Flash(存取时间为36 ns)。
TMS320F2812采用哈佛总线结构,即在同一个时钟周期内可同时进行一次取指令、读数据和写数据的操作,同时TMS320F2812还通过采用8级流水线来提高系统指令的执行速度。
为了观察指令周期,对TMS320F2812的GPIOA0进行循环的置位操作和清除操作。
C源程序如下:#include DSP28_Device.hvoid main(void) {InitSysCtrl();/*初始化系统*/DINT;/*关中断*/IER = 0x0000;IFR = 0x0000;InitPieCtrl();/*初始化PIE控制寄存器*/InitPieVectTable();/*初始化PIE矢量表*/InitGpio();/*初始化EV*/EINT;ERTM;for(;;) {GpioDataRegs.GPADAT.all=0xFFFF;GpioDataRegs.GPADAT.all=0xFFFF;GpioDataRegs.GPADAT.all=0xFFFF;GpioDataRegs.GPADAT.all=0x0000;GpioDataRegs.GPADAT.all=0x0000;GpioDataRegs.GPADAT.all=0x0000;}}500)this.width=500 border=0>图4 GPIO的P0.25脚输出波形3其中最重要的是要对通用输入/输出进行初始化和确定系统CPU时钟。
其中系统的时钟通过PLL设定为100 MHz,而初始化InitGpio() 的源程序为:#include DSP28_Device.hvoid InitGpio(void){ EALLOW;//多路复用器选为数字I/OGpioMuxRegs.GPAMUX.all=0x0000;//GPIOAO为输出,其余为输入GpioMuxRegs.GPAQUAL.all=0x0000;EDIS;}通过在主程序for(;;)的地方加断点,可以很容易找到上面主程序中循环部分程序编译后的汇编指令:3F8011 L1:3F8011761FMOVWDP,#0x01C33F8013 2820 MOV@32,#0xFFFF3F8015 2820 MOV@32,#0xFFFF3F8017 2820 MOV@32,#0xFFFF3F8019 2820 MOV@32,#0xFFFF3F801B 2820 MOV@32,#0xFFFF3F801D 2820 MOV@32,#0xFFFF3F801F 2B20 MOV@32,#03F8020 2B20 MOV@32,#03F8021 2B20 MOV@32,#03F8022 6FEF SBL1,UNC其中第1列为程序在RAM中的位置,第2列为机器码,后面就是汇编语言程序。
北京达盛 exp-tms320f2812 说明书
EXP-TMS320F2812使用说明书北京达盛科技有限公司第一版:2008-12-15, Edited By Fsj达盛科技CPU 板主要由以下几个模块组成:² CPU 模块; ² 时钟模块; ² 复位模块; ² 存储器模块; ² CPLD 模块; ² 扩展接口模块; ² 电源模块;2812 CPU 板:表1-1 接口说明标号 J1J2JTAG1 P1,P2,P3,P4JUMP1,2S1含义电源 插口扩展口DSPJTAG 接口扩展接口跳线复位按钮J1:电源插口,从该接口给CPU 板供电,+5V ,内正外负。
1-1系统功能框图达盛J2:AD 输入扩展接口 具体定义如表1-2所示:表1-2 P1管脚定义J2 管脚 对应2812 管脚 备 注J2 管脚 对应2812 管脚 备 注1 +5V A +5V 电源 6 ADCINB4 采样/保持B 输入42 ADCINA6 采样/保持A 输入67 AGND 模拟地 3 +5V A +5V 电源 8 ADCINB5 采样/保持B 输入54 ADCINA7 采样/保持A 输入79 AGND 模拟地 5AGND模拟地 10ADCINB6采样/保持B 输入6JTAG1:DSP JTAG 接口,符合IEEE Standard 1149.1(JTAG)标准,引脚分配如下图所示:(空脚是第六脚,方形焊盘是第一脚)图1-2 DSP 仿真器接口示意图达盛科技P1:CPU 地址线及数据线扩展接口 具体定义如表1-3所示:表1-3 P1管脚定义P1 管脚 对应2812 管脚 备 注P1 管脚 对应2812 管脚 备 注1 DGND 数字地 21 A19 地址线192 DD0 数据线0 22 A18 地址线183 DD1 数据线1 23 A1 地址线14 DD2 数据线2 24 A0 地址线05 DD3 数据线3 25 A3 地址线36 DD4 数据线4 26 A2 地址线27 DD5 数据线5 27 A5 地址线58 DD6 数据线6 28A4 地址线4 9 DD7 数据线7 29 A7 地址线7 10 DD8 数据线8 30 A6 地址线6 11 DD9 数据线9 31 A9 地址线9 12 DD10 数据线10 32 A8 地址线8 13 DD11 数据线11 33 A11 地址线11 14DD12数据线12 34 A10 地址线10 15DD13 数据线13 35 A13 地址线13 16DD14 数据线14 36 A12 地址线12 17DD15 数据线15 37 A15 地址线15 18DGND 数字地 38 A14 地址线14 19 A17 地址线17 39 +5V +5V 电源 20A16地址线1640+5V+5V 电源达盛科技具体定义如表1-4所示:表1-4 P2管脚定义P2 管脚 对应2812 管脚 备 注P2 管脚 对应2812 管脚 备 注1 DGND 数字地 21 SPISOMI SPI 从动输出主动输入2 DGND 数字地 22 MBDRA 接收串行数据3 READY 准备 23 SPICLK SPI 时钟4 XZCS2 XINTF 区域片选2 24 MCLKXA 发送数据时钟5 XZCS2 XINTF 区域片选2 25 SPISTE SPI 从动发送使能6 XZCS2 XINTF 区域片选226 MFSXA 发送帧同步信号 7 R/W 读/写信号 27 SPISIMO SPI 从动输入主动输出引脚8 XZCS2 XINTF 区域片选2 28 MBDXA发送串行数据9 XZCS2 XINTF 区域片选229 - 空 10 -空30 -空11XF/XPLLDSISXF/XPLLDIS 引脚31T1CTRIP/PDPINTA定时器1比较输出/ PDPINTA 中断12 /BHOLDA 外部DMA 保持确认信号32 XINT1/XBIO外部中断1/XBIO 核心输入13-空33 T3CTRIP/PDPINTB 定时器3比较输出/PDPINTB 中断14 HOLD外部DMA 保持请求信号34 XINT2/ADCSOC 外部中断2/ADC 转换启动15 XINT1/XBIO 外部中断1/XBIO 输入 35 CLKOUT时钟输出16 DGND 数字地 36 - 空17 SPICLK SPI 时钟37 C6TRIP 比较单元6输出18 MCLKRA 接收数据时钟 38 RS 复位 19 SPISTE SPI 从动发送使能 39 DGND 数字地 20MBFSRA接收帧同步信号40DGND数字地达盛科技具体定义如表1-5所示:表1-5 P3管脚定义P3 管脚 对应2812 管脚 备 注P3 管脚 对应2812 管脚 备 注1 CAP5/QEP4 捕获单元输入521 - 空 2 DGND 数字地 22 - 空 3 CAP6/QEPI2 捕获单元输入623 - 空 4 DGND 数字地 24 - 空 5 PWM11PWM 输出11引脚25 - 空 6 - 空26 - 空 7 PWM12PWM 输出12引脚27 - 空 8 -空 28- 空 9 T3PWM/T3CMP定时器3输出29 - 空 10 -空 30 - 空 11 T4PWM/T4CMP 定时器4输出 31 - 空 12 BCANRX CAN 接收数据引脚32 - 空 13 TDIRB 定时器方向33 - 空 14 CANTXCAN 发送数据引脚34 DGND数字地15 TCLKINB 时钟输入B 35 - 空 16 CPU_CSCPU 片选36 DGND数字地17 - 空 37 - 空18 SCITXDASCI 异步串行口发送数据38 VCC3.3CPUCPU3.3V 电源19 - 空39 - 空20BSCIRXDASCI 异步串行口接收数据40VCC3.3CPUCPU3.3V 电源达盛科技具体定义如表1-5所示:表1-6 P4管脚定义P4 管脚 对应2812 管脚 备 注P4 管脚 对应2812 管脚 备 注1 CAP1/QEP1 捕获单元输入1 25 VCC3.3A 3.3A 电源2 CAP4/QEP4 捕获单元输入4 26 TCLKINB 时钟输入B3 CAP2QEP2 捕获单元输入2 27 VSSO 模拟地4 CAP5/QEP5 捕获单元输入5 28 VSSO 模拟地 5 CAP3/QEP3 捕获单元输入3 29 VSSO 模拟地6 CAP6/QEP6 捕获单元输入6 30 ADCINA3 采样/保持A 输入37 PWM1 PWM 输出1 31 ADCINA4 采样/保持A 输入48 PWM7 PWM 输出7 32 ADCINA5 采样/保持A 输入59 PWM2 PWM 输出2 33ADCINA6 采样/保持A 输入6 10 PWM8 PWM 输出8 34 ADCINA7 采样/保持A 输入711 PWM3 PWM 输出3 35VSSO模拟地 12 PWM9 PWM 输出9 36 VSSO 模拟地 13 PWM4 PWM 输出4 37 VSSO 模拟地 14 PWM10 PWM 输出10 38 ADCINB3 采样/保持B 输入3 15 PWM5PWM 输出539 ADCINB4 采样/保持B 输入4 16 PWM11 PWM 输出11 40 ADCINB5 采样/保持B 输入5 17 PWM6 PWM 输出641 ADCINB6 采样/保持B 输入6 18 PWM12 PWM 输出12 42 ADCINB7采样/保持B 输入719 VCC3.3A 3.3A 电源43 VSSO 模拟地 20 T3PWM/T3CMP 定时器3输出 44 VSSO 模拟地 21 VCC3.3A 3.3A 电源 45 RD 读信号线 22 T4PWM/T4CMP 定时器4输出 46 WE 写信号线 23 VCC3.3A 3.3A 电源 47 DGND 数字地 24TDIRB定时器方向48+5V+5V 电源达盛科技JUMP 跳线具体定义如下:表1-7 JUMP 跳线定义列表 跳线开关位置 功能 JUMP11-2 MP 工作方式 2-3 MC 工作方式 JUMP21-2 CPU 片选设置为高2-3CPU 片选设置为低指示灯说明² LED1 +5V 电源指示灯,亮时表示正常供电。
定点DSP芯片TMS320F2812实现快速算法应用
●应用与设计1T MS320F2812简介T MS320F2812是TI公司的一款用于控制的高性能、多功能、高性价比的32位定点DSP芯片。
该芯片兼容T MS320LF2407指令系统,最高可在150MH z主频下工作,并带有18k×16位0等待周期片上SRAM 和128k×16位片上F LASH(存取时间36ns)。
其片上外设主要包括2×8路12位ADC(最快80ns转换时间)、2路SCI、1路SPI、1路M cBSP、1路eCAN等,并带有两个事件管理模块(EVA、EV B),分别包括6路PWM/CMP、2路QEP、3路CAP、2路16位定时器(或T xPWM/T xCMP)。
另外,该器件还有3个独立的32位CPU定时器,以及多达56个独立编程的G PI O引脚,可外扩大于1M×16位程序和数据存储器。
T MS320F2812采用哈佛总线结构,具有密码保护机制,可进行双16×16乘加和32×32乘加操作,因而可兼顾控制和快速运算的双重功能。
通过对T MS320F2812定点DSP芯片合理的系统配置和编程可实现快速运算,本文着重对此加以说明。
2T MS320F2812基本系统配置2.1T MS320F2812时钟T MS320F2812的片上外设按输入时钟可分为如下4个组:(1)SY SOUT C L K组:包括CPU定时器和eCAN 总线,可由P LLCR寄存器动态地修改;(2)OSCC L K组:主要是看门狗电路,由W DCR 寄存器设置分频系数;(3)低速组:有SCI、SPI、M cBSP,可由LOSPCP寄存器设置分频系数;(4)高速组:包括EVA/B、ADC,可由HISPCP寄存器设置分频系数。
为了使系统具有较快的工作速度,除了定时器和SCI等少数需要低速时钟的地方,其它外设均可以150MH z时钟工作。
2.2存储空间图1所示是T MS320F2812的内部存储空间映射图。
TMS320F2812开发板 说明书
F2812的外部存储器接口XINTF的详细说明和编程操作请参考《TMS320F28X External Interface(XINTF) Reference Guid》 4. 外部扩ቤተ መጻሕፍቲ ባይዱ的控制/状态寄存器
开发板上配置有HOST USB接口,Ethernet接口,LCD接口,输入输出等控制 寄存器和状态寄存器等,它映射在F2812的Zone0 和 Zone1存储空间中,具体的 定义如下:
功能/名称 扩展的输出接口控制寄存器
寄存器 名称 OutRegs
发光二极管控制寄存器
LedRegs
网卡复位、485接收使能等控制寄存器
Led8Reg
键盘输入寄存器
KeyReg
扩展的输入接口控制寄存器
InReg
扩展的外部可屏蔽中断EXINT1—EXINT5状态寄存器 IFReg1
扩展的外部非屏蔽中断EXNMI1—EXNMI2状态寄存器 IFReg2
2.本板卡的平面图如下: 平面图上的标号和板卡的标号一一对应,详细的说明请看后面章节的说明。
第二章 入门
1. 1特点 采用32位定点DSP TMS320F2812(150M),方便电机控制,电力设备控制及工业控 制等。 片上存储器 FLASH 128K X 16位 SRAM 18K X 16位 BOOT ROM 4K X 16 位 OPT ROM 1K X 16位
IFReg2 LcdDat LcdCom AddrPort DataPort BaseAddr
0X0033FF Zone0 0X0039FE Zone0 0X0039FF Zone0 0x0035FE Zone0 0x0035FF Zone0 0x003700 Zone0
2位只读
tms320f2812定时器程序
tms320f2812定时器程序#include "DSP281x_Device.h" // DSP281x Headerfile Include File#include "DSP281x_Examples.h" // DSP281x Examples Include File// Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void);#define LEDS *(int *)0xc0000#define CTRGR *(int *)0x108000#define CTRLCDCMDR *(int *)0x108001#define CTRKEY *(int *)0x108001#define CTRLCDCR *(int *)0x108002#define CTRCLKEY *(int *)0x108002#define CTRLCDLCR *(int *)0x108003#define CTRLCDRCR *(int *)0x108004#define CTRLA *(int *)0x108005#define CTRLR *(int *)0x108007int i=0,nCount;unsigned int uLBD;void main(void){unsigned int uPort8000;InitSysCtrl();//初始化cpuDINT;//关中断InitPieCtrl();//初始化pie寄存器IER = 0x0000;//禁止所有的中断IFR = 0x0000;InitPieVectTable();//初始化pie中断向量表EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr;//指定中断服务子程序EDIS; // This is needed to disable write to EALLOW protected registersCpuTimer0.RegsAddr = &CpuTimer0Regs;// Initialize timer period to maximum:CpuTimer0Regs.PRD.all = 0xffff;// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):CpuTimer0Regs.TPR.all = 0;CpuTimer0Regs.TIM.all = 0;CpuTimer0Regs.TPRH.all = 0;// Make sure timer is stopped:CpuTimer0Regs.TCR.bit.TSS = 1;CpuTimer0Regs.TCR.bit.SOFT = 1;CpuTimer0Regs.TCR.bit.FREE = 1;// Reload all counter register with period value:CpuTimer0Regs.TCR.bit.TRB = 1;CpuTimer0Regs.TCR.bit.TIE = 1;// Reset interrupt counters:CpuTimer0.InterruptCount = 0;StartCpuTimer0();//启动定时器0// Enable CPU INT1 which is connected to CPU-Timer 0:IER |= M_INT1;// Enable TINT0 in the PIE: Group 1 interrupt 7PieCtrlRegs.PIEIER1.bit.INTx7 = 1;// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGMCTRGR=0; // 初始化ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40;// 关闭南北方向的交通灯uPort8000=CTRCLKEY;while ( 1 ){}}interrupt void cpu_timer0_isr(void){ int j,k;//CpuTimer0.InterruptCount++;// Acknowledge this interrupt to receive more interrupts from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF = 1;CpuTimer0Regs.TCR.bit.TRB = 1;if ( nCount==0 ){LEDS=uLBD;uLBD++; uLBD%=16;}nCount++; nCount%=194;}//===================================== ====================================== // No more.//===================================== ===。
MS320F2812外设的C语言程序设计
中断处理包括中断请求、中断判优、中断响应、中断服务、中断返 回等步骤。
中断优先级
在MS320F2812中,每个外设都有自己的中断优先级,可以通过编程 设置。
任务调度
任务调度的概念
任务调度是操作系统的一项基本功能,用于决定 哪些任务在何时运行。
任务调度的方式
常见的任务调度方式有先来先服务、最短作业优 先、最短剩余时间优先等。
Hale Waihona Puke 外设模块• GPIO端口
• 定时器/计数器 • A/D转换器 • PWM模块 • QEP模块 • SPI接口 • I2C接口
编程环境与工具链
Keil uVision集成开发环境 GCC编译器
CodeWarrior开发环境 IAR Embedded Workbench开发环境
02 外设初始化
GPIO初始化
控制器与传感器、执行器之间的连接
01
通过GPIO口进行连接,实现数据传输和控制信号的
输出。
电源模块的连接
02 为各个模块提供稳定的电源,保证系统的正常工作。
调试接口
03
提供JTAG和SWD等调试接口,方便进行软件编程和
调试。
软件编程与调试
开发环境
采用Code Composer Studio作 为开发环境,方便进行代码编写、 编译和调试。
指针与数组
指针
指针是C语言中用于存储变量地址的变量 。在MS320F2812外设的C语言程序中, 指针常用于访问外设寄存器地址。通过 指针访问寄存器可以更灵活地控制外设 的行为。
VS
数组
数组是C语言中用于存储相同类型数据元 素的集合。在MS320F2812外设的C语言 程序中,数组常用于存储配置参数或数据 缓冲区。使用数组可以方便地管理和操作 大量数据。
TMS320F2812串行口---PC机通信例程
TMS320F2812串行口---PC机通信例程//----------------------------------------------------//----------------------------------------------------// 名称: SCI串行口数据收发,下位机测试程序// 文件:Example_281xsci_demo.c// 规约:此程序用于进行DSP串口数据收发的演示,需要事先// 将DSP的SCI-A串行口与计算机的串行口相连;// 程序在RAM中运行,并使用CPU定时器0与串行口中断.// 说明:// 此程序向上位机定时发送数据,包括XF控制的闪灯状// 态与当前闪灯周期的大小;在运行时,程序另可接收// 上位机发送的指令或数据,用以改变闪灯状态或周期.//// 开关灯指令选择:// 内容| FF | 00// 功能|开灯|关灯//// 发送数据类型选择:// 内容| FF | 00// 功能|数据|指令//// 以下"发送"与"接收"均是上位机的操作// 即"上位机发送"与"上位机接收"// 数据发送格式:// AA | 00/FF | (00/FF)/XX |// 帧起始位|指令/数据选择位|(开关灯指令)/定时周期低字节|// XX | BB// 定时周期高字节|帧结束位//// 数据接收格式:// CC | XX |// 帧起始位|(开关灯指令)/定时周期低字节|// XX | 00/01 | DD// 定时周期高字节| LED灯状态位|帧结束位//// 可用串口调式助手或自编的上位机程序调试//// 作者:mrhfzing// 日期:2008-10-04// 修订:First Released//----------------------------------------------------- //----------------------------------------------------- //头文件#include "DSP281x_Device.h"#include "DSP281x_Examples.h"//函数原型声明interrupt void CpuTimer0Isr(void);interrupt void SciaRxIsr(void);void SciaFifoInit(void);void SciaInit(void);void SciaXmit(int a);//全局变量定义unsigned long lngTimerPrd; //CPU定时器定时周期char chrDataReceived[5];//串行口接收数据存储数组char chrDataSent[5]; //串行口发送数据存储数组Uint16 intLedStatus; //LED当前的亮灭状态Uint16 intCanRunSignal; //允许运行标志Uint16 intLedEnable; //使能LED变量void main(void){//局部变量定义Uint16 i;//1.初始化系统控制寄存器/PLL/看门狗/时钟InitSysCtrl();//2.配置GPIO的功能EALLOW;//设置D3(LED)的控制I/OGpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0; //将GPIOF14配置为I/O口GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1; //将GPIOF14配置为输出端口//设置SCI串行通信用的GPIO管脚为外设功能GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1;GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1;EDIS;//3.初始化PIE中断DINT; //禁用中断IER = 0x0000; //禁用CPU中断IFR = 0x0000; //清CPU中断标志位//初始化PIE控制寄存器InitPieCtrl();//初化PIE向量表InitPieVectTable();//4.初始化中断服务程序EALLOW;PieVectTable.TINT0 = &CpuTimer0Isr;PieVectTable.RXAINT = &SciaRxIsr;EDIS;InitCpuTimers();ConfigCpuTimer(&CpuTimer0,150,1000000); StartCpuTimer0();//5.使能上述所有中断PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能PIE PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能CPU定时器中断PieCtrlRegs.PIEIER9.bit.INTx1 = 1; //使能串行口接收中断IER = M_INT1 | M_INT9; //使能CPU中断:组1与组9 EINT;//6.初始化串行口设置SciaInit();SciaFifoInit();//7.程序主循环for(;;){if(intCanRunSignal == 1) //检查CPU定时中断是否发生{for(i = 0; i < 5; i++){SciaXmit(chrDataSent[i]);}intCanRunSignal = 0; //复位允许运行标志if(SciaRegs.SCIFFRX.bit.RXFIFST !=0 ){//以下代码用于复位FIFO指针,即"清空FIFO"SciaRegs.SCIFFRX.bit.RXFIFORESET = 0; //复位FIFO指针NOP;SciaRegs.SCIFFRX.bit.RXFIFORESET = 1; //重新使能接收FIFO NOP;}}}//-------------------------------------------------- //main函数结束//-------------------------------------------------- //其他功能函数//串行数据发送函数void SciaXmit(int a){SciaRegs.SCITXBUF = a;}//CPU定时器中断程序interrupt void CpuTimer0Isr(void){CpuTimer0.InterruptCount++; intCanRunSignal = 1;if(intLedEnable == 0x00FF){if(CpuTimer0.InterruptCount % 2 ==1){GpioDataRegs.GPFSET.bit.GPIOF14 = 1; intLedStatus = 1;}else{GpioDataRegs.GPFCLEAR.bit.GPIOF14 = 1; intLedStatus = 0;}else{GpioDataRegs.GPFCLEAR.bit.GPIOF14 = 1; intLedStatus = 0;}//为发送单元组织数据chrDataSent[0] = 0xCC;chrDataSent[1] = lngTimerPrd & 0x00FF; chrDataSent[2] = lngTimerPrd >> 8;chrDataSent[3] = intLedStatus;chrDataSent[4] = 0xDD;//提交CPU定时器中断PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//串行口初始化程序void SciaInit(void){//1停止位/无校验/非自测/空闲线协议/8位字符长度SciaRegs.SCICCR.all = 0x0007; //0000 0000 0000 0111 //复位串口/禁用唤醒与休眠/使能发送与接收SciaRegs.SCICTL1.all = 0x0003; //0000 0000 0000 0011 //使能RXRDY中断SciaRegs.SCICTL2.bit.RXBKINTENA = 1;//设置波特率9600//2400 | 4800 | 9600 | 19200 | 38400//0x07A0 | 0x03D0 | 0x01E7 | 0x00F3 | 0x0079 SciaRegs.SCIHBAUD = 0x01;SciaRegs.SCILBAUD = 0xE7;//重新使能串行口SciaRegs.SCICTL1.bit.SWRESET = 1;}//串行口FIFO初始化程序void SciaFifoInit(void){//复位发送FIFOSciaRegs.SCIFFTX.all = 0xC040; //1100 0000 0100 0000//复位接收FIFO/启用基于RXFFIVL匹配的RXFIFO中断/中断级别为5SciaRegs.SCIFFRX.all = 0x0025; //0000 0000 0010 0101//设置FIFO控制寄存器SciaRegs.SCIFFCT.all = 0x0000; //0000 0000 0000 0000//重新使能发送与接收FIFOSciaRegs.SCIFFTX.bit.TXFIFORESET = 1;SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;}//串行口接收中断服务程序interrupt void SciaRxIsr(void){Uint16 i;//中断一次,读5遍接收缓存,将RXFIFO中的5个数循环读入for(i = 0;i < 5; i++){chrDataReceived[i]=SciaRegs.SCIRXBUF.all;}//如果检测到数据帧,则进行数据提取if(chrDataReceived[0] == 0xAA && chrDataReceived[4] == 0xBB){if(chrDataReceived[1] == 0x00) //收到的为指令{intLedEnable = chrDataReceived[2];//接收上位机指令}if(chrDataReceived[1] == 0xFF) //收到的为数据{ //拼装定时周期数据lngTimerPrd = 0; //清零lngTimerPrd = chrDataReceived[2] + (chrDataReceived[3]<<8);//更新定时周期//InitCpuTimers();ConfigCpuTimer(&CpuTimer0,150,(lngTimerPrd*100));StartCpuTimer0();}}SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志位SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志位PieCtrlRegs.PIEACK.all|=0x100; //提交串行口中断}//-----------------------------------------------------------------------------//文件结束//-----------------------------------------------------------------------------//这次改用中文注释,免得以后连自己都看不明白。