DSP 2812: 使用C++封装CPU级别的操作
[复制链接]
关于2812的CPU核,应用程序可操作的内容比较少,主要是中断控制的功能。 事实上CPU级别的中断数量比较少,应用使用时基本是使用PIE模块来扩展使用的。 我们将CPU级别的操作单独封装称为一个类,提供了一些全局的封装接口。 这些接口,很多的时候,是由初始化相关外设寄存器时调用的。
使用命名空间对类进行隔离。
[cpp] view plain copy
print?
- namespace NF281x{
-
- /**
- * CPU类实现了对CPU级别的操作的封装
- */
- class CCpu{
[html] view plain copy
print?
提供CPU级别的汇编操作的封装:
[cpp] view plain copy
print?
- /**
- * 使能全局中断
- */
- 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");
- }
提供一般地系统初始化时清理中断及标志的接口:
[cpp] view plain copy
print?
- /**
- * 清除所有的中断使能
- */
- void clrIER();
-
- /**
- * 清除所有的中断标志
- */
- void clrIFR();
提供一些CPU级别中断的操作及简化调用的封装:
[cpp] view plain copy
print?
- /**
- * 中断是否被使能
- * @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);
- }
注意:
使用面向对象设计程序时,往往是对对象本身进行抽象。 设计时并不管当前实际项目中会使用哪些接口,而是考虑对象可以或者应该提供什么样的功能给别人使用
|