项目需要一个系统时间,uc本身没有系统时间。用硬件做太占资源,软件做误差太大,用ds的时间芯片估计没时间调了。最后想了个折中的办法,用EDK中提供的opb_timer,大约1s触发一次中断,在中断处理函数中进行以s为单位的计时,误差是不小,但我们的项目对这个时间误差还可以忍受。
MHS
BEGIN opb_timer
PARAMETER INSTANCE = opb_timer_0
PARAMETER HW_VER = 1.00.b
PARAMETER C_BASEADDR = 0x20050000
PARAMETER C_HIGHADDR = 0x200503FF
BUS_INTERFACE SOPB = opb_v20_0
PORT CaptureTrig0 = net_gnd
PORT Interrupt = opb_timer_0_Interrupt
END
程序
#include 'xtmrctr_l.h'
XTmrCtr_mSetLoadReg(XPAR_OPB_TIMER_0_BASEADDR, 0, 100000000 -
2);//100M时钟,计数后位1s
XIntc_RegisterHandler(XPAR_OPB_