Commit 8c19de1a authored by ywj's avatar ywj

init

parents
File added
File added
File added
File added
File added
#已经编译过的内核源码路径
KERNEL_DIR = /home/uisrc/uisrc-lab-xlnx/sources/kernel
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
#当前路径
CURRENT_DIR = $(shell pwd)
APP = dma_app
all :
#进入并调用内核源码目录中Makefile的规则, 将当前的目录中的源码编译成模块
make -C $(KERNEL_DIR) M=$(CURRENT_DIR) modules
ifneq ($(APP), )
$(CROSS_COMPILE)gcc $(APP).c -o $(APP)
endif
clean :
make -C $(KERNEL_DIR) M=$(CURRENT_DIR) clean
#指定编译哪个文件
obj-m += dma_drv.o
\ No newline at end of file
File added
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <poll.h>
#include "client_arm.c"
extern int send_data(char *buf, int len);
extern int net_init(char *ip);
extern void net_close(void);
#define ADC_IOCTL_MAGIC 'M'
#define CMD_GET_DMADATA _IO(ADC_IOCTL_MAGIC, 0)
#define CMD_SET_START _IO(ADC_IOCTL_MAGIC, 1)
#define ADC_SIZE 1024 * 1024
int main(int argc, char **argv)
{
int fd;
int ret = 0;
char data[ADC_SIZE];
uint16_t data_tmp[1024][8];
char *save = NULL;
int mem_switch = 0;
int num_buf;
int start;
int i, j;
int n = 0;
struct pollfd poll_fd[2];
struct timeval tv;
struct timeval tv_end;
if (argc < 2)
{
printf("input server ip\n");
return -1;
}
fd = open("/dev/adcdma_fun", O_RDWR);
if (fd < 0)
{
printf("can't open file fdma_fun\n");
return (-1);
}
memset(data, 0, sizeof(data));
poll_fd[0].events = POLLIN;
poll_fd[0].fd = 0;
poll_fd[1].events = POLLIN;
poll_fd[1].fd = fd;
net_init(argv[1]);
start = 1;
ioctl(fd, CMD_SET_START, &start);
while (1)
{
ret = poll(poll_fd, 2, -1);
if (ret < 0)
{
printf("error\n");
break;
}
if (poll_fd[0].revents & POLLIN)
{
printf("input\n");
break;
}
ret = ioctl(fd, CMD_GET_DMADATA, data);
if (ret < 0)
{
perror("get data err\n");
continue;
}
ret = send_data(data, ADC_SIZE);
if (ret < 0)
{
printf("send err\n");
break;
}
}
start = 0;
ioctl(fd, CMD_SET_START, &start);
printf("break while\n");
net_close();
merr:
close(fd);
return ret;
}
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#define ADC_IOCTL_MAGIC 'M'
#define CMD_GET_DMADATA _IO(ADC_IOCTL_MAGIC, 0)
#define CMD_SET_START _IO(ADC_IOCTL_MAGIC, 1)
#define ADC_SIZE (1024 * 1024)
int main()
{
int fd; // 文件描述符
int ret = 0; // 返回值
char data[ADC_SIZE]; // 用于存储 DMA 数据的缓冲区
uint16_t *data_tmp; // 临时指针,用于按照 16 位读取数据
int start = 1; // 控制 DMA 数据传输的标志
int i, j;
// 打开 DMA 设备文件
fd = open("/dev/adcdma_fun", O_RDWR);
if (fd < 0)
{
printf("Can't open file fdma_fun\n");
return -1;
}
// 启动 DMA 数据传输
ioctl(fd, CMD_SET_START, &start);
while (1)
{
// 从 DMA 设备中读取数据
ret = ioctl(fd, CMD_GET_DMADATA, data);
if (ret < 0)
{
perror("Get data error\n");
break;
}
// 将数据按照 16 位进行打印
data_tmp = (uint16_t *)data;
for (i = 0; i < ADC_SIZE / sizeof(uint16_t); i += 8)
{
for (j = 0; j < 8; j++)
{
printf("%04X ", data_tmp[i + j]);
}
printf("\n");
}
}
// 停止 DMA 数据传输
start = 0;
ioctl(fd, CMD_SET_START, &start);
// 关闭 DMA 设备文件
close(fd);
return ret;
}
\ No newline at end of file
This diff is collapsed.
File added
This diff is collapsed.
This diff is collapsed.
/dts-v1/;
#include "zynqmp.dtsi"
#include "zynqmp-clk-ccf.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/pinctrl-zynqmp.h>
#include <dt-bindings/phy/phy.h>
/ {
model = "UISRC.COM MZU07A-7EV";
compatible = "uisrc,mzu07a",
"xlnx,zynqmp-zcu100-revC",
"xlnx,zynqmp-zcu100",
"xlnx,zynqmp";
aliases {
ethernet0 = &gem3;
rtc0 = &rtc;
i2c0 = &i2c0;
serial0 = &uart0;
spi0 = &qspi;
usb0 = &usb0;
};
chosen {
bootargs = "earlycon clk_ignore_unused";
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x7ff00000>, <0x00000008 0x00000000 0x0 0x80000000>;
};
};
/ {
amba_pl: amba_pl@0 {
#address-cells = <2>;
#size-cells = <2>;
compatible = "simple-bus";
ranges ;
axi_dma_0: dma@80000000 {
#dma-cells = <1>;
clock-names = "m_axi_s2mm_aclk", "s_axi_lite_aclk";
clocks = <&zynqmp_clk 71>, <&zynqmp_clk 71>;
compatible = "xlnx,axi-dma-7.1", "xlnx,axi-dma-1.00.a";
interrupt-names = "s2mm_introut";
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
reg = <0x0 0x80000000 0x0 0x10000>;
xlnx,addrwidth = <0x20>;
xlnx,sg-length-width = <0x17>;
dma-channel@80000030 {
compatible = "xlnx,axi-dma-s2mm-channel";
dma-channels = <0x1>;
interrupts = <0 89 4>;
xlnx,datawidth = <0x80>;
xlnx,device-id = <0x0>;
};
};
gpio_user_rstn: gpio@80010000 {
#gpio-cells = <3>;
clock-names = "s_axi_aclk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,axi-gpio-2.0", "xlnx,xps-gpio-1.00.a";
gpio-controller ;
reg = <0x0 0x80010000 0x0 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x1>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
gpio_user_start: gpio@80020000 {
#gpio-cells = <3>;
clock-names = "s_axi_aclk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,axi-gpio-2.0", "xlnx,xps-gpio-1.00.a";
gpio-controller ;
reg = <0x0 0x80020000 0x0 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x1>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
adcdma_fun_0: adcdma_fun0@0 {
compatible = "adcdma_demo";
dmas = <&axi_dma_0 0>;
dma-names = "adc";
num-buf = <3>;
reset-gpios = <&gpio_user_rstn 0 0 GPIO_ACTIVE_HIGH>;
enable-gpios = <&gpio_user_start 0 0 GPIO_ACTIVE_HIGH>;
};
};
};
&fclk0 {
status = "okay";
};
&gic {
num_cpus = <2>;
num_interrupts = <96>;
};
&lpd_dma_chan1 {
status = "okay";
};
&lpd_dma_chan2 {
status = "okay";
};
&lpd_dma_chan3 {
status = "okay";
};
&lpd_dma_chan4 {
status = "okay";
};
&lpd_dma_chan5 {
status = "okay";
};
&lpd_dma_chan6 {
status = "okay";
};
&lpd_dma_chan7 {
status = "okay";
};
&lpd_dma_chan8 {
status = "okay";
};
&xilinx_ams {
status = "okay";
};
&can1 {
status = "okay";
};
&cci {
status = "okay";
};
&zynqmp_dpsub {
phy-names = "dp-phy0","dp-phy1";
phys = <&lane1 6 0 1 27000000>, <&lane0 6 1 1 27000000>;
status = "okay";
xlnx,max-lanes = <2>;
};
&xlnx_dpdma {
status = "okay";
};
&gem3 {
status = "okay";
phy-mode = "rgmii-id";
xlnx,ptp-enet-clock = <0x0>;
phy-handle = <&ethernet_phy>;
ethernet_phy: ethernet-phy@5 {
reg = <5>;
};
};
&fpd_dma_chan1 {
status = "okay";
};
&fpd_dma_chan2 {
status = "okay";
};
&fpd_dma_chan3 {
status = "okay";
};
&fpd_dma_chan4 {
status = "okay";
};
&fpd_dma_chan5 {
status = "okay";
};
&fpd_dma_chan6 {
status = "okay";
};
&fpd_dma_chan7 {
status = "okay";
};
&fpd_dma_chan8 {
status = "okay";
};
&gpio {
emio-gpio-width = <32>;
gpio-mask-high = <0x0>;
gpio-mask-low = <0x5600>;
status = "okay";
};
&gpu {
status = "okay";
xlnx,tz-nonsecure = <0x1>;
};
&i2c0 {
status = "okay";
clock-frequency = <400000>;
scl-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
sda-gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
rtc@68 {
compatible = "dallas,ds1337";
reg = <0x68>;
};
eeprom@50 {
compatible = "atmel,24c02";
//compatible = "at24,24c02";
reg = <0x50>;
};
};
&qspi {
status = "okay";
is-dual = <1>;
num-cs = <1>;
flash@0 {
compatible = "m25p80", "jedec,spi-nor"; /* 32MB */
#address-cells = <1>;
#size-cells = <1>;
reg = <0x0>;
spi-rx-bus-width = <4>;
spi-tx-bus-width = <4>;
spi-max-frequency = <108000000>;
};
};
&rtc {
status = "okay";
};
&sata {
ceva,p0-burst-params = /bits/ 8 <0x13 0x08 0x4A 0x06>;
ceva,p0-cominit-params = /bits/ 8 <0x18 0x40 0x18 0x28>;
ceva,p0-comwake-params = /bits/ 8 <0x06 0x14 0x08 0x0E>;
ceva,p0-retry-params = /bits/ 16 <0x96A4 0x3FFC>;
ceva,p1-burst-params = /bits/ 8 <0x13 0x08 0x4A 0x06>;
ceva,p1-cominit-params = /bits/ 8 <0x18 0x40 0x18 0x28>;
ceva,p1-comwake-params = /bits/ 8 <0x06 0x14 0x08 0x0E>;
ceva,p1-retry-params = /bits/ 16 <0x96A4 0x3FFC>;
status = "okay";
xlnx,tz-nonsecure-sata0 = <0x0>;
xlnx,tz-nonsecure-sata1 = <0x0>;
};
&sdhci0 {
clock-frequency = <50000000>;
status = "okay";
xlnx,mio_bank = <0x0>;
no-1-8-v;
disable-wp;
};
&sdhci1 {
clock-frequency = <187500000>;
status = "okay";
xlnx,mio_bank = <0x1>;
bus-width = <8>;
non-removable;
disable-wp;
};
&serdes {
status = "okay";
};
&uart0 {
cts-override ;
device_type = "serial";
port-number = <0>;
status = "okay";
u-boot,dm-pre-reloc ;
};
&usb0 {
status = "okay";
xlnx,tz-nonsecure = <0x1>;
xlnx,usb-polarity = <0x0>;
xlnx,usb-reset-mode = <0x0>;
};
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
&lpd_watchdog {
status = "okay";
};
&watchdog0 {
status = "okay";
};
&pss_ref_clk {
clock-frequency = <33333333>;
};
&ams_ps {
status = "okay";
};
&ams_pl {
status = "okay";
};
&zynqmp_dp_snd_pcm0 {
status = "okay";
};
&zynqmp_dp_snd_pcm1 {
status = "okay";
};
&zynqmp_dp_snd_card0 {
status = "okay";
};
&zynqmp_dp_snd_codec0 {
status = "okay";
};
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment