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.

TMS320F28377D: PM (Bits 9-7) —Product shift mode bits 在计算unsigned long类型数据时每次都需要手动设置为 No shift吗

Part Number: TMS320F28377D

1,问题描述:我们项目中使用RTOS,在初始化任务堆栈时默认将ST0中的PM位设置为0,(Left shift by1)。导致第一次进入该任务的时候计算两个unsigned long类型数据相乘时出错,结果大了一倍,排查下来按官方手册spru430f说明是因为在unsigned运算时PM应该为1(No shift)


2,查看官方freeRtos kernel例程,在初始化任务堆栈时默认将ST0中的PM位设置为1,(No shift),是否我们也应该设置改默认值为1?

3,按spru430f说明在计算例如如下指令时,PM会被修改为-4 (SPM -4),如果在这个语句之后立即计算两个unsigned long类型数据相乘时,会不会导致结果再次出错呢,是否每次计算unsigned 数据时需要手动去设置该位呢

Fullscreen
1
2
3
4
5
6
7
8
Example ; Calculate: Y = ((M*X >> 4) + (B > 10
; Y, M, X, B are Q15 values
SPM −4 ; Set product shift to >> 4
SETC SXM ; Enable sign extension mode
MOV T,@M ; T = M
MPY P,T,@X ; P = M * X
MOV ACC,@B >4) + (S:B << 11)
MOVH @Y,ACC << 5 ; Store Q15
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX