Part Number: BOOSTXL-POSMGR
Hi experts,
When I was doing the experiment about the encoder, I couldn't understand the meaning of some TI codes, mainly including PM_tformat_receiveData () function and tformat_getBits () function.
The main questions are as follows:
1.What is the role of bitIndex and wordNo in these functions;
2. How to interpret tformat_getBits ()
uint16_t PM_tformat_receiveData(uint16_t tformatDataID)
{
uint32_t len, bitIndex, wordNo;
uint16_t word1;
word1 = 1;
switch(tformatDataID)
{
case (PM_TFORMAT_DATAID2):
len = 8;
bitIndex = 13;
wordNo = 1;
tformatData.controlField = tformat_getBits (len, wordNo, bitIndex);
wordNo = wordNo + (10 + (16 - bitIndex) ) / 16;
bitIndex = 16 - ((10 + (16 - bitIndex)) % 16) ;
tformatData.statusField = tformat_getBits (len, wordNo, bitIndex);
wordNo = wordNo + (10 + (16 - bitIndex) ) / 16;
bitIndex = 16 - ((10 + (16 - bitIndex)) % 16) ;
tformatData.dataField0 = tformat_getBits (len, wordNo, bitIndex);
wordNo = wordNo + (10 + (16 - bitIndex) ) / 16;
bitIndex = 16 - ((10 + (16 - bitIndex)) % 16) ;
tformatData.crc = tformat_getBits (len, wordNo, bitIndex);
}
uint32_t tformat_getBits (uint16_t len, uint16_t wordNo, uint16_t bitIndex)
{
uint32_t shift0, shift1, shift2, mask0, mask1, mask2;
uint32_t temp32;
shift2 = (len > (16 + bitIndex) ) ? (32 - len + bitIndex): 32;
shift1 = (len > (16 + bitIndex) ) ? (16 - shift2) : (len > bitIndex ) ?
(16 - len + bitIndex): 32;
shift0 = (len > (16 + bitIndex) ) ? (16 + shift1) : (len > bitIndex ) ?
(16 - shift1): (bitIndex - len);
mask2 = (len > (16 + bitIndex) ) ? 0xFFFFFFFF : 0;
mask1 = (len > bitIndex ) ? 0xFFFFFFFF : 0;
mask0 = (len > bitIndex )? ((1 << bitIndex) - 1): ((1 << len) - 1) ;
temp32 = (len > (16 + bitIndex) ) ? (((tformatData.rdata[wordNo + 2] &
mask2) >> shift2) | ((tformatData.rdata[wordNo + 1] & mask1)
<< shift1) | ((tformatData.rdata[wordNo] & mask0) << shift0))
: (len > bitIndex ) ? (((tformatData.rdata[wordNo + 1] & mask1)
>> shift1) | ((tformatData.rdata[wordNo] & mask0) << shift0))
: ((tformatData.rdata[wordNo] >> shift0) & mask0) ;
return(temp32);
}

