📄 ucos_ii.c
字号:
/*********************************************************************************************************** uC/OS-II* The Real-Time Kernel** (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL* All Rights Reserved** V2.00** File : uCOS_II.C* By : Jean J. Labrosse**********************************************************************************************************/#define OS_GLOBALS /* Declare GLOBAL variables */#include "includes.h"#include "..\inc\44b.h"#define OS_CRITICAL_METHOD 2//#define OS_MASTER_FILE /* Prevent the following files from including includes.h *///#include "os_core.c"//#include "os_mbox.c"//#include "os_mem.c"//#include "os_q.c"//#include "os_sem.c"//#include "os_task.c"//#include "os_time.c"//#include "os_mutex.c"#define IRQ_VECTOR_OFFSET (0x70)//-------------------------------------------------------// globle variables//-------------------------------------------------------volatile static int isrCount = 0; // tick counter//volatile static unsigned int Dump_Pool[16];void HaltUndef(void){ Uart_Printf("Undefined instruction exception!!!\n"); while(1);}void HaltSwi(void){ Uart_Printf("SWI exception!!!\n"); while(1);}void HaltPabort(void){ Uart_Printf("Pabort exception!!!\n"); while(1);}void HaltDabort(void){ Uart_Printf("Dabort exception!!!\n"); while(1);}void Isr_Init(void){ int i; pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort; for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4) { *((volatile unsigned *)i)=0xEA000000+0x1FFE; } rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0; // All=IRQ mode rINTMSK|=BIT_GLOBAL|BIT_EINT3; // All interrupt is masked.}//-------------------------------------------------------// OS_Tick Hook Fubction//-------------------------------------------------------void tick_hook(void){ isrCount++; rI_ISPC = (unsigned int)1 << 20;}//-------------------------------------------------------// install a new ISR// this function must be synchronized//-------------------------------------------------------unsigned int ISR_Install(unsigned int offset, void *pf_ISR){ unsigned int pOldEntry; // get absolute address of IRQ vector // _ISR_STARTADDRESS : see Option.h offset += _ISR_STARTADDRESS; // get the Old ISR service routine entry point pOldEntry = *((unsigned int *)offset); // install new interrupt service routine *((unsigned int *)offset) = (unsigned int)pf_ISR; return pOldEntry;}//-------------------------------------------------------// must be synchronized//-------------------------------------------------------void tick_off(void){ rRTCCON = (unsigned char)1; rTICNT = (unsigned char)0; rRTCCON = (unsigned char)0;}//--------------------------------------------------------// set or clear TICK interrupt mask// this function must be synchronized//--------------------------------------------------------void tick_int_enable(unsigned char bEnabled){ // clear interrupt pending first rI_ISPC = (unsigned int)0x01 << 20; rINTMSK &= (unsigned int)~(0x01 << 20);}//--------------------------------------------------------// start tick function of RTC// interval = (1 + div) / 128 second// this function must be synchronized// div MUST >= 1 && <= 128//--------------------------------------------------------void tick_init(unsigned char div){ rRTCCON = (unsigned char)1;// ASSERT(div >= 1 && div <= 127); rTICNT = (unsigned char)(div | 0x80); rRTCCON = (unsigned char)0; tick_int_enable(1);}//--------------------------------------------------------// interrupt controler initilization//--------------------------------------------------------void intcon_init(void){ rINTMOD = 0; // all interrupt sources configed as IRQ rI_ISPC = 0x7ffffff; // clear all intrrupt request rINTCON = 0x05; // irq interrupt available}//--------------------------------------------------------// globel interrupt enable//--------------------------------------------------------void globle_int_enable(unsigned char bEnabled){ if(bEnabled) rINTMSK &= ~(0x03 << 26); else rINTMSK |= 0x01 << 26;}__inline void Sleep(INT16U uSec){ OSTimeDly((INT16U) (uSec));}void sys_init(void){ tick_off(); tick_int_enable(0); globle_int_enable(0); intcon_init(); isrCount = 0; // Set the function of the pins Isr_Init(); Port_Init(); Uart_Init(0, 115200); // hook the tick ISR ISR_Install(IRQ_VECTOR_OFFSET, (void *)OSTickISR); globle_int_enable(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -