首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ARM Cortex A9中的SWI来启用IRQ中断?

如何使用ARM Cortex A9中的SWI来启用IRQ中断?
EN

Stack Overflow用户
提问于 2014-03-18 09:15:19
回答 1查看 3.3K关注 0票数 1

我正试图从零开始为中断程序编写自己的代码。我使用的是zynq7000,它由两个ARM皮层A9处理器组成。

我使用SDK将用C编写的程序连同在FSBL中生成的PlanAhead和位文件一起加载到闪存中。当我的程序开始运行时,处理器进入用户模式。在用户模式中,禁用IRQFIQ。我试图使用SWI指令进入主管模式,以启用IRQFIQ中断。当我调试时,它显示当我调用SIGTRAP指令时,它会遇到SWI

那么,我如何在C中生成自己的代码,它可以启用中断并运行我的ISR,即使在处理器启动(FSBL)并启动之后也是如此?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-03-19 15:26:06

vectors.s

代码语言:javascript
运行
复制
.globl _start
_start:
    ldr pc,_reset_handler
    ldr pc,_undefined_handler
    ldr pc,_swi_handler
    b hang
    b hang
    b hang
    b hang
    b hang

_reset_handler:     .word reset
_undefined_handler: .word hang
_swi_handler:       .word swi

reset:
    mov sp,#0xD6000000
    add sp,sp,#0xC000

    bl notmain
hang: b hang

.globl PUT32
PUT32:
    str r1,[r0]
    bx lr

.globl GET32
GET32:
    ldr r0,[r0]
    bx lr

swi:
    ldr r0,[lr,#-4]
    mov r1,#0x00FFFFFF
    and r0,r0,r1
    movs pc,lr

.globl switest
switest:
    stmdb r13!,{lr}
    swi #0x23
    ldmia r13!,{lr}
    bx lr

链接器脚本

代码语言:javascript
运行
复制
MEMORY
{
    ram : ORIGIN = 0x00000000, LENGTH = 0x4000
}
SECTIONS
{
    .text : { *(.text*) } > ram
}

notmain.c

代码语言:javascript
运行
复制
extern void uart_init ( void );
extern void uart_putc ( unsigned char );
extern unsigned int switest ( void );
void hexstrings ( unsigned int d )
{
    unsigned int rb;
    unsigned int rc;

    rb=32;
    while(1)
    {
        rb-=4;
        rc=(d>>rb)&0xF;
        if(rc>9) rc+=0x37; else rc+=0x30;
        uart_putc(rc);
        if(rb==0) break;
    }
    uart_putc(0x20);
}
void hexstring ( unsigned int d )
{
    hexstrings(d);
    uart_putc(0x0D);
    uart_putc(0x0A);
}
int notmain ( void )
{
    uart_init();
    hexstring(0x12345678);
    hexstring(switest());
    return(0);
}

以上是一个很小的swi工作示例中的相关部分。请注意,这只适用于arm模式下的svc/swi指令,而不是拇指或thumb2,如果您想在所有模式下进行通用操作,我建议您不要立即使用svc,而是在寄存器中传递一些内容。

此示例不启用中断,它只展示了如何进行svc/swi调用以及如何实现异常处理程序。这些知识已经在arm架构参考手册中有了很多年的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22474840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档