|
|
@@ -28,6 +28,23 @@
|
|
|
#define REQUESTED_MEMORY_SIZE 0x1000
|
|
|
#define REQUESTED_MEMORY_SIZE_DMA 0x10000
|
|
|
#define BUFF_SIZE 2048
|
|
|
+#define STREAM_SIZE (STREAM_WORDS<<3)
|
|
|
+/* 64'hdeadbeefdeadbeef */
|
|
|
+#define TAIL_MAGIC 0xdeadbeefdeadbeef
|
|
|
+#define HEAD_MAGIC ~TAIL_MAGIC
|
|
|
+#define SIZE_POS 0
|
|
|
+#define SIZE_MASK (0xFFFFFFFFUL << SIZE_POS)
|
|
|
+#define INCR_POS 32
|
|
|
+#define INCR_MASK (0xFFFFFFFFUL << INCR_POS)
|
|
|
+#define ADDR_POS 0
|
|
|
+/* 64 bit address */
|
|
|
+#define ADDR_MASK (0xFFFFFFFFFFFFFFFFUL << ADDR_POS)
|
|
|
+/* ADDRESSES */
|
|
|
+#define SYNTH_LO_ADDR (0x00001000 << ADDR_POS)
|
|
|
+#define SYNTH_RF1_ADDR (0x00000000 << ADDR_POS)
|
|
|
+#define BLOCK_LO_ADDR (0x00002000 << ADDR_POS)
|
|
|
+#define BOCH_ADDR (0x00003000 << ADDR_POS)
|
|
|
+#define CTRL_CP_ADDR (0x00004000 << ADDR_POS)
|
|
|
#define SERVER_PORT 5025
|
|
|
#define BACKLOG 10
|
|
|
|
|
|
@@ -159,39 +176,86 @@ int main(int argc, char *argv[])
|
|
|
lmx2594_init(pci_bar_1);
|
|
|
|
|
|
usleep(1000);
|
|
|
- char *user_buffer = (char *) malloc(BUFF_SIZE);
|
|
|
- char *user_buffer_read = (char *) malloc(BUFF_SIZE);
|
|
|
-
|
|
|
- for (int i = 0; i < BUFF_SIZE; i++) {
|
|
|
- /*fill the buffer with random data*/
|
|
|
- user_buffer[i] = (char) (rand() % 256);
|
|
|
- }
|
|
|
-
|
|
|
- rc = write_to_buffer (filename_dma, dma_fd, user_buffer, BUFF_SIZE, 0);
|
|
|
- if (rc < 0) {
|
|
|
- fprintf(stderr, "write_to_buffer failed\n");
|
|
|
- return 1;
|
|
|
- }
|
|
|
- /*wait for data to be written*/
|
|
|
- usleep(5);
|
|
|
- rv = read_from_buffer (filename_dma, dma_fd, user_buffer_read, BUFF_SIZE, 0);
|
|
|
- if (rv < 0) {
|
|
|
- fprintf(stderr, "read_from_buffer failed\n");
|
|
|
- return 1;
|
|
|
- }
|
|
|
- /*Check if the user buffer and the read buffer are the same*/
|
|
|
- if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
|
|
|
- fprintf(stderr, "Data mismatch\n");
|
|
|
- return 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- fprintf(stderr, "Data match\n");
|
|
|
- }
|
|
|
-
|
|
|
- free(user_buffer);
|
|
|
- free(user_buffer_read);
|
|
|
-
|
|
|
|
|
|
+ uint64_t *user_buffer = (uint64_t *) malloc(BUFF_SIZE);
|
|
|
+ uint64_t *user_buffer_read = (uint64_t *) malloc(BUFF_SIZE);
|
|
|
+ uint64_t *addr_buffer = (uint64_t *) malloc(BUFF_SIZE);
|
|
|
+ addr_buffer[0] = SYNTH_LO_ADDR;
|
|
|
+ addr_buffer[1] = SYNTH_LO_ADDR;
|
|
|
+ addr_buffer[2] = BLOCK_LO_ADDR;
|
|
|
+ addr_buffer[3] = BOCH_ADDR;
|
|
|
+ addr_buffer[4] = CTRL_CP_ADDR;
|
|
|
+ /* Iterate over the addresses */
|
|
|
+ for (int i = 0; i < 5; i++) {
|
|
|
+ user_buffer[0] = HEAD_MAGIC;
|
|
|
+ user_buffer[1] = (0 << INCR_POS) | ((uint32_t) (BUFF_SIZE - (4 << 3)) << SIZE_POS);
|
|
|
+ user_buffer[2] = addr_buffer[i];
|
|
|
+ for (int j = 3; j < (BUFF_SIZE >> 3) - 1; j++) {
|
|
|
+ user_buffer[j] = j;
|
|
|
+ }
|
|
|
+ /* tail magic */
|
|
|
+ user_buffer[(BUFF_SIZE >> 3) - 1 ] = TAIL_MAGIC;
|
|
|
+ /* show the buffer */
|
|
|
+ for (int j = 0; j < (BUFF_SIZE >> 3); j++) {
|
|
|
+ fprintf(stderr, "0x%016lx\n", user_buffer[j]);
|
|
|
+ }
|
|
|
+
|
|
|
+ rc = write_to_buffer(filename_dma, dma_fd, (void *) user_buffer, BUFF_SIZE, 0);
|
|
|
+ if (rc < 0) {
|
|
|
+ fprintf(stderr, "write_to_buffer failed\n");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+// rv = read_from_buffer(filename_dma, dma_fd, (void *) user_buffer_read, BUFF_SIZE, 0);
|
|
|
+// if (rv < 0) {
|
|
|
+// fprintf(stderr, "read_from_buffer failed\n");
|
|
|
+// return 1;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /* Check if the user buffer and the read buffer are the same */
|
|
|
+// if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
|
|
|
+// fprintf(stderr, "Data mismatch\n");
|
|
|
+// return 1;
|
|
|
+// } else {
|
|
|
+// fprintf(stderr, "Data match\n");
|
|
|
+// }
|
|
|
+ }
|
|
|
+// user_buffer[0] = HEAD_MAGIC;
|
|
|
+// user_buffer[1] = (0 << INCR_POS) | ((uint32_t) 0x10 << SIZE_POS);
|
|
|
+// user_buffer[2] = SYNTH_LO_ADDR;
|
|
|
+// for (int i = 3; i < (BUFF_SIZE >> 3) - 1; i++) {
|
|
|
+// user_buffer[i] = i;
|
|
|
+// }
|
|
|
+// /* tail magic */
|
|
|
+// user_buffer[(BUFF_SIZE >> 3) - 1 ] = TAIL_MAGIC;
|
|
|
+// /* show the buffer */
|
|
|
+// for (int i = 0; i < (BUFF_SIZE >> 3); i++) {
|
|
|
+// fprintf(stderr, "0x%016lx\n", user_buffer[i]);
|
|
|
+// }
|
|
|
+//
|
|
|
+// rc = write_to_buffer(filename_dma, dma_fd, (void *) user_buffer, BUFF_SIZE, 0);
|
|
|
+// if (rc < 0) {
|
|
|
+// fprintf(stderr, "write_to_buffer failed\n");
|
|
|
+// return 1;
|
|
|
+// }
|
|
|
+//
|
|
|
+// rv = read_from_buffer(filename_dma, dma_fd, (void *) user_buffer_read, BUFF_SIZE, 0);
|
|
|
+// if (rv < 0) {
|
|
|
+// fprintf(stderr, "read_from_buffer failed\n");
|
|
|
+// return 1;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /* Check if the user buffer and the read buffer are the same */
|
|
|
+// if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
|
|
|
+// fprintf(stderr, "Data mismatch\n");
|
|
|
+// return 1;
|
|
|
+// } else {
|
|
|
+// fprintf(stderr, "Data match\n");
|
|
|
+// }
|
|
|
+
|
|
|
+ free(user_buffer);
|
|
|
+ free(user_buffer_read);
|
|
|
+ free(addr_buffer);
|
|
|
usleep(1000);
|
|
|
// Установка режима SPI
|
|
|
uint32_t cfg_reg = get_cfg_reg();
|