1442|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

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);  
  • }  


注意:

使用面向对象设计程序时,往往是对对象本身进行抽象。

设计时并不管当前实际项目中会使用哪些接口,而是考虑对象可以或者应该提供什么样的功能给别人使用


点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表