summaryrefslogtreecommitdiff
path: root/n/asserv/src/test_dsp.c
diff options
context:
space:
mode:
Diffstat (limited to 'n/asserv/src/test_dsp.c')
-rw-r--r--n/asserv/src/test_dsp.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/n/asserv/src/test_dsp.c b/n/asserv/src/test_dsp.c
index 37f8d2d..dace398 100644
--- a/n/asserv/src/test_dsp.c
+++ b/n/asserv/src/test_dsp.c
@@ -38,8 +38,10 @@ proto_callback (uint8_t c, uint8_t argc, proto_arg_t argv[])
int16_t a;
uint16_t b;
int16_t r;
- int16_t i, j;
+ int16_t i, j, k;
uint16_t w = 0xa66a;
+ int32_t al, bl, rl;
+ uint32_t wl[] = { 0xa66a6aa6, 0xffffffff, 0xaff605be };
switch (c | argc << 8)
{
case 'm' | 0 << 8:
@@ -61,6 +63,33 @@ proto_callback (uint8_t c, uint8_t argc, proto_arg_t argv[])
}
}
break;
+ case 'M' | 0 << 8:
+ for (k = 0; k < 3; k++)
+ {
+ for (i = 32; i > 0; i--)
+ {
+ al = wl[k] >> i;
+ for (j = 32; j >= 0; j--)
+ {
+ bl = wl[k] >> j;
+ proto_send4 ('A',
+ (al >> 24) & 0xff, (al >> 16) & 0xff,
+ (al >> 8) & 0xff, al & 0xff);
+ proto_send4 ('B',
+ (bl >> 24) & 0xff, (bl >> 16) & 0xff,
+ (bl >> 8) & 0xff, bl & 0xff);
+ rl = dsp_mul_f824 (al, bl);
+ proto_send4 ('r',
+ (rl >> 24) & 0xff, (rl >> 16) & 0xff,
+ (rl >> 8) & 0xff, rl & 0xff);
+ rl = dsp_mul_f824 (-al, bl);
+ proto_send4 ('R',
+ (rl >> 24) & 0xff, (rl >> 16) & 0xff,
+ (rl >> 8) & 0xff, rl & 0xff);
+ }
+ }
+ }
+ break;
case 'z' | 0 << 8:
reset ();
default: