This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

XC 167: 2s complement fractional format

Hello,
I'm trying to use 2s complement fractional format in XC 167 a and I have following problem with multiplication:

 /*2s complement fractional format - multiplication test*/

#include <XC167.h>
#include <intrins.h>

signed short int a = 1024;  // = 0.03125
signed short int b = 1024;  // = 0.03125
signed short int c, x;

void main (void)
{
MCW = 0x0400;               //MP = 1, automatic shift 1 bit left

x = b * a;
c = MDH;

} 

The result c is 16d and I expect 32d (0.0009765625). Product after multiplication is not shifted one bit left.

Can anyone give me a rough idea how to use 2s complement fractional format?

I'm using uVision2 and C is recommended.

Thank you
Pavel

Parents
  • Hi Pavel,
    your problem is that you have not used the MAC unit for multiplication: you should have used the CoMAC instruction to obtain the product and the shift at the same time.
    Please read the C166 V2 user's manual, chaper 8.2 (DSP Instruction Set) and take a look at the MAC.H file into the Keil C166 Include directory, which enables you to directly use the MAC unit in C.
    Ciao
    Bruno

Reply
  • Hi Pavel,
    your problem is that you have not used the MAC unit for multiplication: you should have used the CoMAC instruction to obtain the product and the shift at the same time.
    Please read the C166 V2 user's manual, chaper 8.2 (DSP Instruction Set) and take a look at the MAC.H file into the Keil C166 Include directory, which enables you to directly use the MAC unit in C.
    Ciao
    Bruno

Children