146 lines
7.2 KiB
C
146 lines
7.2 KiB
C
#ifndef __OS_CPU_H__
|
|
#define __OS_CPU_H__
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* uC/OS-II
|
|
* The Real-Time Kernel
|
|
*
|
|
* (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL
|
|
* All Rights Reserved
|
|
*
|
|
* 80x86/80x88 Specific code
|
|
* LARGE MEMORY MODEL
|
|
*
|
|
* Borland C/C++ V4.51
|
|
*
|
|
* File : OS_CPU.H
|
|
* By : IS (modified from version by Jean J. Labrosse)
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* *
|
|
* License Agreement *
|
|
* *
|
|
* Copyright (c) 2003-5 Altera Corporation, San Jose, California, USA. *
|
|
* All rights reserved. *
|
|
* *
|
|
* Permission is hereby granted, free of charge, to any person obtaining a *
|
|
* copy of this software and associated documentation files (the "Software"), *
|
|
* to deal in the Software without restriction, including without limitation *
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
|
|
* and/or sell copies of the Software, and to permit persons to whom the *
|
|
* Software is furnished to do so, subject to the following conditions: *
|
|
* *
|
|
* The above copyright notice and this permission notice shall be included in *
|
|
* all copies or substantial portions of the Software. *
|
|
* *
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
|
|
* DEALINGS IN THE SOFTWARE. *
|
|
* *
|
|
* This agreement shall be governed in all respects by the laws of the State *
|
|
* of California and by the laws of the United States of America. *
|
|
* *
|
|
* Altera does not recommend, suggest or require that this reference design *
|
|
* file be used in conjunction or combination with any other product. *
|
|
******************************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif /* __cplusplus */
|
|
|
|
#include "sys/alt_irq.h"
|
|
|
|
#ifdef OS_CPU_GLOBALS
|
|
#define OS_CPU_EXT
|
|
#else
|
|
#define OS_CPU_EXT extern
|
|
#endif
|
|
|
|
/*****************************************************************************************
|
|
/ REVISION HISTORY
|
|
/
|
|
*****************************************************************************************/
|
|
|
|
/*****************************************************************************************
|
|
/ DATA TYPES
|
|
/ (Compiler Specific)
|
|
*****************************************************************************************/
|
|
|
|
/* This is the definition for Nios32. */
|
|
typedef unsigned char BOOLEAN;
|
|
typedef unsigned char INT8U; /* Unsigned 8 bit quantity */
|
|
typedef signed char INT8S; /* Signed 8 bit quantity */
|
|
typedef unsigned short INT16U; /* Unsigned 16 bit quantity */
|
|
typedef signed short INT16S; /* Signed 16 bit quantity */
|
|
typedef unsigned long INT32U; /* Unsigned 32 bit quantity */
|
|
typedef signed long INT32S; /* Signed 32 bit quantity */
|
|
typedef float FP32; /* Single precision floating point */
|
|
typedef double FP64; /* Double precision floating point */
|
|
typedef unsigned int OS_STK; /* Each stack entry is 32-bits */
|
|
|
|
/****************************************************************************
|
|
* Nios2 Miscellaneous defines
|
|
****************************************************************************/
|
|
|
|
#define OS_STK_GROWTH 1 /* Stack grows from HIGH to LOW memory */
|
|
#define OS_TASK_SW OSCtxSw
|
|
|
|
/******************************************************************************************
|
|
* Disable and Enable Interrupts - 2 methods
|
|
*
|
|
* Method #1: Disable/Enable interrupts using simple instructions. After critical
|
|
* section, interrupts will be enabled even if they were disabled before
|
|
* entering the critical section.
|
|
*
|
|
* Method #2: Disable/Enable interrupts by preserving the state of interrupts. In
|
|
* other words, if interrupts were disabled before entering the critical
|
|
* section, they will be disabled when leaving the critical section.
|
|
*
|
|
* Method #3: Disable/Enable interrupts by preserving the state of interrupts. Generally speaking you
|
|
* would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then
|
|
* disable interrupts. 'cpu_sr' is allocated in all of uC/OS-II's functions that need to
|
|
* disable interrupts. You would restore the interrupt disable state by copying back 'cpu_sr'
|
|
* into the CPU's status register.
|
|
*
|
|
*****************************************************************************************/
|
|
|
|
#define OS_CRITICAL_METHOD 3
|
|
|
|
#if OS_CRITICAL_METHOD == 1
|
|
#error OS_CRITICAL_METHOD == 1 not supported, please use method 3 instead.
|
|
#endif
|
|
|
|
#if OS_CRITICAL_METHOD == 2
|
|
#error OS_CRITICAL_METHOD == 2 not supported, please use method 3 instead.
|
|
#endif
|
|
|
|
#if OS_CRITICAL_METHOD == 3
|
|
#define OS_CPU_SR alt_irq_context
|
|
#define OS_ENTER_CRITICAL() \
|
|
cpu_sr = alt_irq_disable_all ()
|
|
#define OS_EXIT_CRITICAL() \
|
|
alt_irq_enable_all (cpu_sr);
|
|
#endif
|
|
|
|
/* Prototypes */
|
|
void OSStartHighRdy(void);
|
|
void OSCtxSw(void);
|
|
void OSIntCtxSw(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __OS_CPU_H__ */
|
|
|
|
|
|
|