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

📄 main.c

📁 ICETEK-VC5509-A 步进电机源代码
💻 C
字号:
/////////////////////////////////////////////////////////////
//   EDU Lab -- SAMotor    Ver1.01                         //
//   For CTR4.0                                            //
//   SAMotor Contor by using TMS320VC5509A's Timer0        //
//   All Rights opened and no onus                         //
//   Write by Daniel Hawk                                  //
//   Realtime Co.ltd.                                      //
//   2005.Jan                                              //
/////////////////////////////////////////////////////////////
// Define Ioport About Timer0
ioport unsigned int *tim0; 
ioport unsigned int *prd0; 
ioport unsigned int *tcr0; 
ioport unsigned int *prsc0;  

// End of Define Ioport About Timer0
#include "myapp.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
void INTR_init( void );
void TIME_init(void);

int nCount,nStep,nAddStep;
unsigned int uTimPrd0;

unsigned int pwm2[8]={ 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e };
main()
{
	int sEnd;
	unsigned char dbScanCode,tKey;
	
	nCount=0; nStep=1;
	sEnd=1,nAddStep=1;
	uTimPrd0=0x1002;
	CLK_init();
	SDRAM_init();
	InitCTR();
	CTRLR=0x0c2;
	TIME_init();
	INTR_init();
	do
	{
		if ( nCount>16 )
		{
			nCount=0;
			dbScanCode=GetKey();	// Scan for Keyboard input

			tKey=CTRCLKEY;			// Clear Keyboard scan buffer
			if ( dbScanCode!=0 && dbScanCode!=0x0ff )
			{
				switch(dbScanCode)
				{
					case SCANCODE_Enter:   // Exit Program
						sEnd=0;
						break;
					case SCANCODE_4:       // Motor Turn Forward
						nAddStep=1;
						break;
					case SCANCODE_6:       // Motor Turn Backward
						nAddStep=-1;
						break;
					case SCANCODE_Minus:   // Motor Speed Down
						uTimPrd0+=0x800;
						if(uTimPrd0>=0x8000)
							uTimPrd0=0x8002;
						asm( " BSET INTM");
						TIME_init();
						asm(" BCLR INTM");
						break;
					case SCANCODE_Plus:    // Motor Speed up
						uTimPrd0-=0x800;
						if(uTimPrd0<=0x1000)
							uTimPrd0=0x1002;
						asm( " BSET INTM");
						TIME_init();
						asm(" BCLR INTM");
						break;
				}
			}
		}

	}while(sEnd);
	exit(0);
	

}

void interrupt Timer()
{
	CTRLR=pwm[nStep];
	nStep+=nAddStep;
	if ( nStep<0 )	nStep=7;
	else if ( nStep>7 )	nStep=0;
	nCount++; 
}

void INTR_init( void )
{
	IVPD=0x80;
	IVPH=0x80;
	IER0=0x10;
	DBIER0 =0x10;
	IFR0=0xffff;
	asm(" BCLR INTM");

}

void TIME_init(void)
{
    tim0  =  (unsigned int *)0x1000;
    prd0  =  (unsigned int *)0x1001;
    tcr0  =  (unsigned int *)0x1002;
    prsc0 =  (unsigned int *)0x1003;

   *tcr0 = 0x04f0;
   *tim0 = 0x0;
   *prd0 = uTimPrd0;
   *prsc0 = 2;
   *tcr0 = 0x00e0;
}

⌨️ 快捷键说明

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