DSP

DSP 2812: 使用C++封装CPU级别的操作

2019-07-13 11:23发布

关于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); }
注意: 使用面向对象设计程序时,往往是对对象本身进行抽象。 设计时并不管当前实际项目中会使用哪些接口,而是考虑对象可以或者应该提供什么样的功能给别人使用。