/* * sample_sdma * Пример демонстрирует работу с контроллером SDMA. * Осуществляется пересылка массива данных типа память <-> * память и его верификация. */ #include "mcom_runtime/sdma.h" #define LEN 100 int mas[LEN] __attribute__((aligned(8))) = {0}; // source array int dst_mas[LEN] __attribute__((aligned(8))) = {0}; int Flag_Corr = 0; unsigned int CRC32(unsigned int len, unsigned int *buf) // CRC32 checksum { unsigned int crc_table[256]; unsigned int crc, i, j; for (i = 0; i < 256; i++) { crc = i; for (j = 0; j < 8; j++) crc = crc & 1 ? (crc >> 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(int *arr, int len) { int i = 0; for (i = 0; i < len; i++) arr[i] = -1; } int main(void) { // initialize of array int i; for (i = 0; i < LEN; i++) mas[i] = i; unsigned int src_crc = 0; // checksum of source src_crc = CRC32(LEN, (unsigned int *)mas); Flag_Corr = 10; ZeroArray(dst_mas, LEN); unsigned int dst_crc = 0; // checksum of destination unsigned int size = LEN * sizeof(int); sdma_copy(1, (unsigned int *)dst_mas, (unsigned int *)mas, size); dst_crc = CRC32(LEN, (unsigned int *)dst_mas); if (dst_crc == src_crc) Flag_Corr = 0; else Flag_Corr = 1; asm volatile("bkpt"); return 0; }