www.pudn.com > F2812-UCOS.rar > TEST.C


/*                    INT  SVC system 
* Copyright (c) 2006,南京因泰莱电器股份有限公司开发部 
* All rights reserved. 
*  
* 文件名称:VECTORS.asm 
* 摘    要:实现F2812各个功能模块的测试,为以后的开发准备 
*  
* 当前版本:0.9 
* 作    者:洪远洋  
* 完成日期:2006年12月29日 
* 
* 取代版本:0.1 
* 原作者  :洪远洋 
* 完成日期:2006年12月28日 
* 
* 注意:本次UCOS移植的IDLE函数优先级为56,其他线程务必优先级高于56!! 
********************************************************************/ 
#include  
#include "F2812reg.h" 
#include "include\timer.h" 
#include "include\os_globalstack.h" 
 
 
 
#pragma DATA_SECTION(TaskStk,"MulStackFile"); 
volatile OS_STK  TaskStk[N_TASKS][TASK_STK_SIZE];     /* Tasks stacks                                  */ 
//volatile OS_STK  TaskStk;     /* Tasks stacks                                  */ 
#pragma DATA_SECTION(TaskStartStk,"MainStackFile"); 
volatile OS_STK  TaskStartStk[TASK_STK_SIZE]; 
 
#pragma DATA_SECTION(OSTaskIdleStk,"IdleStackFile"); 
volatile OS_STK       OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE];    
     
extern int vect; //中断向量表首地址,在VECTORS.asm中定义的全局变量 
 
void AppStartTask(void) 
{ 
   int i = 0; 
   i++; 
   asm("	CLRC INTM");               // 调试使能中断  
   while(1) 
   { 
   i++; 
   OSTimeDly(3); 
   } 
} 
 
void TaskStk1(void) 
{ 
   int i = 0; 
   i++; 
   asm("	CLRC INTM");               // 调试使能中断  
   while(1) 
   { 
   i++; 
   OSTimeDly(10); 
   } 
} 
void initcpu() 
{    
   	asm("	EALLOW");	 
  	WDCR=0x068;               //禁止看门狗 
   // PLLCR=0x0004;              //CPU时钟为OSCCLK*4/2  30m 
    PLLCR=0x000A;              //CPU时钟为OSCCLK*10/2  12m 
    PCLKCR=0x5D0B;            //外设时钟使能 
    HISPCP=0x0000;                //配置外设时钟HSPCLK=60M/1=60M 
    LOSPCP=0x0001;            //配置外设时钟LSPCLK=60M/2=30M 
    asm("	EDIS");	 
}  
 
void initgpio() 
{    
    asm("	EALLOW"); 
     GPAMUX = 0x0000;               //配置GPIOF中的SCI,SPI口为外设模式   
     GPBMUX = 0x0000;              // 配置GPIOG中的SCIB 
     GPADIR = 0xffff; 
     GPBDIR = 0xffff; 
     GPADAT = 0xffff; 
     GPBDAT = 0xffff; 
    asm("	EDIS");	 
   // while(1); 
}      
void initpiectrl() 
{ 
       
     asm("	EALLOW"); 
     PIECTRL=0x0d01;          //配置PIE向量表,使PIE VECTOR的地址为0XD00开始 
     PIEACK=0xffff;           //清除所有中断应答,保证可以对新的中断响应 
    // PIEIFR9=0x0000; 
    // PIEIER9=0x0004;           //使能SCIB 接收中断 
                   
      asm("	EDIS");	 
 
}     
/*************************************************************/ 
void fill_vector() 
{ 
    int i = 0; 
    int * source = 0; 
    int *dest = 0; 
     
    asm("	EALLOW"); 
    dest = (int *)0xd00 ; //指向搬移的目标地址,0XD00 
    source = &vect;       //指向要搬移的中断向量表的首地址 
    for(i = 0; i < 128;i++) 
    { 
     	*dest++ = *source++;   //连续搬移128个中断向量 
    } 
    asm("	EDIS");	 
} 
/***********************************************************/ 
void time_delay(void) 
{ 
	int i = 0; 
	int j = 0; 
	int k = 0; 
	int l = 0; 
	int a = 0; 
	int b = 0; 
	int c = 0; 
	int d = 0; 
	int e = 0; 
	int f = 0; 
	int g = 0; 
	int h = 0; 
	for(; e<30000; e++)  
		for (; f < 30000; f++) 
			for(; g < 30000; g++) 
				for (; h<30000; h++)  
	{ 
	for(; i<30000; i++) 
		for(; j<30000; j++) 
	   		for(; k<30000; k++) 
				for(; l<30000; l++)  
        		{				 
					for(; a<30000; a++) 
						for(; b<30000; b++) 
						   for(; c<30000; c++) 
						      for(; d<30000; d++) 
								{ 
									asm(" nop "); 
								}	 
		} 
	}	 
} 
 
/******************************************************************************/ 
 
interrupt void INT13_ISR(void)			// 0x000D1A  INT13 - XINT13 (or CPU Timer1, reserved for TI) 
{ 
// Work around Compiler v3.03 bug 
//	asm(" SPM  0");						// Compiler not properly setting SPM 0 in ISRs 
//	asm(" CLRC AMODE");					// Compiler not properly setting AMODE=1 in ISRs 
// End workaround 
     GPADAT = 0x0000; 
     GPBDAT = 0x00f0; 
     time_delay(); 
     time_delay(); 
     asm("	CLRC INTM");               // 调试使能  
     PIEACK=0xf00f; 
// Next two lines for debug only - remove after inserting your ISR 
//	asm (" ESTOP0");					// Emulator Halt instruction 
 
} 
/************************************************************/ 
void c_int00() 
{ 
	asm("	EALLOW");						 
	asm("	CLRC DBGM");               // 调试使能 
	asm("	SETC OVM");                // 溢出模式 
	asm("	SETC SXM");                 //符号扩展 
	asm("	SETC OBJMODE");              //C28x模式 
	asm("	SETC VMAP");                //使能PIE向量 
	asm("	EDIS");	 
	DINT; 
     
	initcpu();                            //  
	initgpio();	                           
	fill_vector();	                      // 将中断向量放到中断向量表的位置,烧写时使用 
    initpiectrl(); 
	timer_init(); 
    
 
 	asm("	EALLOW"); 
	asm("	AND IFR , #0X0000 "); 
	asm("	OR IER , #0XFFFF ");                //使能所有中断中断   
//	asm("	OR DBGIER , #0XFFFF ");                //使能所有中断中断 
	asm("   mov *sp++ , #0xffff "); 
	asm("	pop DBGIER");               // 调试使能  
	asm("	EDIS");	      	 
  	DRTM; 
  	EINT; 
  	OSInit(); 
 	OSTaskCreate(AppStartTask, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE-1], 2); 
    OSTaskCreate(TaskStk1, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE-1], 5); 
 	OSStart(); 
   /* i = sizeof(char); 
    i = sizeof(short); 
    i = sizeof(int); 
    i = sizeof(long);*/ 
   // asm("	TRAP #13"); 
  
    while(1) 
    { 
        GPADAT = 0x0000; 
     	GPBDAT = 0x0000; 
     	time_delay(); 
     	GPADAT = 0xffff; 
     	GPBDAT = 0x00FF; 
     	time_delay(); 
  //   	asm("	TRAP #13"); 
    } 
}