timer寄存器官方描述 获取定时器的时间只需要**直接读取内存映射寄存器mtime即可,该寄存器位宽是64bit,因此可以记录约58万年(假设时钟周期为1MHz),所以这个定时器可以记录一个家族5800代的时光。言归正传,可以使用如下方法简单获取当前的时钟计数值: #define CLINT_BASE (0x2000000) #define MTIME (0xbff8) #define ...
Status=mCpu->RegisterInterruptHandler(mCpu,EXCEPT_RISCV_IRQ_TIMER_FROM_SMODE,TimerInterruptHandler);ASSERT_EFI_ERROR(Status);// 强制以默认周期启用定时器Status=TimerDriverSetTimerPeriod(&mTimer,DEFAULT_TIMER_TICK_DURATION);ASSERT_EFI_ERROR(Status);// 将定时器体系结构协议安装到新的句柄上。Status=gB...
RISC-V通用寄存器 寄存器ABI名称说明 x0zero0值寄存器,硬编码为0,写入数据忽略,读取数据为0 x1ra...
MTIMECMP 寄存器(Machine Timer Compare Registers): 每个硬件线程都有一个MTIMECMP寄存器,用于设置定时器中断的触发时间。 地址从 CLINT_BASE + 0x4000 开始,每个寄存器占用8字节。 例如,MTIMECMP[0] 的地址是 CLINT_BASE + 0x4000 + 08,MTIMECMP[1] 的地址是 CLINT_BASE + 0x4000 + 18,以此类推。 MTIME ...
MODE=1时,所有同步异常处理交给BASE指定的地址;中断则指向BASE+irq*0x04的偏移值。比如Machine Timer Interrupt中断号为7,对应的中断处理函数指向BASE+0x1c。 1.4 sstatus sstatus是Supervisor模式下状态寄存器: 详细解释如下: SD (State Dirty) [31] 脏状态标志:当 FS(浮点状态)或 XS(扩展状态)字段非零时置 1...
机器模式中断寄存器 mip(Machine Interrupt Pending Register): 机器模式中断待处理寄存器,用于表示当前待处理的中断。 机器模式计时器寄存器 mtime(Machine Timer Register): 机器模式计时器寄存器,用于存储当前的计时器值。 mtimecmp(Machine Timer Compare Register): ...
trap(陷阱)可以分为异常与中断。在 RISC v 下,中断有三种来源:software interrupt、timer interrupt(顾名思义,时钟中断)、external interrupt。 有同学可能见过 NMI,但是这是一种中断类型而非中断来源。Non-maskable interrupt,不可屏蔽中断,与之相对的就是可屏蔽中断。NMI 都是硬件中断,只有在发生严重错误时才会触发...
timer:定时器模块,用于计时和产生定时中断信号。目前支持RTOS时需要用到该定时器。 uart_tx:串口发送模块,主要用于调试打印。 gpio:简单的IO口模块,主要用于点灯调试。 spi:目前只有master角色,用于访问spi从机,比如spi norflash。 PC寄存器 PC寄存器模块所在的源文件:rtl/core/pc_reg.v ...
RISC-V寄存器如下图所示,其中x0-x31为整形寄存器,f0-f31为浮点寄存器(V3没有浮点寄存器)。所有带caller的寄存器,当发生中断时需要保存,值得注意的是,WCH的硬件压栈保存的寄存器仅仅保存整数的16个caller saved 寄存器。正常一个中断函数的寄存器保存我们不用关心,编译器会帮我们做的很好。但是当我们从一个汇编...