HITDAQ/FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h
2024-10-11 14:49:54 +02:00

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__ */