/*************************************************************** * * * MFBSP_I2S * * * * Демонстрирует передачу массива данных из одного канала I2S * * в другой без использования DMA. * * Приёмник в зависимом от передатчика режиме. * * Массив OutputArray заполняется числами, * * затем пересылается из MFBSP0 в MFBSP1. * * Элементы входного массива InputArray проверяются * * на совпадение их значений с порядковыми номерами, * * возвращаемое значение этой фунции копируется в переменную * * Flag_Corr. * * Значение этой переменной можно вывести из меню * * View-> Debug Windows -> Watches -> Add -> <имя переменной> * * Задействовано 3 внешних вывода. * * Для работы примера необходимо соединить MFBSP1 и MFBSP0. * * Для отладочного модуля Салют-Д1: * * TWS 5 (LDAT0[1] <-> LDAT1[0]) 4 RWS- управляющий * * TD 9 (LDAT0[3] <-> LDAT1[2]) 8 RD- принимаемые * * TCLK 19 (LCLK0 <-> LACK1) 22 RCLK- тактовый * * * ****************************************************************/ #include "mcom_runtime/risc_mfbsp.h" #include "mcom_runtime/mcom02.h" // Частота I2S в Гц #define I2S_FRQ 6000000 // длина массива в 32-разрядных словах #define ARRAY_LEN 1000 unsigned int Flag_Corr = 0; // флаг корректности полученных данных // Адреса массивов должны быть выравнены по границе 64-разрядного слова, // если они будут пересылаться по DMA unsigned int OutputArray[ARRAY_LEN] __attribute__ ((aligned (8))); unsigned int InputArray[ARRAY_LEN] __attribute__ ((aligned (8))); // функция заполнения массива числами от 0 до len void FillArray(unsigned int *array, unsigned int len) { unsigned int i; for (i=0;i> 1) ^ 0xedb88320ul : crc >> 1; crc_table[i] = crc; }; crc = 0xfffffffful; while (len--) crc = crc_table[(crc ^ *buf++) & 0xff] ^ (crc >> 8); return crc ^ 0xfffffffful; } // функция заполняет массив нулями void ZeroArray(unsigned int *array, unsigned int len) { unsigned int i; for (i=0;i