Kaynağa Gözat

Projects Merge

Anatoliy Chigirinskiy 1 yıl önce
ebeveyn
işleme
767173c92a
5 değiştirilmiş dosya ile 73 ekleme ve 23 silme
  1. 5 1
      CMakeLists.txt
  2. 0 17
      CMakePresets.json
  3. 5 0
      command.c
  4. 5 0
      command.h
  5. 58 5
      main.c

+ 5 - 1
CMakeLists.txt

@@ -1,5 +1,9 @@
 cmake_minimum_required(VERSION 3.5.0)
 project(TMSG44_CoolPi VERSION 0.1.0 LANGUAGES C CXX)
 
-add_executable(TMSG44_CoolPi command.c main.c)
+add_executable(TMSG44_CoolPi command.c main.c
+        Devices/ad9912.c
+        Devices/lmk04821.c
+        Devices/lmx2594.c
+        Devices/tmsgheaders.c)
 

+ 0 - 17
CMakePresets.json

@@ -1,17 +0,0 @@
-{
-    "version": 8,
-    "configurePresets": [
-        {
-            "name": "gcc-TMSG44",
-            "displayName": "GCC 11.4.0 x86_64-linux-gnu",
-            "description": "Using compilers: C = /usr/bin/gcc, CXX = /usr/bin/g++",
-            "binaryDir": "${sourceDir}/out/build/${presetName}",
-            "cacheVariables": {
-                "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
-                "CMAKE_C_COMPILER": "/usr/bin/gcc",
-                "CMAKE_CXX_COMPILER": "/usr/bin/g++",
-                "CMAKE_BUILD_TYPE": "Debug"
-            }
-        }
-    ]
-}

+ 5 - 0
command.c

@@ -8,6 +8,8 @@
 #include <string.h>
 #include <sys/socket.h>
 
+#include "Devices/lmx2594.h"
+
 //Массив структур Command, который связывает строки команд с соответствующими функциями.
 Command commands[] = {
 	{"TMSG44:FREQ ", 	handleFreqCmd},
@@ -28,6 +30,9 @@ void handleFreqCmd(const char* recvBuff)
 	splitLexeme(recvBuff, freq, sizeof(freq[0]), convertToUint64);
 
 	printf("%" PRId64 "\n", freq[0]);
+    lmx_freq_set(bar1, freq[0]);
+    printf("The frequency is set to %lu Hz\n", freq[0]);
+
 }
 
 void handleLdCmd(const char* recvBuff)

+ 5 - 0
command.h

@@ -13,6 +13,11 @@
 
 // Объявление глобальных переменных
 extern volatile int sockfd;
+extern volatile int pci_fd;
+
+extern  void *bar1;
+
+
 
 typedef void (*CommandHandler)(const char*);
 

+ 58 - 5
main.c

@@ -7,10 +7,22 @@
 #include <errno.h>
 #include <arpa/inet.h> 
 #include <signal.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+
+#include "Devices//tmsgheaders.h"
+#include "Devices//lmx2594.h"
+#include "Devices//lmk04821.h"
+#include "Devices//ad9912.h"
 
 #include "command.h"
 
+#define     REQUESTED_MEMORY_SIZE  0x1000
+
 volatile int sockfd = 0;
+volatile int pci_fd = 0;
+
+void *bar1;
 
 //Обработчик ошибок
 void error(const char *msg)
@@ -21,7 +33,11 @@ void error(const char *msg)
 	{
 		close(sockfd);
 	}
-
+    if (pci_fd != 0)
+    {
+        close(pci_fd);
+    }
+    munmap(bar1, REQUESTED_MEMORY_SIZE);
 	exit(1);
 } 
 
@@ -35,14 +51,45 @@ void handleCloseSignal(int signal)
 		{
 			close(sockfd);
 		}
+        if (pci_fd != 0)
+        {
+            close(pci_fd);
+        }
+        munmap(bar1, REQUESTED_MEMORY_SIZE);
 		exit(0);
 	}
 }
 
 int main(int argc, char *argv[])
 {
+
+    char *filename = "/dev/MyDmaModule";
+
+    pci_fd = open(filename, O_RDWR | O_SYNC);
+    if (pci_fd == -1) {
+        int error = errno;
+        fprintf(stderr, "Cannot open file: %s\n", strerror(error));
+        return 1;
+    }
+
+    bar1 = mmap(NULL, REQUESTED_MEMORY_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, pci_fd, 0);
+    printf("bar0 ptr %p\n", bar1);
+    if (bar1 == MAP_FAILED) {
+        perror("mmap");
+        close(pci_fd);
+        return 1;
+    }
+
+    lmk04821_a_init(bar1);
+    usleep(500);
+    lmk04821_b_init(bar1);
+    rst_for_fpga(bar1);
+    shift_reg(bar1);
+    ad9912_init(bar1);
+    lmx2594_init(bar1);
+
 	//argv[1] = "127.0.0.1";
-	int n = 0;
+	ssize_t n;
 	char recvBuff[1024];
 	struct sockaddr_in serv_addr;
 
@@ -53,15 +100,15 @@ int main(int argc, char *argv[])
 	{
 		printf("\n Usage: %s <ip of server> \n",argv[0]);
 		return 1;
-	} 
+	}
 
-	memset(recvBuff, '0',sizeof(recvBuff));
+	memset(recvBuff, 0,sizeof(recvBuff));
 	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
 	{
 		error("Error : Could not create socket!");
 	} 
 
-	memset(&serv_addr, '0', sizeof(serv_addr)); 
+	memset(&serv_addr, 0, sizeof(serv_addr));
 
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_port = htons(5000); 
@@ -99,5 +146,11 @@ int main(int argc, char *argv[])
 	} 
 
 	close(sockfd);
+    munmap(bar1, REQUESTED_MEMORY_SIZE);
+    int fd_close = close(pci_fd);
+    if (fd_close == -1) {
+        perror("close");
+        return 1;
+    }
 	return 0;
 }