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"); } }