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

📄 avtarm.h

📁 基于ARM7的直流电机的驱动,还有FLASH驱动,LCD驱动等
💻 H
字号:
/*---------------------------------------------------------------------------*/
/*                                                                           */
/*      avtintl.h                                                            */
/*                                                                           */
/*      ARM-specific definitions.                      						 */
/*                                                                           */
/*---------------------------------------------------------------------------*/
/*                                                                           */
/*          Copyright (C) 2006 YuKanghua, All rights reserved.               */
/*                                                                           */
/*---------------------------------------------------------------------------*/
#ifndef __AVTARM_H__
#define __AVTARM_H__

#define	HZ			100

#define INIT_CONTEXT(_sp_, _pc_, _arg_) \
	do {								\
		uint	*s = _sp_;				\
										\
		*--s = (uint)Xcontinue;	/*pc*/	\
		*--s = 0;				/*r11*/	\
		*--s = 0;				/*r10*/	\
		*--s = 0;				/*r9*/	\
		*--s = 0;				/*r8*/	\
		*--s = 0;				/*r7*/	\
		*--s = 0;				/*r6*/	\
		*--s = (uint)_pc_;		/*r5*/	\
		*--s = (uint)_arg_;		/*r4*/	\
		_sp_ = s;						\
	}while(0)

#ifdef __cplusplus
extern "C" {
#endif

void ldctx(uint **);

void swctx(uint **, uint **);

void Xcontinue(void);

void
atominc(uint *ptr);

void
atomdec(uint *ptr);

int
interrupts_disable(void);

#ifdef __GNUC__

__inline static void
interrupts_enable(int xyz) {
	__asm("MSR CPSR_c, %0" ::"ir"(xyz));
}

__inline static uint
xchg(uint newval, uint *ptr) {
	uint	oldval;

	__asm("swp %0, %1, %2"
		:"=r"(oldval)
		:"r"(newval), "m"(ptr));
	return oldval;
}

__inline static uint
xchgb(uint newval, uchar *ptr) {
	uchar	oldval;

	__asm("swpb %0, %1, [%2]"
		:"=r"(oldval)
		:"r"(newval), "r"(ptr));
	return oldval;
}

#else /*!__GNUC__*/

#ifndef _INTR
#define _INTR

__inline static void
interrupts_enable(int xyz) {
	__asm {
		MSR CPSR_c, xyz
	}
}
#endif

__inline static uint
xchg(uint newval, uint *ptr) {
	uint	oldval;
	__asm {
		swp	oldval, newval, [ptr]
	}
	return oldval;
}

__inline static uchar
xchgb(uchar newval, uchar *ptr) {
	uchar	oldval;
	__asm {
		swpb oldval, newval, [ptr]
	}
	return oldval;
}
#endif /*!__GNUC__*/

#ifdef __cplusplus
}
#endif
#endif /*__AVTARM_H__*/
/* EOF */

⌨️ 快捷键说明

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