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

📄 timertest.asm

📁 针对SHARC系列DSP的卷积、自相关函数、FFT、FIR源代码
💻 ASM
字号:
/*--------------------------------------------------------------------------
    INCLUDES
--------------------------------------------------------------------------*/
#include <def21065l.h>

/*--------------------------------------------------------------------------
   CONSTANT & MACRO DEFINITIONS
--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
   GLOBAL DECLARATIONS
--------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------*/
.SEGMENT/DM     seg_dmda;

.VAR   Flag6Stat;

.ENDSEG;

/*---------------------------------------------------------------------------*/

.SEGMENT/PM seg_int_rst;
			NOP; JUMP _main; RTI; RTI;
.ENDSEG;

///////////////////////////////////////////
.SEGMENT/PM  seg_int_tmr;
			 NOP; CALL tmrhdl; RTI; RTI;
.ENDSEG;
//////////////////////////////////////////

.SEGMENT /PM seg_pmco;

/* ---------------------------------------------------------------------------
;
;	main:        Notes demo main function.
;               
----------------------------------------------------------------------------*/
_main:
    R0=1;
    DM(Flag6Stat)=R0;//初始化指示灯状态变量
////////////定时器初始化//////////
   	BIT CLR MODE2 TIMEN0;            /* timers TMINTL  */
   	BIT CLR MODE2 TIMEN1;            /* timers TMINTL  */
	BIT SET MODE2 PWMOUT0;           /*设置定时器0为PWM输出*/
	BIT SET MODE2 INT_HI0;			 //置定时器0使用优先级高的中断
   	BIT SET MODE1 IRPTEN;            //使能全局中断                    
   	BIT SET IMASK TMZHI;			 //打开定时器0中断INT_HI0的屏蔽位
   	BIT CLR MODE1 NESTM;			 //使能中断嵌套
   	
   	////////////////////////////
   R0 = 0x00400000;         /* 设置定时器0中断周期 */
   DM(TPERIOD0) = R0;       
   R0 = 0x00040000;         /* 设置PWM输出的占空比 */ 
   DM(TPWIDTH0) = R0;       
   BIT SET MODE2 TIMEN0;    /* 使能定时器0工作  */

wait:			        	/* 等待中断,以便处理 */

   IDLE;
   JUMP wait;

_main.end:
.ENDSEG;

//////////////////////////
.SEGMENT /PM seg_pmco;
tmrhdl: nop;			//服务程序入口
        R0=DM(Flag6Stat);//取出指示灯的状态,进行判断
        R1=0x1;
        R0=R0 and R1;
        if eq jump LightLED6;//如果灯的状态为灭,则跳转到点亮灯的程序段执行
        R0 = DM(IOSTAT);     //如果灯的状态为亮,则顺序执行使灯灭
		R0 = BCLR R0 BY 2;
		DM(IOSTAT)=R0;
		jump tmrhdl_exit;
LightLED6:
        R0 = DM(IOSTAT);
		R0 = BSET R0 BY 2;
		DM(IOSTAT)=R0;
tmrhdl_exit:
        R0=DM(Flag6Stat);//保存当前灯的状态,以便下次使用
        R0=R0+1;
        DM(Flag6Stat)=R0;
		rts;
.ENDSEG;

⌨️ 快捷键说明

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