[其他芯片] 【Sipeed 高云GW2A FPGA开发板】——ARM Cortex-M0软核处理器_按键中断

mars4zhu   2022-11-23 23:38 楼主

4.6. ARMSOC-INTERRUPT_中断

此设计在前一个设计ARMSOC-7SEG的基础上,添加一个Push button按键到ARM Cortex-M0 DesignStart内核的IRQ信号。

ARMSOC-INTERRUPT_block-diagram.png

4.6.1. FPGA硬件设计

由于该项目主要基于前一个ARMSOC-7SEG,文件如下:

ARMSOC-INTERRUPT_project-files.png
  1. 大部分调整都与之相同,包括分频、数码管共阳/共阴调整,IO约束在前述基础上,添加了btn按键信号的引脚,如下:

    IO_LOC "btn[0]" T3;
    IO_PORT "btn[0]" PULL_MODE=UP;
    IO_LOC "btn[1]" T2;
    IO_PORT "btn[1]" PULL_MODE=UP;
    IO_LOC "btn[2]" D7;
    IO_PORT "btn[2]" PULL_MODE=UP;
    IO_LOC "btn[3]" C7;
    IO_PORT "btn[3]" PULL_MODE=UP;
    IO_LOC "btn[4]" T5;
    IO_PORT "btn[4]" PULL_MODE=UP;
    

4.6.2. Keil编译调试软件汇编代码

  1. 代码较为简单,在复位后将AHB7SEGDEC的数据寄存器(0x50000000处)置位0,然后进入无限循环,在INT中断服务程序中,读取AHB7SEGDEC的数据寄存器,将其加1后再写回,这样每次中断都将该值加1,数码管将显示中断次数。

    Reset_Handler   PROC
                    GLOBAL Reset_Handler
                    ENTRY
    
                                    LDR     R1, =0xE000E100           ;Interrupt Set Enable Register
                    LDR     R0, =0x00000001
                    STR     R0, [R1]
    
                                    LDR     R1, =0x50000000                 ; Reset 7seg display
                                    MOVS    R0,#0
                                    STR             R0,[R1]
    
    AGAIN                   B AGAIN
                                    ENDP
    
    Int_Handler
                                    PUSH    {LR}
                                    LDR     R1, =0x50000000
                                    LDR             R0,[R1]
                                    ADDS    R0,R0,#1
                                    STR             R0,[R1]
                                    POP             {PC}
    
  2. 编译后,进入Keil调试,调试之前需将堆栈区设置为可读可写,命令为: “map 0x00000300, 0x000003FC read write”,然后正常设置断点,进入调试即可,手动设置中断信号,可以在工具栏Peripherals->Core Peripherals->Nested Vector Interrupt Controller中,选择相应的中断号,然后勾中“pending”选框,即可将中断信号发送到Cortex-M0处理器。

    ARMSOC-INTERRUPT_keil-debug.png

4.6.3. 运行效果

下载到FPGA后,运行效果如图:

ARMSOC-INTERRUPT_effect.gif

回复评论 (2)

用纸盖起来,有什么讲究吗?是不是为了拍摄效果呀。
点赞  2022-12-3 06:34
引用: lugl4313820 发表于 2022-12-3 06:34 用纸盖起来,有什么讲究吗?是不是为了拍摄效果呀。

因为数码管用的是另一个FPGA板子上的, 为了避免混淆。所以盖起来。

 

高云FPGA板子是右边的那一块。

点赞  2022-12-3 09:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复