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

📄 os_cpu.h

📁 一个外国牛人做的ucos2向mcf5307的移植
💻 H
字号:
/*  os_cpu.h
 *
 *	Motorola Coldfire MCF5307 port to MicroC/OS-II
 *
 *  Ross Berteig
 *  Cheshire Engineering Corp
 *  650 Sierra Madre Villa, Suite 201
 *  Pasadena  CA 91107
 *  +1-626-351-5493       +1-626-351-8645 FAX
 *  Ross@CheshireEng.com, www.CheshireEng.com
 *
 *  Copyright (C) 1998 Cheshire Engineering Corporation.
 *  Based on a port to uCOS version 1.x by David Fiddes.
 *  Portions Copyright (C) 1997 David Fiddes, D.J.Fiddes@hw.ac.uk
 *  Anything that no longer works is probably not his fault.
 */
#ifndef __OS_CPU_H__
#define __OS_CPU_H__

/*
 *  Declare data types and structures generic to the
 *  ColdFire from a source file distributed by Motorola.
 */
#include "mcf5307.h"

/*
 *  Constants
 */
#ifndef FALSE
#define  FALSE    0
#define  TRUE     1
#endif

#ifdef   OS_CPU_GLOBALS
#define  OS_CPU_EXT
#else
#define  OS_CPU_EXT  extern
#endif


/*
 *   Data Types
 */
typedef unsigned char  BOOLEAN;		/* True or False */
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 long  OS_STK;		/* Each stack entry is 32-bit wide */
#define OS_STK_GROWTH  1		/* The stack grows from high to low memory  */

/*
 *  Backward compatibility types for uCOS 1.x
 */
#define far	/**/
#define near	/**/
#define OS_FAR	/**/
#define OS_NEAR /**/
#define BYTE           INT8S 
#define UBYTE          INT8U 
#define WORD           INT16S
#define UWORD          INT16U
#define LONG           INT32S
#define ULONG          INT32U
#define OS_STK_TYPE    OS_STK

/*
 *  Macros
 */
#ifdef USING_GNU_TOOLS
/* GNU */
# ifndef BADMOVESR
#  define  OS_ENTER_CRITICAL() asm volatile (" move.w #0x2700,%sr ");
#  define  OS_EXIT_CRITICAL()  asm volatile (" move.w #0x2000,%sr ");
# else
#  define  OS_ENTER_CRITICAL() asm volatile (" .long 0x46fc2700 ");
#  define  OS_EXIT_CRITICAL()  asm volatile (" .long 0x46fc2000 ");
# endif
# define  OS_TASK_SW()         asm volatile (" trap #14 ");
# define  OS_IDLE_LOOP()       asm volatile (" stop #0x2000 ");
#endif

#ifdef __DCC__
/* Diab */
# define  OS_TASK_SW()         asm (" trap #14 ");
# define  OS_IDLE_LOOP()       asm (" stop #0x2000 ");

asm INT16U CPUSetSR(INT16U value) 
{ 
% con value;
    move.w    sr,d0			; get the current SR
    move.w    value,d1			; value is constant 
    move.w    d1,sr			; put in SR
% reg value;
    move.w    sr,d0			; get the current SR
    move.w    value,d1			; value in register 
    move.w    d1,sr			; put in SR
% mem value;
    move.w    sr,d0			; get the current SR
    move.w    value,d1			; value in memory 
    move.w    d1,sr			; put in SR
} 

#if !defined(OS_CPU_FAST_CRITICAL) && !defined(OS_CPU_CAREFUL_CRITICAL)
#info "Defaulting to OS_CPU_FAST_CRITICAL."
#define OS_CPU_FAST_CRITICAL
#endif

#ifdef OS_CPU_FAST_CRITICAL
#define  OS_ENTER_CRITICAL() asm (" move.w #0x2700,sr ");
#define  OS_EXIT_CRITICAL()  asm (" move.w #0x2000,sr ");
#endif

#ifdef OS_CPU_CAREFUL_CRITICAL
OS_CPU_EXT int CPURecentSR;
#define OS_ENTER_CRITICAL() do { CPURecentSR = CPUSetSR(0x2700); } while(0)
#define OS_EXIT_CRITICAL() do { CPUSetSR(CPURecentSR); } while(0)
#endif
#endif

extern void CPUFormatError(void);

#endif /*__OS_CPU_H__*/

⌨️ 快捷键说明

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