samotor.c

来自「ICETEK-VC5416-EDULab瑞泰创新科技5416开发板的实验源程序」· C语言 代码 · 共 182 行

C
182
字号
/////////////////////////////////////////////////
//  Example For ICETEK-VC5416-EDU              //
//          CTR Version : V4                   //
//  Filename: SAMotor.c                        //
//  Project : SAMotor.pjt                      //
//  Version : 2.00                             //
//  Write by: Daniel Hawk                      //
//  Company : Realtimedsp Co.Ltd.              //
//                                             //
//  All Rights opened & no Onus  2005.06       //
/////////////////////////////////////////////////
#include "scancode.h"

#define	TIM		*(int *)0x24
#define	PRD     *(int *)0x25
#define	TCR		*(int *)0x26
#define	IMR		*(int *)0x0
#define	IFR		*(int *)0x1		
#define	PMST	*(int *)0x1d	
#define SPSA0 *(unsigned int *)0x38
#define SPSD0 *(unsigned int *)0x39
#define SPSA1 *(unsigned int *)0x48
#define SPSD1 *(unsigned int *)0x49
#define REGISTERCLKMD (*(unsigned int *)0x58)
int T46uS=0x0fff;

void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);
void TIME_init(void);

//  CTR扩展寄存器定义
ioport unsigned int port8000;
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8003;
ioport unsigned int port8004;
ioport unsigned int port8005;
ioport unsigned int port8007;
#define CTRGR       port8000
#define CTRLCDCMDR  port8001
#define CTRKEY      port8001
#define CTRCLKEY    port8002
#define CTRLCDCR    port8002
#define CTRLCDLCR   port8003
#define CTRLCDRCR   port8004
#define CTRLA       port8005
#define CTRLR       port8007
#define PWMR        port8007
unsigned int uWork,nCount;
unsigned int pwm1[8]={ 0x8e,0x8c,0x8d,0x89,0x8b,0x83,0x87,0x86 };
unsigned int pwm2[8]={ 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e };
int nAddStep,nStep;

main()
{
	unsigned int nScanCode,uWork1;
	unsigned char cKey;

	REGISTERCLKMD=0;
	nStep=0; nAddStep=1;
	CTRGR=0;	    	// 初始化ICETEK-CTR
	CTRGR=0x80;
	CTRGR=0;
	CTRLR=0;			// 关闭东西方向的交通灯
	CTRLR=0x40;	        // 关闭南北方向的交通灯
	CTRLR=0x0c2;        // 使能步进电机
	SPSA1=1;	        // set McBSP1's SPCR2
	uWork=SPSD1;
	uWork&=0xfffe;   	// set XRST=0
	SPSD1=uWork;
	SPSA1=0x0e;	        // set McBSP1's PCR1
	uWork=SPSD1;
	uWork|=0x2400;	    // set XIOEN=1 FSXM=1, Enable IO,FSR for output
	SPSD1=uWork;
	SPSA0=0;	        // set McBSP0's SPCR1
	uWork=SPSD0;
	uWork&=0xfffe;	// set RRST=0
	SPSD0=uWork;
	SPSA0=0x0e;	// set McBSP0's PCR1
	uWork=SPSD0;
	uWork|=0x1101;	// set RIOEN=1 FSXM=1, Enable IO,CLKR for output,set Motor's direction to 1
	SPSD0=uWork;
	uWork1= PMST; 		      
	PMST = uWork1&0xff;
	asm("	ssbx	INTM");

	TIME_init();
	IMR = 0x8;
	IFR = 0x100;
	asm("	rsbx	INTM");
	while ( 1 )
	{
		if ( nCount>16 )
		{
			nCount=0;
			nScanCode=CTRKEY;
			nScanCode&=0x0ff;
			uWork=CTRCLKEY;
			if ( nScanCode!=0 )
			{
				if ( nScanCode==SCANCODE_Enter )	break;
				else
				switch(nScanCode)
				{
					case SCANCODE_4:       // Motor Turn Forward
						nAddStep=1;
						break;
					case SCANCODE_6:       // Motor Turn Backward
						nAddStep=-1;
						break;
					case SCANCODE_Minus:   // Motor Speed Down
						T46uS+=0x400;
						if(T46uS>=0x8000)
							T46uS=0x8002;
						asm( " ssbx INTM");
						TIME_init();
						asm(" rsbx INTM");
						break;
					case SCANCODE_Plus:    // Motor Speed up
						T46uS-=0x400;
						if(T46uS<=0xC00)
							T46uS=0xC02;
						asm( " ssbx INTM");
						TIME_init();
						asm(" rsbx INTM");
						break;
				}
			}
		}
	}
	CTRLR=0x0c0;
}               

void Delay(unsigned int nDelay)
{
	int i,j,k=0;
	for ( i=0;i<nDelay;i++ )
		for ( j=0;j<64;j++ )
			k++;
}

void interrupt time(void)
{
		PWMR=pwm2[nStep];
		nStep+=nAddStep;
		if ( nStep<0 )	nStep=7;
		else if ( nStep>7 )	nStep=0;
		nCount++;
}

void TIME_init(void)
{
	TCR = 0x412;
	TIM = 0;
	PRD = T46uS;
	TCR = 0x422;

}

char ConvertScanToChar(unsigned char cScanCode)
{
	char cReturn;
	
	cReturn=0;
	switch ( cScanCode )
	{
		case SCANCODE_0: cReturn='0'; break;
		case SCANCODE_1: cReturn='1'; break;
		case SCANCODE_2: cReturn='2'; break;
		case SCANCODE_3: cReturn='3'; break;
		case SCANCODE_4: cReturn='4'; break;
		case SCANCODE_5: cReturn='5'; break;
		case SCANCODE_6: cReturn='6'; break;
		case SCANCODE_7: cReturn='7'; break;
		case SCANCODE_8: cReturn='8'; break;
		case SCANCODE_9: cReturn='9'; break;
	}
	 
	return cReturn;
}

⌨️ 快捷键说明

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