此设计在前一个设计ARMSOC-7SEG的基础上,添加一个Push button按键到ARM Cortex-M0 DesignStart内核的IRQ信号。
由于该项目主要基于前一个ARMSOC-7SEG,文件如下:
大部分调整都与之相同,包括分频、数码管共阳/共阴调整,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;
代码较为简单,在复位后将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}
编译后,进入Keil调试,调试之前需将堆栈区设置为可读可写,命令为: “map 0x00000300, 0x000003FC read write”,然后正常设置断点,进入调试即可,手动设置中断信号,可以在工具栏Peripherals->Core Peripherals->Nested Vector Interrupt Controller中,选择相应的中断号,然后勾中“pending”选框,即可将中断信号发送到Cortex-M0处理器。
下载到FPGA后,运行效果如图:
引用: lugl4313820 发表于 2022-12-3 06:34 用纸盖起来,有什么讲究吗?是不是为了拍摄效果呀。
因为数码管用的是另一个FPGA板子上的, 为了避免混淆。所以盖起来。
高云FPGA板子是右边的那一块。