有關(guān)CH32V305RBT6芯片,中斷嵌套初始化操作的一些問(wèn)題請(qǐng)教

近期在開(kāi)發(fā)過(guò)程中,嘗試了中斷嵌套的一些實(shí)驗(yàn),有些地方感覺(jué)到有點(diǎn)疑惑,實(shí)驗(yàn)情況如下:

  1. 啟動(dòng)匯編文件中,CSR寄存器設(shè)定為“0x1F”,按照《QingkeV4》手冊(cè),這個(gè)是4級(jí)嵌套,硬件壓棧,高優(yōu)先級(jí)的中斷處理函數(shù)配置為軟件壓棧,低優(yōu)先級(jí)配置為硬件壓棧。

  2. 啟用“SysTick”,“Software”,“Uart1”三個(gè)中斷處理函數(shù)。均設(shè)定為硬件壓棧(“Software”來(lái)自RTT的匯編源代碼,我看不出來(lái)是不是啟用了硬件壓棧)。軟件有使用RT-Thread操作系統(tǒng)。

現(xiàn)在的實(shí)驗(yàn)結(jié)果是:

  1. NVIC_SetPriority(Software_IRQn, 0xE0);??NVIC_SetPriority(USART1_IRQn, 0x00); 時(shí),系統(tǒng)正常。

  2. NVIC_SetPriority(Software_IRQn,?0x00);??NVIC_SetPriority(USART1_IRQn,?0xE0); 時(shí),系統(tǒng)啟動(dòng)正常,但當(dāng)串口中斷發(fā)生之后,系統(tǒng)掛死。

多次修改數(shù)據(jù)實(shí)驗(yàn)之后,發(fā)現(xiàn),只要“Software”中斷的等級(jí)調(diào)高(比串口中斷的優(yōu)先級(jí)更高),那么系統(tǒng)啟動(dòng)正常,串口中斷發(fā)生后,必定掛死。不知道是什么原因呢?可否得到一些講解?謝謝。

您好,關(guān)于啟動(dòng)文件中相關(guān)CSR寄存器的描述,關(guān)于0x1f,是對(duì)0xbc0寄存器(微處理器配置寄存器)的描述,這個(gè)寄存器一般情況下不需要操作。關(guān)于中斷嵌套級(jí)數(shù),是對(duì)0x804寄存器(中斷系統(tǒng)控制寄存器)的描述,啟動(dòng)文件中對(duì)該寄存器值配置為0x0b,根據(jù)寄存器對(duì)應(yīng)位,即4級(jí)嵌套,使能中斷嵌套和硬件壓棧。如下圖1。V305是V4F內(nèi)核的,最大支持8級(jí)中斷嵌套。若是使用了RT-Thread,具體看一下對(duì)mstatus寄存器的配置,可以判斷配置是在機(jī)器模式下還是用戶模式下,若機(jī)器模式下,則使用軟件壓棧。中斷函數(shù)注意要加中斷聲明。若方便,可將測(cè)試工程發(fā)至我的郵箱(lzs@wch.cn)具體看一下。

image.png

圖1



感謝,測(cè)試工程已發(fā)郵箱。

  1. 根據(jù)答復(fù)的指導(dǎo),發(fā)現(xiàn)我將0x804配置成0x1F是不妥的,配成0x1b才符合想設(shè)定成4級(jí)嵌套的本意。

  2. RT-Thread中,“Software”中斷應(yīng)該用于任務(wù)切換,其中有操作mstatus的匯編,似乎修改為0x7800,再進(jìn)行恢復(fù)。

現(xiàn)在的表現(xiàn)來(lái)看,似乎“Software”這個(gè)中斷的優(yōu)先級(jí)只能放置成最低優(yōu)先級(jí),系統(tǒng)才正常,不知何故。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频