第17篇 使用数码管实现计数器___ARM汇编语言程序<四>
Q:如何使用定时器实现数码管循环计数器?
A:DE1-SoC_Computer系统有许多硬件定时器,本次实验使用A9 Private Timer定时器实现延时:定时器首先向Load寄存器写入计数值,然后向Control寄存器中的使能位E写1来启动定时器。定时器以Load寄存器中的初始计数值开始计数,以200MHz的频率将该计数值递减到0。如果Control寄存器中的A位被置1,则定时器会自动加载Load寄存器中的计数值并重新开始计数,当计数值减为0时,定时器会将Interrupt status寄存器中的F位置1,编写程序轮询F位,使得A9处理器等待定时器完成计数。可向F位写1使其复位。
两个16位的Counter start value寄存器用于修改定时器的定时周期。本实验中需要实现250ms即也是0.25s的延时,其对应的预设计数值为200MHz × 250 ms= 50 × 106,比之前我们用延迟循环实现的0.25s延时更精准。部分汇编语言程序代码:
同样是在HEX1~HEX0上实现十进制计数器,从0开始每0.25秒递增1计数直到99,再从0开始重新计数;按下任意KEY,计数器会停止或开始计数。