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.

BOOSTXL-POSMGR: 如何把TI例程中17位编码器的程序修改为自己的23位编码器的程序

Part Number: BOOSTXL-POSMGR
Other Parts Discussed in Thread: C2000WARE

TI工程师,

您好!TI的例程中有关于多摩川的绝对值编码器的程序,可是是17位的,其路径为D:\ti\c2000\C2000Ware_MotorControl_SDK_3_01_00_00\libraries\position_sensing\tformat。如果我想用在自己的23位编码器(通过对比两者通讯协议发现,与TI例程17位编码器相比,通讯协议是一致的,仅仅是位数存在差异)上面,需要进行修改。所以有以下问题需要咨询:

1.TI例程中的PM_tformat_receiveData () 和tformat_getBits ()函数中的参数bitIndex和 wordNo是什么意思?

2.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);
}            

3.假如我想把TI 17位的例程改为自己23位编码器的程序,除了上述所涉及到两个函数,还需要修改哪些地方?

以上,请TI工程师帮忙回答一下,谢谢!