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

📄 cap.c

📁 2407DSP开发应用程序实例(有14个常用模块程序)
💻 C
字号:

//	主程序
// 此波形输入CAP4引脚,待CAP4捕捉该PWM的10次上升沿后,停止捕捉,并把10
// 次捕捉值存于数组result[10]中
#include  "register.h"
// 初始化子程序
int    result[10];					// 定义一个存储结果的数组
int    k=0;						// 定义的中断次数值
// 系统初始化子程序
void  initial()
{
  	asm(" setc   INTM");		// 禁止所有中断
	asm(" setc	SXM");				// 抑制符号位扩展
	asm(" clrc	OVM");				// 累加器中结果正常溢出
	asm(" clrc	CNF");			// B0被配置为数据存储空间
	SCSR1=0x81FE;			// CLKIN=10M,CLKOUT=4CLKIN=40M
	WDCR=0x0E8;			// 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     					// 即WD保护位复位后的缺省值为1,故可以用
		      					// 软件禁止看门狗
	IMR=0x0000;					//  禁止所有中断
	IFR=0x0FFFF;			// 清除全部中断标志,"写1清0"
}
// 捕获单元4初始化子程序	
void  CAP4INT()    
{    
    MCRC=MCRC|0X0080;
    T3PR=0X0FFFF;			// 通用定时器3的周期寄存器为0XFFFF
	T3CON=0X1400;			// 通用定时器3为连续增计数模式
	T3CNT=0X00;				// 计数器清0
    WSGR=0x0000;			// 禁止所有等待状态
	CAPCONB=0X0A240;		// 设置捕获单元4为检测上升沿,且选择TIMER3为时钟
	asm(" clrc   INTM");		// 开总中断
	IMR=0X08;  				// 允许中断优先级4的中断
	EVBIMRC=EVBIMRC|0X0001;	// 允许CAPTURE1中断  
	EVBIFRC=EVBIFRC|0X0FFFF; 

}

// 主程序
main()
{
	initial();						// 系统初始化
	CAP4INT();					// 捕获单元4初始化
	T3CON=T3CON|0X0040; 		// 启动定时器3
	while(1)
	{ 
		if(k==10)  break;			// k保存中断次数值,是全局变量
	}
	asm(" setc  INTM");			// 捕捉10次后,禁止再中断
}
// 若是由于干扰引起其它中断,则执行此子程序         
void  interrupt nothing()
{
//	asm(" clrc  INTM");				// 返回前开中断
	return;
}
// 捕捉中断服务程序
void  interrupt  capint()
{
      int   flag;
      flag=EVBIFRC&0X01;		// 判断是否是CAP4中断
      if(flag!=0x01)
      {
		asm(" clrc  INTM");			// 返回前开中断
		return;					// 如果不是CAP4中断,则直接返回
       }
	  else
	  {
		 load();						// 如果是CAP4中断,则装载捕捉值
		EVBIFRC=EVBIFRC|0x01;		// 写"1"清除CAP4中断标志
		asm(" clrc  INTM");			// 返回前开中断
		return;					// 中断返回
	  }
}
// 装载捕捉值子程序
int  load()
{
			
			result[k]=CAP4FIFO;				// 读取捕捉值,存于相应的数组	 
			k++;
		
		
}

⌨️ 快捷键说明

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