关于2812的CPU核,应用程序可操作的内容比较少,主要是中断控制的功能。
事实上CPU级别的中断数量比较少,应用使用时基本是使用PIE模块来扩展使用的。
我们将CPU级别的操作单独封装称为一个类,提供了一些全局的封装接口。
这些接口,很多的时候,是由初始化相关外设寄存器时调用的。
使用命名空间对类进行隔离。
namespace NF281x{
/**
* CPU类实现了对CPU级别的操作的封装
*/
class CCpu{
};
}
提供CPU级别的汇编操作的封装:
/**
* 使能全局中断
*/
static inline void eint(){
asm(" clrc INTM");
}
/**
* 禁用全局中断
*/
static inline void dint(){
asm(" setc INTM");
}
/**
* 使能全局实时中断
* 一般在eint()之后调用
*/
static inline void ertm(){
asm(" clrc DBGM");
}
/**
* 禁用全局实时中断
* 本函数一般不使用
*/
static inline void drtm(){
asm(" setc DBGM");
}
static inline void eallow(){
asm(" EALLOW");
}
static inline void edis(){
asm(" EDIS");
}
提供一般地系统初始化时清理中断及标志的接口:
/**
* 清除所有的中断使能
*/
void clrIER();
/**
* 清除所有的中断标志
*/
void clrIFR();
提供一些CPU级别中断的操作及简化调用的封装:
/**
* 中断是否被使能
* @param x 中断号,0~11:INT1~INT12
* @return
*/
bool isIntEabled( const int& x )const;
/**
* 使能中断
* @param x
*/
void enableInt( const int& x );
/**
* 禁用中断
* @param x
*/
void disableInt( const int& x );
inline void enableInt1(){
enableInt(0);
}
inline void enableInt2(){
enableInt(1);
}
inline void enableInt3(){
enableInt(2);
}
inline void enableInt4(){
enableInt(3);
}
inline void enableInt5(){
enableInt(4);
}
inline void enableInt6(){
enableInt(5);
}
inline void enableInt7(){
enableInt(6);
}
inline void enableInt8(){
enableInt(7);
}
inline void enableInt9(){
enableInt(8);
}
inline void enableInt10(){
enableInt(9);
}
inline void enableInt11(){
enableInt(10);
}
inline void enableInt12(){
enableInt(11);
}
注意:
使用面向对象设计程序时,往往是对对象本身进行抽象。
设计时并不管当前实际项目中会使用哪些接口,而是考虑对象可以或者应该提供什么样的功能给别人使用。