工具/软件:TI C/C++编译器
你好
我写这个例程
void buck_SetPeriod (浮点Tpwm)
{
EPwm1Regs.TBPRD = 100e6*Tpwm-1;
}
我称之为例行程序
Buck SetPeriod (285e-9*230);
我期望EPwm1Regs.TBPRD 等于6554
但我读了6553。
当我运行拆卸时,我会看到
我执行一个步骤
F32TOUI16似乎将6554.0 转换为6553...
有人能帮我吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
你好
我写这个例程
void buck_SetPeriod (浮点Tpwm)
{
EPwm1Regs.TBPRD = 100e6*Tpwm-1;
}
我称之为例行程序
Buck SetPeriod (285e-9*230);
我期望EPwm1Regs.TBPRD 等于6554
但我读了6553。
当我运行拆卸时,我会看到
我执行一个步骤
F32TOUI16似乎将6554.0 转换为6553...
有人能帮我吗?
您好,Mauro:
我写了一个小功能,类似于拆卸,以进行测试
text .global _test_f32oui16 _test_f32oui16: .asmfunc ADDB SP,#2 MOV *-SP[2],#0x77e3 ;保存6.555E-5 (285e-9*230)以堆栈 MOV *-SP[1],#0x3889 MOVIZ R0H,#0x5E-5,#0x5E5E, R0H,R1XI = 0XI ,R0XI,R0XH,R0XH 0XI = 1H R0H = 1.0e8 *(285e-9*230) NOP ADDF32 R0H,#0xbf80,R0H ;R0H = 1.0e8 *(285e-9*230)-1 NOP F32TOUI16 R0H,R0H ;R0H = uint16_t (R0H) SubREB, #2 Lmfunc SP
问题似乎是(285e-9*230),它给出 了6.5549.9971万e-05,如果我将其乘以1e8,我得到6554.99971 ,子1是6553.99971 ,到ui16给出了6553。
因此F32TOUI16在这种情况下可以正常工作,但我们可能需要先舍入 285e-9*230*1e8,然后再减去1。 我想我们可以这样做
UINT16_t((((((285e-9*230)*1e8 + 0.5)-1)。 0.5 应完成舍入。