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; }
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
Maybe the best solution is to use the inline assembler. Take a look to: http://www.keil.com/appnotes/docs/apnt_178.asp This application note uses MAC instructions to implement a DSP algorithm.