您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 最具参考价值的程序例程TMS320F28xx(黄书程序电子版)
1第3章TMS320X28xx处理器及其应用例1、初始化锁相环及外设时钟函数//---------------------------------------------------------------------------------------------------------------------//初始化锁相环及外设时钟函数:InitPll://---------------------------------------------------------------------------------------------------------------------voidInitPll(Uint16val){volatileUint16iVol;if(SysCtrlRegs.PLLCR.bit.DIV!=val){EALLOW;SysCtrlRegs.PLLCR.bit.DIV=val;EDIS;//在锁相环时钟频率切换过程中,只有当锁相环稳定后CPU才会切换到新的PLL设置。因此在设置完PLLCR后需要等待PLL稳定。PLL的切换时间大约等于131072个输入时钟周期。DisableDog();for(iVol=0;iVol((131072/2)/12);iVol++){}}}//为降低系统功耗,不使用的外设时钟需要屏蔽。//但如果使用外设必须首先使能相应的外设时钟。voidInitPeripheralClocks(void){EALLOW;//HISPCP/LOSPCP预定表寄存器设置SysCtrlRegs.HISPCP.all=0x0001;SysCtrlRegs.LOSPCP.all=0x0002;//使能使用的外设时钟SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;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;EDIS;2}例2、.cmd格式文件举例MEMORY{PAGE0:/*本例中H0分成PAGE0和PAGE1*//*BEGINisusedfortheboottoHObootloadermode*//*如果从XINTFZone7空间boot,RESET装载复位向量,*//*其他复位矢量从BOOTROM中装载*/RAMM0:origin=0x000000,length=0x000400BEGIN:origin=0x3F8000,length=0x000002PRAMH0:origin=0x3F8002,length=0x0014FEBOOTROM:origin=0x3FF000,length=0x000FC0RESET:origin=0x3FFFC0,length=0x000002PAGE1:RAMM1:origin=0x000400,length=0x000400L0L1RAM:origin=0x008000,length=0x002000DRAMH0:origin=0x3f9500,length=0x000B00}SECTIONS{/*设置boottoH0模式:代码起始段(DSP281x_CodeStartBranch.asm)*//*然后重新定位用户代码开始入口。将该段放在H0的起始*/codestart:BEGIN,PAGE=0ramfuncs:PRAMH0PAGE=0.text:PRAMH0,PAGE=0.cinit:PRAMH0,PAGE=0.pinit:PRAMH0,PAGE=0.switch:RAMM0,PAGE=0.reset:RESET,PAGE=0,TYPE=DSECT/*没用*/.stack:RAMM1,PAGE=1.ebss:DRAMH0,PAGE=1.econst:DRAMH0,PAGE=1.esysmem:DRAMH0,PAGE=1DLOG:L0L1RAM,PAGE=1/********************************************************************//*IQmath函数表定位:*//********************************************************************//*对于没有BOOTROM的器件使用:*/3/*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////==============================================================#includeDSP281x_Device.h//DSP281xHeaderfileIncludeFile#includeDSP281x_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中断并清除所有中断标志4IER=0x0000;IFR=0x0000;//初始化PIE控制寄存器,参考DSP28_PieCtrl.c文件InitPieVectTable();//将本例程所使用的中断向量重新映射,使其指向中断服务相应的程序EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;EDIS;//Step4、初始化所有外设(本例中不需要)//InitPeripherals();InitCpuTimers();//在本例程中仅初始化Cpu定时器//配置CPU-Timer0每间隔1秒产生一次中断//150MHzCPU频率,周期为1秒(采用微妙的形式描述)ConfigCpuTimer(&CpuTimer0,100,1500000);StartCpuTimer0();//Step5.、用户特定代码,使能中断//使能连接到CPU-Timer0的CPUINT1IER|=M_INT1;//使能位于PIE中的组1的第7个中断TINT0PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能全局中断,并配置位real-timedebug模式EINT;//使能全局中断INTMERTM;//使能全局realtime中断DBGM//Step6.、IDLEloop等待产生中断for(;;);}interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;//响应中断并准备接收更多的中断PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;}5//==============================================================////文件名称:DSP281x_CpuTimers.c////功能描述:DSP281xCPU32-bit定时器初始化及相关函数////==============================================================#includeDSP281x_Device.h//包含的DSP281x头文件#includeDSP281x_Examples.h//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=0CpuTimer0.InterruptCount=0;//CpuTimer1的CpuTimer2为DSPBIOS&其他RTOS保留//因此相应的定时器初始化代码被注释//初始化各自定时器的寄存器指向相应的地址6//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
本文标题:最具参考价值的程序例程TMS320F28xx(黄书程序电子版)
链接地址:https://www.777doc.com/doc-5663025 .html