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

📄 test.c

📁 f2812的初始化构架
💻 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 <stdio.h>
#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");
    }
}

⌨️ 快捷键说明

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