U16 div_by3_U16_soft(U16 data_in) {
U32 U32_01, result;
result = U32_01 = data_in;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
U32_01 <<= 2; result += U32_01;
result += 0x5555; //correction
return(result >> 16);
}
U16 div_by3_U16_hmul(U16 data_in) {
return((((U32)data_in * 0x5555) + 0x5555) >> 16);
}