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.

HALL读取问题



Hello TI:

在使用F28027做BLDC的有感控制时,使用GPIO16 17 18作为外部触发中断读取HALL的值,在中断中使用下面的语句读取HALL值。

Hall= (GpioDataRegs.GPADAT.all >>16) & 0x00000007;   (Hall的类型为unsigned char) 

GpioDataRegs.GPADAT.all对应16 17 18的bit值是正确的,但是最终得到的结果并不正确。为何不能这样直接读取???

注意到在BLDC_Sensored(28035)例程中读取HALL的方式为

temp = (GpioDataRegs.GPADAT.all>>24)&0x00000007; /* read all three GPIOs at once*/ \
\
HallGpioBitA = (temp&0x00000001);          /* save GPIO24 - A*/ \
HallGpioBitB = (temp&0x00000002)>>1;   /* save GPIO25 - B*/ \
HallGpioBitC = (temp&0x00000004)>>2;     /* save GPIO26 - C*/ \
HallGpioBitA = HallGpioBitA;                         /*<<2; shift GPIO24 - A*/ \
HallGpioBitB = HallGpioBitB<<1;                 /* shift GPIO25 - B*/ \
HallGpioBitC = HallGpioBitC<<2;               /*<<1; shift GPIO26 - C*/ \
\
v.HallGpio = HallGpioBitA + HallGpioBitB + HallGpioBitC;

这里为何不直接采取temp的值作为HALL结果呢???