|
|
@@ -20,19 +20,23 @@
|
|
|
#include "Devices//ad9912.h"
|
|
|
#include "Devices/pe43711.h"
|
|
|
#include "Devices//potentiometer.h"
|
|
|
+#include "DmaUtils//utils.h"
|
|
|
|
|
|
#include "command.h"
|
|
|
|
|
|
|
|
|
#define REQUESTED_MEMORY_SIZE 0x1000
|
|
|
+#define BUFF_SIZE 2048
|
|
|
#define SERVER_PORT 5025
|
|
|
#define BACKLOG 10
|
|
|
|
|
|
volatile int conn_fd = 0;
|
|
|
volatile int pci_fd = 0;
|
|
|
+volatile int dma_fd = 0;
|
|
|
int listen_fd = 0;
|
|
|
|
|
|
void *bar1;
|
|
|
+void *bar0;
|
|
|
reg_addr_pci* pci_bar_1;
|
|
|
|
|
|
//Обработчик ошибок
|
|
|
@@ -48,6 +52,11 @@ void error(const char *msg)
|
|
|
{
|
|
|
close(pci_fd);
|
|
|
}
|
|
|
+ if (dma_fd != 0)
|
|
|
+ {
|
|
|
+ close(dma_fd);
|
|
|
+ }
|
|
|
+
|
|
|
munmap(bar1, REQUESTED_MEMORY_SIZE);
|
|
|
exit(1);
|
|
|
}
|
|
|
@@ -70,6 +79,10 @@ void handle_close_signal(int signal)
|
|
|
{
|
|
|
close(pci_fd);
|
|
|
}
|
|
|
+ if (dma_fd != 0)
|
|
|
+ {
|
|
|
+ close(dma_fd);
|
|
|
+ }
|
|
|
munmap(bar1, REQUESTED_MEMORY_SIZE);
|
|
|
exit(0);
|
|
|
}
|
|
|
@@ -77,7 +90,10 @@ void handle_close_signal(int signal)
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
|
- char *filename = "/dev/MyDmaModule";
|
|
|
+ char *filename = "/dev/MyDmaModule-1";
|
|
|
+ char *filename_dma = "/dev/MyDmaModule-0";
|
|
|
+ int rc;
|
|
|
+ int rv;
|
|
|
|
|
|
struct timeval tv;
|
|
|
// Длина структуры адреса
|
|
|
@@ -103,6 +119,13 @@ int main(int argc, char *argv[])
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ dma_fd = open(filename_dma, O_RDWR | O_SYNC);
|
|
|
+ if (dma_fd == -1) {
|
|
|
+ int error = errno;
|
|
|
+ fprintf(stderr, "Cannot open DMA device file: %s\n", strerror(error));
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
bar1 = mmap(NULL, REQUESTED_MEMORY_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, pci_fd, 0);
|
|
|
if (bar1 == MAP_FAILED) {
|
|
|
perror("mmap");
|
|
|
@@ -127,6 +150,36 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
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");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
// Установка режима SPI
|
|
|
uint32_t cfg_reg = get_cfg_reg();
|
|
|
SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI);
|