SylixOSLite版本中断优先级设置的示例分析-创新互联-成都快上网建站

SylixOSLite版本中断优先级设置的示例分析-创新互联

小编给大家分享一下SylixOS Lite版本中断优先级设置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

创新互联成立于2013年,是专业互联网技术服务公司,拥有项目成都做网站、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元波密做网站,已为上家服务,为波密各地企业和个人服务,联系电话:13518219792

1.非Lite版本中断关闭方式

SylixOS向用户提供arch层关中断的接口,其接口名称为archIntDisable(),调用该函数将禁用所有外设的中断。

在ARM体系结构体中,对于ARM系列、Cortex-A系列的芯片,arch层接口archIntDisable()的实现方式如程序清单1.1所示。

程序清单1.1 非Lite版本的arch层中断关闭方式

FUNC_DEF(archIntDisable)  
    MRS     R0 , CPSR  
    ORR     R1 , R0, #0x80  
    MSR     CPSR_c, R1  
    MRS     R2 , CPSR  
    AND     R2 , R2, #0x80  
    CMP     R2 , #0x80  
    BNE     archIntDisable  
BX      LR  
FUNC_END()

上述代码由汇编语言实现,可以看出archIntDisable函数主要是将CPSR寄存器中的中断失能位置1,以达到屏蔽所有中断的作用。
2.Lite版本中断关闭方式

但在ARM Cortex-M、Cortex-A系列的芯片中,并不存在CPSR寄存器,它提供BASEPRI中断屏蔽寄存器,SylixOS采用中断优先级的方式屏蔽arch层中断,其archIntDisable接口的实现方式如程序清单2.1所示。

程序清单2.1 Lite版本的arch层中断关闭方式

FUNC_DEF(archIntDisable)  
MRS     R0 , BASEPRI                  
MOV     R1 , #LW_CFG_CORTEX_M_INT_MASK  
    MSR     BASEPRI,  R1  
    BX      LR  
    FUNC_END()

Lite版本中arch层关中断的方式是根据中断优先级掩码进行屏蔽,其宏定义LW_CFG_CORTEX_M_INT_MASK即表示中断优先级掩码,SylixOS默认设置为2,即当调用archIntDisable函数时,中断优先级大于2的中断号将被屏蔽,中断优先级小于2的中断号将无法被屏蔽。

因此在Lite版本的BSP中,需要将各个外设器件的中断优先级设置为大于2,这样才能关闭所有中断,否则SylixOS可能在一些需要关闭中断的关键代码处由于关不住某一外设中断而导致错误。

设置外设中断优先级的接口定义如程序清单2.2所示,各个驱动外设可以根据实际情况进行设置。

程序清单2.2 设置中断优先级函数

#include   
ULONG  API_InterVectorSetPriority (ULONG  ulVector, UINT  uiPrio);

看完了这篇文章,相信你对“SylixOS Lite版本中断优先级设置的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:SylixOSLite版本中断优先级设置的示例分析-创新互联
链接分享:http://kswjz.com/article/hdjeh.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流