/* * arm_dsp * Пример демонстрирует запуск задачи на DSP * ядре без использования библиотечных функций. */ #include "startup.h" extern int Start_DSP0; extern int Start_DSP1; extern volatile int InA0; extern volatile int InB0; extern volatile int OutC0; extern volatile int InA1; extern volatile int InB1; extern volatile int OutC1; int Flag_Corr = 0; int main() { int InputA0 = 5; int InputB0 = 2; int OutputC0; //вызов dsp0 DCSR(0) = 0; SR(0) = 0; PC(0) = ((unsigned int)&Start_DSP0 - 0x3a600000) >> 2; //(unsigned int)&PRAM)>>2; A0(0) = ((unsigned int)&InA0 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; A1(0) = ((unsigned int)&InB0 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; A2(0) = ((unsigned int)&OutC0 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; InA0 = InputA0; InB0 = InputB0; DCSR(0) = 0x4000; while (!(QSTR_DSP & (1 << 3))); //чтение результата dsp0 OutputC0 = OutC0; //вызов dsp1 int InputA1 = 55; int InputB1 = 22; int OutputC1; DCSR(1) = 0; SR(1) = 0; PC(1) = ((unsigned int)&Start_DSP1 - 0x3a600000) >> 2; //(unsigned int)&PRAM)>>2; A0(1) = ((unsigned int)&InA1 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; A1(1) = ((unsigned int)&InB1 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; A2(1) = ((unsigned int)&OutC1 - 0x3a400000) >> 2; //(unsigned int)&XRAM)>>2; InA1 = InputA1; InB1 = InputB1; DCSR(1) = 0x4000; while (!(QSTR_DSP & (1 << 11))); OutputC1 = OutC1; if ((OutputC0 == 7)&&(OutputC1==77)){ Flag_Corr = 0; } else { Flag_Corr=1; } asm volatile("bkpt"); return 0; }