⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xf.c

📁 学习DSP TMS320VC5402最好的入门例程
💻 C
字号:
#include "C5402DEF.h"

#define PLLMUL_10 0x9
#define PLLMUL_5  0x4
#define period 7999

int flag;

void delay(int n)
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<100;j++);
}

/******************************************************************************
*CLKMD寄存器中的PLLMUL、PLLDIV、PLLCOUNT和PLLON/OFF位只有在DIV模式下才能修改。*
*具体步骤:1、将PLLDIV位置0,转换到DIV模式。                                  *
*		  2、查询PLLSTATUS位,直到PLLSTATUS=0,表明模式转换完成              *
*		  3、设置PLLMUL和PLLDIV位,选择期望的乘法系数                        *
*		  4、设置PLLCOUNT位,选择合适的延迟时间                              *
*		  5、将PLLDIV位置1,转换到PLL模式                                    *
******************************************************************************/

void PLL_init(int mul)
{
 	SREG->CLKMD=0x0000;
 	while(SREG->CLKMD&(1<<CLKMD_PLLSTATUS));
	SREG->CLKMD=(mul<<CLKMD_PLLMUL)|(0x7D<<CLKMD_PLLCOUNT)&(~(1<<CLKMD_PLLDIV))|(1<<CLKMD_PLLONOFF)|(1<<CLKMD_PLLNDIV);
 	//SREG->CLKMD=0x93EF;	
}

void timer0_init(void)
{
	Disable();
  	SREG->PMST&=0x007f;//用0x0001加载IPTR,中断向量移到0x0080开始的程序存储器空间
  	SREG->PMST|=0x0080;
  	TIMER0->TCR|=(1<<TCR_TSS);//停止计数
	TIMER0->TCR|=(9<<TCR_TDDR);//T=Tc*(PRD+1)*(TDDR+1)
  	TIMER0->PRD=period;
	TIMER0->TCR|=(1<<TCR_TRB);//装载PRD及TDDR
  	TIMER0->TCR&=~(1<<TCR_TSS);//开始计数
	SREG->IFR|=(1<<IFR_TINT0);//清除已经中断标志
 	SREG->IMR|=(1<<IMR_TINT0);//开定时器中断
	Enable();//开全局中断
}

void main(void)
{
	PLL_init(PLLMUL_10);
	timer0_init();
    for(;;)
    { 		
        if(flag)
		//delay(10000);
			asm(" SSBX XF");
		else
		//delay(10000);
			asm(" RSBX XF");
    }
}

interrupt void time0_isr(void)
{
	flag=!flag;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -