我正在使用 CCS 5.5 对 Beaglebone Black 进行编程。我可以成功启动并运行 JTAG。
我现在正试图开始闪烁 LED。为此,我需要配置 GPIO1。在尝试配置此端口时,我发现 TI 的 C 运行时立即进入用户模式(从启动开始有 4 条指令)。当我尝试读取或写入控制内存位置时,我收到一个错误,我们认为该错误是由于未处于超级用户模式引起的。
为了进入主管模式,我正在尝试编写一个软件中断处理程序,然后从那里进行必要的配置。我可以编写处理程序,也可以main()
调用软件中断,但我正在努力让我的中断处理程序真正工作。
#pragma SWI_ALIAS(7);
int function(int i);
#pragma INTERRUPT(SWI);
int function(int i)
{
return i + 1;
}
int main(void) {
int i = function(5);
while(1);
}
正如我所料,在反汇编中调用function
生产,但从未被调用。我写了一个 intvecs.asm 文件,但这没有帮助。SWI 7
function
.global _c_int00
.global _Z8functioni
.retain ".intvecs"
.sect ".intvecs"
B _c_int00 ; reset interrupt
.word 0 ; undefined instruction interrupt
B _Z8functioni ; software interrupt
.word 0 ; abort (prefetch) interrupt
.word 0 ; abort (data) interrupt
.word 0 ; reserved
.word 0 ; IRQ interrupt
.word 0 ; FIQ interrupt
我将不胜感激有关如何使其正常工作的任何建议。
看起来 CCS 5.5 附带的 .gel 文件实际上不允许写入 0x00000000,据我了解,这是中断向量的位置。所以 JTAG 适配器不会更新中断向量。