最具参考价值的程序例程TMS320F28xx黄书程序电子版Word文档格式.docx
- 文档编号:21109410
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:50
- 大小:37.52KB
最具参考价值的程序例程TMS320F28xx黄书程序电子版Word文档格式.docx
《最具参考价值的程序例程TMS320F28xx黄书程序电子版Word文档格式.docx》由会员分享,可在线阅读,更多相关《最具参考价值的程序例程TMS320F28xx黄书程序电子版Word文档格式.docx(50页珍藏版)》请在冰豆网上搜索。
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
例2、.cmd格式文件举例
MEMORY
PAGE0:
/*本例中H0分成PAGE0和PAGE1*/
/*BEGINisusedforthe"
boottoHO"
bootloadermode*/
/*如果从XINTFZone7空间boot,RESET装载复位向量,*/
/*其他复位矢量从BOOTROM中装载*/
RAMM0:
origin=0x000000,length=0x000400
BEGIN:
origin=0x3F8000,length=0x000002
PRAMH0:
origin=0x3F8002,length=0x0014FE
BOOTROM:
origin=0x3FF000,length=0x000FC0
RESET:
origin=0x3FFFC0,length=0x000002
PAGE1:
RAMM1:
origin=0x000400,length=0x000400
L0L1RAM:
origin=0x008000,length=0x002000
DRAMH0:
origin=0x3f9500,length=0x000B00
SECTIONS
/*设置"
boottoH0"
模式:
代码起始段(DSP281x_CodeStartBranch.asm)*/
/*然后重新定位用户代码开始入口。
将该段放在H0的起始*/
codestart:
>
BEGIN,PAGE=0
ramfuncs:
PRAMH0PAGE=0
.text:
PRAMH0,PAGE=0
.cinit:
.pinit:
.switch:
RAMM0,PAGE=0
.reset:
RESET,PAGE=0,TYPE=DSECT/*没用*/
.stack:
RAMM1,PAGE=1
.ebss:
DRAMH0,PAGE=1
.econst:
DRAMH0,PAGE=1
.esysmem:
DLOG:
L0L1RAM,PAGE=1
/********************************************************************/
/*IQmath函数表定位:
*/
/*对于没有BOOTROM的器件使用:
*/
/*IQmathTables:
load=BOOTROM,PAGE=0*/
/*F2810/12器件(BootROM内包含相应函数的查表信息)使用:
*/
IQmathTables:
load=BOOTROM,type=NOLOAD,PAGE=0
/*IQmath函数定位:
*/
IQmath:
load=PRAMH0,PAGE=0
例3、定时器中断应用举例
//==============================================================
//文件名称:
Example_281xCpuTimer.c
//功能描述:
采用CPUTimer0定时,在定时器中断服务程序中记录中断的次数。
//
//观察的变量:
//CpuTimer0.InterruptCount
#include"
DSP281x_Device.h"
//DSP281xHeaderfileIncludeFile
DSP281x_Examples.h"
//DSP281xExamplesIncludeFile
//函数声明
interruptvoidcpu_timer0_isr(void);
voidmain(void)
//Step1、初始化系统控制寄存器,PLL,看门狗,时钟位默认状态
//该函数在后面的DSP28_SysCtrl.c文件中查找
InitSysCtrl();
//Step2、GPIO初始化本例中不使用
//InitGpio();
//Step3、清除所有中断并初始化PIE中断向量表,禁止所有CPU中断
DINT;
//初始化PIE控制寄存器为其默认状态(所有PIE中断被禁止并且标志被清除)
InitPieCtrl();
//禁止所有CPU中断并清除所有中断标志
IER=0x0000;
IFR=0x0000;
//初始化PIE控制寄存器,参考DSP28_PieCtrl.c文件
InitPieVectTable();
//将本例程所使用的中断向量重新映射,使其指向中断服务相应的程序
PieVectTable.TINT0=&
cpu_timer0_isr;
//Step4、初始化所有外设(本例中不需要)
//InitPeripherals();
InitCpuTimers();
//在本例程中仅初始化Cpu定时器
//配置CPU-Timer0每间隔1秒产生一次中断
//150MHzCPU频率,周期为1秒(采用微妙的形式描述)
ConfigCpuTimer(&
CpuTimer0,100,1500000);
StartCpuTimer0();
//Step5.、用户特定代码,使能中断
//使能连接到CPU-Timer0的CPUINT1
IER|=M_INT1;
//使能位于PIE中的组1的第7个中断TINT0
PieCtrlRegs.PIEIER1.bit.INTx7=1;
//使能全局中断,并配置位real-timedebug模式
EINT;
//使能全局中断INTM
ERTM;
//使能全局realtime中断DBGM
//Step6.、IDLEloop等待产生中断
for(;
;
);
}
interruptvoidcpu_timer0_isr(void)
CpuTimer0.InterruptCount++;
//响应中断并准备接收更多的中断
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
DSP281x_CpuTimers.c
DSP281xCPU32-bit定时器初始化及相关函数
//包含的DSP281x头文件
//DSP281xExamples头文件
structCPUTIMER_VARSCpuTimer0;
//CpuTimer1的CpuTimer2保留,由DSPBIOS&
其他RTOS使用
//structCPUTIMER_VARSCpuTimer1;
//structCPUTIMER_VARSCpuTimer2;
//---------------------------------------------------------------------------
//初始化CPU定时器
//该函数将3个定时器初始化为一个确定的状态
voidInitCpuTimers(void)
//CPUTimer0
//初始化各自定时器的寄存器指向相应的地址
CpuTimer0.RegsAddr=&
CpuTimer0Regs;
//初始化定时器周期为最大值
CpuTimer0Regs.PRD.all=0xFFFFFFFF;
//初始化预定标计数器,分频系数为1(时钟:
SYSCLKOUT)
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TPRH.all=0;
//确认定时器处于停止计数状态
CpuTimer0Regs.TCR.bit.TSS=1;
//使用周期寄存器的值装载定时器计数寄存器
CpuTimer0Regs.TCR.bit.TRB=1;
//复位中断计数标量InterruptCount=0
CpuTimer0.InterruptCount=0;
//CpuTimer1的CpuTimer2为DSPBIOS&
其他RTOS保留
//因此相应的定时器初始化代码被注释
//初始化各自定时器的寄存器指向相应的地址
//CpuTimer1.RegsAddr=&
CpuTimer1Regs;
//CpuTimer2.RegsAddr=&
CpuTimer2Regs;
//初始化定时器周期为最大值
//CpuTimer1Regs.PRD.all=0xFFFFFFFF;
//CpuTimer2Regs.PRD.all=0xFFFFFFFF;
//确认定时器处于停止计数状态
//CpuTimer1Regs.TCR.bit.TSS=1;
//CpuTimer2Regs.TCR.bit.TSS=1;
//使用周期寄存器的值装载定时器计数寄存器
//CpuTimer1Regs.TCR.bit.TRB=1;
//CpuTimer2Regs.TCR.bit.TRB=1;
//复位中断计数标量
//CpuTimer1.InterruptCount=0;
//CpuTimer2.InterruptCount=0;
//配置Cpu定时器函数
//该函数初始化指定定时器的周期和频率
voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod)
Uint32temp;
//初始化周期
Timer->
CPUFreqInMHz=Freq;
PeriodInUSec=Period;
temp=(long)(Freq*Period);
RegsAddr->
PRD.all=temp;
//设置预定标参数(SYSCLKOUT):
TPR.all=0;
TPRH.all=0;
//初始化定时器控制寄存器
TCR.bit.TSS=1;
//1=Stoptimer,0=Start/RestartTimer
TCR.bit.TRB=1;
//1=reloadtimer
TCR.bit.SOFT=1;
TCR.bit.FREE=1;
//TimerFreeRun
TCR.bit.TIE=1;
//0=Disable/1=EnableTimerInterrupt
//复位中断计数
InterruptCount=0;
例4、利用事件管理器输出多种频率的正弦信号输出例程
//***************************************************************************
EVsine.c
//主要功能:
DSP28T1PWM-输出产生正弦波,
//使能看门狗
IQmathLib.h"
#pragmaDATA_SECTION(sine_table,"
IQmathTables"
_iq30sine_table[512];
//函数原型声明
voidGpio_select(void);
voidInitSystem(void);
interruptvoidT1_Compare_isr(void);
//定时器1中断服务程序
InitSystem();
//初始化DSP内核寄存器
Gpio_select();
//设置GPIO引脚功能
//初始化外设中断扩展单元(代码在:
DSP281x_PieCtrl.c)
//初始化外设中断扩展向量表(代码在:
DSP281x_PieVect.c)
//重新映射定时器1(Timer1)的比较中断入口
//允许更改保护的寄存器
PieVectTable.T1CINT=&
T1_Compare_isr;
EDIS;
//禁止更改保护的寄存器
//使能T1比较中断:
PIE-组2,中断5
PieCtrlRegs.PIEIER2.bit.INTx5=1;
//使能CPUINT2,GP-Timer1的比较中断连接到该中断
IER=2;
//全局中断使能,并使能具有更高优先级的适时调试方式
EINT;
//使能全局中断INTM
ERTM;
//使能全局适时中断DBGM
//配置事件管理器AEVA
//假定事件管理器A的时钟已经在InitSysCtrl()中使能;
//T1/T2逻辑驱动T1PWM/T2PWM;
EvaRegs.GPTCONA.bit.TCMPOE=1;
//GPTimer1比较输出配置:
低电平有效
EvaRegs.GPTCONA.bit.T1PIN=1;
EvaRegs.T1CON.bit.FREE=0;
//仿真操作时挂起
EvaRegs.T1CON.bit.SOFT=0;
EvaRegs.T1CON.bit.TMODE=2;
//连续递增计数模式
EvaRegs.T1CON.bit.TPS=0;
//预定标系数=1:
75MHz
EvaRegs.T1CON.bit.TENABLE=0;
//禁止GPTimer1操作
EvaRegs.T1CON.bit.TCLKS10=0;
//使用内部时钟
EvaRegs.T1CON.bit.TCLD10=0;
//等于0时比较装载
EvaRegs.T1CON.bit.TECMPR=1;
//使能比较操作
EvaRegs.T1PR=1500;
EvaRegs.T1CMPR=EvaRegs.T1PR/2;
EvaRegs.EVAIMRA.bit.T1CINT=1;
EvaRegs.T1CON.bit.TENABLE=1;
//使能GPTimer1
while
(1)
{
EALLOW;
SysCtrlRegs.WDKEY=0xAA;
//看门狗操作
}
//通用IO选择
voidGpio_select(void)
GpioMuxRegs.GPAMUX.all=0x0;
//所有GPIO端口配置成I/O方式
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6=1;
//T1PWM有效
GpioMuxRegs.GPBMUX.all=0x0;
GpioMuxRegs.GPDMUX.all=0x0;
GpioMuxRegs.GPFMUX.all=0x0;
GpioMuxRegs.GPEMUX.all=0x0;
GpioMuxRegs.GPGMUX.all=0x0;
GpioMuxRegs.GPADIR.all=0x0;
//GPIOPORT作为输入
GpioMuxRegs.GPBDIR.all=0x0;
GpioMuxRegs.GPDDIR.all=0x0;
GpioMuxRegs.GPEDIR.all=0x0;
GpioMuxRegs.GPFDIR.all=0x0;
GpioMuxRegs.GPGDIR.all=0x0;
GpioMuxRegs.GPAQUAL.all=0x0;
//设置GPIO量化值为0
GpioMuxRegs.GPBQUAL.all=0x0;
GpioMuxRegs.GPDQUAL.all=0x0;
GpioMuxRegs.GPEQUAL.all=0x0;
//系统初始化
voidInitSystem(void)
SysCtrlRegs.WDCR=0x00AF;
//配置看门狗
//0x00E8禁止看门狗,预定标系数Prescaler=1
//0x00AF使能看门狗,预定标系数Prescaler=64
SysCtrlRegs.SCSR=0;
//看门狗产生RESET
SysCtrlRegs.PLLCR.bit.DIV=10;
//设置系统锁相环倍频系数5
SysCtrlRegs.HISPCP.all=0x1;
//配置高速外设时钟预定标系数:
除以2
SysCtrlRegs.LOSPCP.all=0x2;
//配置低速外设时钟预定标系数:
除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参考 价值 程序 例程 TMS320F28xx 黄书 电子版