我使用16位定时器作为函数delay_ns(UINT32 ui32_delay_val_ns);
的硬件延迟。在函数内,delay_val
除以Tcy
。定时器运行在Tcy
,即25ns(指令周期时间为40MHz),因此每个滴答(或TMR4 val位)将为25ns。
作为一名优秀的软件工程师,我会对该功能进行一些测试,我对此感到疑惑。
见时间:delay_ns:10,a = 2 b = 27 c = 485 d = 494 e = 504
我要求250ns,即10个TMR4刻度为25ns。
a在BOOL bStart = 1且TMR4.ON = 1之后; (2个周期并不奇怪)。
b = TMR4 val后我将前一个16位的ui 32位val值除以25;
当p将原始的32位val除以25时,c = TMR4 val(直接在b !!之后)。
如您所见,使用16位val需要25个指令周期(可能也很多?),但使用32位成本+450个周期?换句话说,32位val的简单划分需要11.5 us !!
特别是因为这是Microchip的dsPIC33变体,它有一些改进(管道,双ACU等)。 我知道它是一个16位MCU,但为什么需要这么多周期呢?