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

📄 pwm.c

📁 利用ADS1.2开发的S3C2410平台下步进电机程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*      2005-08-15      Created initial version 1.0                      */
/*************************************************************************/

 void MotorOn(int flag)
 {	
 	EnableController();
    	
 	switch(flag)
 	{
		case TIMER2:
          		SetTimer(TIMER2);
		        AngleCtrl(ANGLECTRL);
		      	
		      	rTCFG0 = 0xff00;//set timer2 Prescaler=255
		  	
		  	rTCFG1 &= 0xffff0fff;//set timer2 mux  divider value=2
		  	
		      	SetClkFreq(SPEEDCTRL,TIMER2);
		  	
		  	rTCON |= (1<<15)|(1<<13);//auto load,manual update
		  	
		  	rSRCPND = 0x1000;//Timer2 interrupt request
		  	
		  	rINTMSK &= ~(BIT_TIMER2);//enable Timer2 interrupt
			rTCON = 0x9000;//auto reload;start for timer2;clear manual update bit;close inverter
			break;
		case TIMER3:
          		SetTimer(TIMER3);
		        AngleCtrl(ANGLECTRL);
          		rTCFG0 = 0xff00;//set timer3 Prescaler=255
	
			rTCFG1 &= 0xfff0ffff;         //set timer3 mux  divider value=2

			SetClkFreq(SPEEDCTRL,TIMER3);
			
			rTCON |= (1<<19)|(1<<17);//auto load,manual update

			rSRCPND = 0x2000;

		    	rINTMSK &= ~(BIT_TIMER3);//enable Timer3 interrupt
		    	
			rTCON = 0x90000;//auto reload;start for timer3;clear manual update bit;close inverter
			break;
		default:
			break;
 	}
	return;
 }

/*************************************************************************/
/*                                                                       */
/* FUNCTION                                                              */
/*                                                                       */
/*      MotorOff			                                         */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*     Motor Off function				                 */
/*                                                                       */
/* AUTHOR                                                                */
/*                                                                       */
/*      Li-li zhang         shenzhen watertek                         */
/*                                                                       */
/* INPUTS                                                                */
/*      flag:     								*/
/*			TIMER2					*/
/*		   or	TIMER3						*/
/*                                                                       */
/* OUTPUTS                                                               */
/*                                                                       */
/*      None      	                                                 */
/*                                                                       */
/* HISTORY                                                               */
/*                                                                       */
/*         DATE                    REMARKS                               */
/*                                                                       */
/*      2005-08-15      Created initial version 1.0                      */
/*************************************************************************/

 void MotorOff(int flag)
 {
 	switch(flag)
 	{
		case TIMER2:
		 	rTCON = 0x0;//stop timer
		 	rINTMSK |= BIT_TIMER2;//disable interrupt
		 	break;
		case TIMER3:
			rTCON = 0x0;
			rINTMSK |= BIT_TIMER3;
			break;
		default:
			break;
 	}
 	return;
 }


 /*************************************************************************/
  /*                                                                       */
  /* FUNCTION                                                              */
  /*                                                                       */
  /*      AngleCtrl                                                   */
  /*                                                                       */
  /* DESCRIPTION                                                           */
  /*                                                                       */
  /*     Angle Control function                                */
  /*                                                                       */
  /* AUTHOR                                                                */
  /*                                                                       */
  /*      Li-li zhang         shenzhen watertek                         */
  /*                                                                       */
  /* INPUTS                                                                */
  /*      flag:                                   */
  /*          1--full step                   */
  /*          2--1/2 step                  */
  /*		3--1/4 step						*/
  /*		4--1/8 step						*/
  /*                                                                       */
  /* OUTPUTS                                                               */
  /*                                                                       */
  /*      None                                                         */
  /*                                                                       */
  /* HISTORY                                                               */
  /*                                                                       */
  /*         DATE                    REMARKS                               */
  /*                                                                       */
  /*      2005-08-15      Created initial version 1.0                      */
  /*************************************************************************/

 void AngleCtrl(int flag)
 {	
 	rGPGUP |= 0x808;
 	rGPGCON = rGPGCON & 0xff7fff7f |(1<<6)|(1<<22);
	switch(flag)
	{
		case 4:
			rGPGDAT &= 0xf7f7;
			break;
		case 3:
			rGPGDAT = rGPGDAT & 0xfff7 |(1<<11);
			break;
		case 2:
			rGPGDAT = rGPGDAT & 0xf7ff |(1<<3);
			break;
		case 1:
			rGPGDAT |=0x808;
			break;
		default:
			break;
	}
	return;
 }

/*************************************************************************/
/*                                                                       */
/* FUNCTION                                                              */
/*                                                                       */
/*      SetTimer		                                         */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*     Set Timer function				                 */
/*                                                                       */
/* AUTHOR                                                                */
/*                                                                       */
/*      Li-li zhang         shenzhen watertek                         */
/*                                                                       */
/* INPUTS                                                                */
/*      flag:     								*/
/*			TIMER2					*/
/*		   or	TIMER3					*/
/*                                                                       */
/* OUTPUTS                                                               */
/*                                                                       */
/*      None      	                                                 */
/*                                                                       */
/* HISTORY                                                               */
/*                                                                       */
/*         DATE                    REMARKS                               */
/*                                                                       */
/*      2005-08-15      Created initial version 1.0                      */
/*************************************************************************/

void SetTimer(int flag)
{
	switch(flag)
	{
		case TIMER2:
          		rGPBUP |= 0x4;
			rGPBCON = rGPBCON & 0xffff0f |(1<<5);//select timer2(GPB2)
			break;
		case TIMER3:
          		rGPBUP |= 0x8;
			rGPBCON = rGPBCON & 0xffff0f |(1<<7);//select timer3(GPB3)
			break;
		default:
			break;
	}
	
	return;
}

/*************************************************************************/
/*                                                                       */
/* FUNCTION                                                              */
/*                                                                       */
/*      SetClkFreq	                                         */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*     Set Clock Frequency function				                 */
/*                                                                       */
/* AUTHOR                                                                */
/*                                                                       */
/*      Li-li zhang         shenzhen watertek                         */
/*                                                                       */
/* INPUTS  								*/
/*	  freq:									*/
/*			clock frequency			*/
/*									*/
/*      flag:     								*/
/*			TIMER2					*/
/*		   or	TIMER3					*/
/*                                                                       */
/* OUTPUTS                                                               */
/*                                                                       */
/*      None      	                                                 */
/*                                                                       */
/* HISTORY                                                               */
/*                                                                       */
/*         DATE                    REMARKS                               */
/*                                                                       */
/*      2005-08-15      Created initial version 1.0                      */
/*************************************************************************/

void SetClkFreq(int freq, int flag)
{
	int tclk=0,count=0;
    
    	tclk = PCLK/(PRESCALE+1)/DIVIDER;
        count = tclk/freq;
	switch(flag)
     	{
     		case TIMER2:
          		rTCNTB2 = count;
                	rTCMPB2 = count/LEVEL;
			break;
		case TIMER3:
          		rTCNTB3 = count;
                	rTCMPB3 = count/LEVEL;
			break;
		default:
			break;
     	}
    	return;
}

⌨️ 快捷键说明

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