Interrupts not firing after moving interrupt vector to new address?

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Interrupts not firing after moving interrupt vector to new address?

ソリューションへジャンプ
1,074件の閲覧回数
mkdomenico
Contributor II

Hello,

in the project I am working on, we have to use a bootloader application, whose interrupt vector is located at address 0x0000. Therefore, the main applications interrupt vector has been moved to another address X (let's say 0x1000). The bootloader starts properly, does its bootloader stuff, then launches the application.

When reaching the application part, the VTOR address as indicated in the System Control Block in IAR Embedded Workbench ARM 7.70.2 is displayed as being positioned at 0x1000. A look at the memory at 0x1000 confirms that it is properly located at this address.

However, when running, none of the interrupts seems to fire. The interrupt flags remain high, but none of the breakpoints set in the interrupt functions are reached. The interrupts are globally allowed (in my case: __enable_interrupts()) and configured.

When running alone, without a bootloader and with an interrupt vector located at 0x0000, my application works fine.

Could you please help me locate what may cause this issue?

Regards

0 件の賞賛
1 解決策
871件の閲覧回数
mkdomenico
Contributor II

It turned out that the bootloader code was disabling any interrupts with the following Assembler instruction:

cpsid if

To reenable interrupts and fast interrupts, the following command was required:

cpsie if

Thus: problem solved.

元の投稿で解決策を見る

0 件の賞賛
1 返信
872件の閲覧回数
mkdomenico
Contributor II

It turned out that the bootloader code was disabling any interrupts with the following Assembler instruction:

cpsid if

To reenable interrupts and fast interrupts, the following command was required:

cpsie if

Thus: problem solved.

0 件の賞賛