diff options
Diffstat (limited to 'host/apps')
| -rw-r--r-- | host/apps/omap_debug/.gitignore | 20 | ||||
| -rw-r--r-- | host/apps/omap_debug/Makefile | 33 | ||||
| -rw-r--r-- | host/apps/omap_debug/README | 1 | ||||
| -rwxr-xr-x | host/apps/omap_debug/set_debug_pins.py | 35 | ||||
| -rw-r--r-- | host/apps/omap_debug/test.c | 34 | ||||
| -rw-r--r-- | host/apps/omap_debug/u1e-read-stream.c | 21 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-button.c | 56 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-ctl.c | 48 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-debug-pins.c | 77 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-i2c.c | 87 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-lb-test.c | 58 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-led.c | 35 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-ram.c | 25 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-read.c | 18 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-spi.c | 54 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-uart-rx.c | 53 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-uart.c | 48 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp-e-write.c | 21 | ||||
| -rw-r--r-- | host/apps/omap_debug/usrp_e.h | 60 | 
19 files changed, 784 insertions, 0 deletions
| diff --git a/host/apps/omap_debug/.gitignore b/host/apps/omap_debug/.gitignore new file mode 100644 index 000000000..008a23138 --- /dev/null +++ b/host/apps/omap_debug/.gitignore @@ -0,0 +1,20 @@ +.gitignore +clkgen-config +fpga-downloader +usrp-e-button +usrp-e-crc-rw +usrp-e-ctl +usrp-e-debug-pins +usrp-e-fpga-rw +usrp-e-gpio +usrp-e-i2c +usrp-e-lb-test +usrp-e-led +usrp-e-loopback +usrp-e-random-loopback +usrp-e-rw +usrp-e-spi +usrp-e-timed +usrp-e-uart +usrp-e-uart-rx +usrp-e-mm-loopback diff --git a/host/apps/omap_debug/Makefile b/host/apps/omap_debug/Makefile new file mode 100644 index 000000000..f8b9f2bd9 --- /dev/null +++ b/host/apps/omap_debug/Makefile @@ -0,0 +1,33 @@ +CFLAGS=-Wall -I../../lib/usrp/usrp_e/ -march=armv7-a -mtune=cortex-a8 -mfpu=neon -O3 +CXXFLAGS=-Wall -I../../lib/usrp/usrp_e/ -march=armv7-a -mtune=cortex-a8 -mfpu=neon -O3 + +all : usrp-e-spi usrp-e-i2c usrp-e-uart usrp-e-led usrp-e-ctl usrp-e-button usrp-e-uart-rx usrp-e-gpio usrp-e-debug-pins + +usrp-e-spi : usrp-e-spi.c + +usrp-e-i2c : usrp-e-i2c.c + +usrp-e-uart : usrp-e-uart.c + +usrp-e-uart-rx : usrp-e-uart-rx.c + +usrp-e-led : usrp-e-led.c + +usrp-e-ctl : usrp-e-ctl.c + +usrp-e-button : usrp-e-button.c + +usrp-e-gpio : usrp-e-gpio.c + +usrp-e-debug-pins : usrp-e-debug-pins.c +clean : +	rm -f usrp-e-spi +	rm -f usrp-e-i2c +	rm -f usrp-e-uart +	rm -f usrp-e-uart-rx +	rm -f usrp-e-led +	rm -f usrp-e-ctl +	rm -f usrp-e-button +	rm -f usrp-e-gpio +	rm -f usrp-e-debug-pins +	rm -f usrp-e-lb-test diff --git a/host/apps/omap_debug/README b/host/apps/omap_debug/README new file mode 100644 index 000000000..bbe0c2cc4 --- /dev/null +++ b/host/apps/omap_debug/README @@ -0,0 +1 @@ +OMAP development tools go here diff --git a/host/apps/omap_debug/set_debug_pins.py b/host/apps/omap_debug/set_debug_pins.py new file mode 100755 index 000000000..0f9ecd7b9 --- /dev/null +++ b/host/apps/omap_debug/set_debug_pins.py @@ -0,0 +1,35 @@ +#!/usr/bin/python + +import os + +# Memory Map +misc_base = 0 +uart_base = 1 +spi_base = 2 +i2c_base = 3 +gpio_base = 4 * 128 +settings_base = 5 + +# GPIO offset +gpio_pins = 0 +gpio_ddr = 4 +gpio_ctrl_lo = 8 +gpio_ctrl_hi = 12 + +def set_reg(reg, val): +    os.system("./usrp1-e-ctl w %d 1 %d" % (reg,val)) + +def get_reg(reg): +    fin,fout = os.popen4("./usrp1-e-ctl r %d 1" % (reg,)) +    print fout.read() + +# Set DDRs to output +set_reg(gpio_base+gpio_ddr, 0xFFFF) +set_reg(gpio_base+gpio_ddr+2, 0xFFFF) + +# Set CTRL to Debug #0 ( A is for debug 0, F is for debug 1 ) +set_reg(gpio_base+gpio_ctrl_lo, 0xAAAA) +set_reg(gpio_base+gpio_ctrl_lo+2, 0xAAAA) +set_reg(gpio_base+gpio_ctrl_hi, 0xAAAA) +set_reg(gpio_base+gpio_ctrl_hi+2, 0xAAAA) + diff --git a/host/apps/omap_debug/test.c b/host/apps/omap_debug/test.c new file mode 100644 index 000000000..36f4d700a --- /dev/null +++ b/host/apps/omap_debug/test.c @@ -0,0 +1,34 @@ +#include <stdio.h> + +void +main() +{ +  int x; +  char *y; +  long long z; + +  x = 0x01020304; +  z = 0x0102030405060708LL; + +  printf("%x\n",x); +  y = (char *)&x; +  printf("%x\n",y[0]); +  printf("%x\n",y[1]); +  printf("%x\n",y[2]); +  printf("%x\n",y[3]); + +  printf("Printing z ...\n"); +  printf("%llx\n",z); +  printf("Printing z done\n"); + +  y = (char *)&z; +  printf("%x\n",y[0]); +  printf("%x\n",y[1]); +  printf("%x\n",y[2]); +  printf("%x\n",y[3]); +  printf("%x\n",y[4]); +  printf("%x\n",y[5]); +  printf("%x\n",y[6]); +  printf("%x\n",y[7]); +} + diff --git a/host/apps/omap_debug/u1e-read-stream.c b/host/apps/omap_debug/u1e-read-stream.c new file mode 100644 index 000000000..4e4c21d9e --- /dev/null +++ b/host/apps/omap_debug/u1e-read-stream.c @@ -0,0 +1,21 @@ +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> + +int main(int rgc, char *argv[]) +{ +	int fp, cnt, n; +	short buf[1024]; + +	n = 0; + +	fp = open("/dev/usrp1_e0", O_RDONLY); +	printf("fp = %d\n", fp); + +	do { +		cnt = read(fp, buf, 2048); +		n++; +//		printf("Bytes read - %d\n", cnt); +	} while(n < 10*512); +	printf("Data - %hX\n", buf[0]); +} diff --git a/host/apps/omap_debug/usrp-e-button.c b/host/apps/omap_debug/usrp-e-button.c new file mode 100644 index 000000000..f13291491 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-button.c @@ -0,0 +1,56 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> +#include <unistd.h> + +#include "usrp_e.h" +#include "usrp_e_regs.hpp" + +// Usage: usrp_e_uart <string> + +#define PB1 (1<<8) +#define PB2 (1<<9) +#define PB3 (1<<10) +#define P1 (0) +#define P2 (0xFF) +#define P3 (0xAA) +#define P4 (0x55) + +int main(int argc, char *argv[]) +{ +	int fp, ret; +	struct usrp_e_ctl16 d; +	int pb1=0, pb2=0, pb3=0, p1=0, p2=0, p3=0, p4=0; + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	d.offset = UE_REG_MISC_SW; +	d.count = 1; + +	do { +		ret = ioctl(fp, USRP_E_READ_CTL16, &d); +		if (d.buf[0] & PB1) { +			pb1 = 1; +			printf("Pushbutton 1 hit\n"); +		} + +		if (d.buf[0] & PB2) { +			pb2 = 1; +			printf("Pushbutton 2 hit\n"); +		} + +		if (d.buf[0] & PB3) { +			pb3 = 1; +			printf("Pushbutton 3 hit\n"); +		} + +		sleep(1); + +	} while (!(pb1 && pb2 && pb3)); + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-ctl.c b/host/apps/omap_debug/usrp-e-ctl.c new file mode 100644 index 000000000..69c48ee6f --- /dev/null +++ b/host/apps/omap_debug/usrp-e-ctl.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" + +// Usage: usrp_e_ctl w|r offset number_of_values val1 val2 .... + +int main(int argc, char *argv[]) +{ +	int fp, i, cnt, ret; +	struct usrp_e_ctl16 ctl_data; + +	if (argc < 4) { +		printf("Usage: usrp_e_ctl w|r offset number_of_values val1 val2 ....\n"); +		exit(-1); +	} + +	cnt = atoi(argv[3]); + +	ctl_data.offset = atoi(argv[2]); +	ctl_data.count  = cnt; + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	if (*argv[1] == 'w') { +		for (i=0; i<cnt; i++) +			ctl_data.buf[i] = atoi(argv[4+i]); + +		ret = ioctl(fp, USRP_E_WRITE_CTL16, &ctl_data); +		printf("Return value from write ioctl = %d\n", ret); +	} + +	if (*argv[1] == 'r') { +		ret = ioctl(fp, USRP_E_READ_CTL16, &ctl_data); +		printf("Return value from write ioctl = %d\n", ret); + +		for (i=0; i<ctl_data.count; i++) { +			if (!(i%8)) +				printf("\nData at %4d :", i); +			printf(" %5d", ctl_data.buf[i]); +		} +		printf("\n"); +	} +} diff --git a/host/apps/omap_debug/usrp-e-debug-pins.c b/host/apps/omap_debug/usrp-e-debug-pins.c new file mode 100644 index 000000000..d18bbf990 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-debug-pins.c @@ -0,0 +1,77 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" +#include "usrp_e_regs.hpp" + +// Usage: usrp_e_gpio <string> + +static int fp; + +static int read_reg(__u16 reg) +{ +	int ret; +	struct usrp_e_ctl16 d; + +	d.offset = reg; +	d.count = 1; +	ret = ioctl(fp, USRP_E_READ_CTL16, &d); +	return d.buf[0]; +} + +static void write_reg(__u16 reg, __u16 val) +{ +	int ret; +	struct usrp_e_ctl16 d; + +	d.offset = reg; +	d.count = 1; +	d.buf[0] = val; +	ret = ioctl(fp, USRP_E_WRITE_CTL16, &d); +} + +int main(int argc, char *argv[]) +{ +	int test; + +	test = 0; +	if (argc < 2) { +		printf("%s 0|1|off\n", argv[0]); +	} + +        fp = open("/dev/usrp_e0", O_RDWR); +        printf("fp = %d\n", fp); +	if (fp < 0) { +		perror("Open failed"); +		return -1; +	} + +	if (strcmp(argv[1], "0") == 0) { +		printf("Selected 0 based on %s\n", argv[1]); +		write_reg(UE_REG_GPIO_TX_DDR, 0xFFFF); +		write_reg(UE_REG_GPIO_RX_DDR, 0xFFFF); +		write_reg(UE_REG_GPIO_TX_SEL, 0x0); +		write_reg(UE_REG_GPIO_RX_SEL, 0x0); +		write_reg(UE_REG_GPIO_TX_DBG, 0xFFFF); +		write_reg(UE_REG_GPIO_RX_DBG, 0xFFFF); +	} else if (strcmp(argv[1], "1") == 0) { +		printf("Selected 1 based on %s\n", argv[1]); +		write_reg(UE_REG_GPIO_TX_DDR, 0xFFFF); +		write_reg(UE_REG_GPIO_RX_DDR, 0xFFFF); +		write_reg(UE_REG_GPIO_TX_SEL, 0xFFFF); +		write_reg(UE_REG_GPIO_RX_SEL, 0xFFFF); +		write_reg(UE_REG_GPIO_TX_DBG, 0xFFFF); +		write_reg(UE_REG_GPIO_RX_DBG, 0xFFFF); +	} else { +		printf("Selected off based on %s\n", argv[1]); +		write_reg(UE_REG_GPIO_TX_DDR, 0x0); +		write_reg(UE_REG_GPIO_RX_DDR, 0x0); +	} + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-i2c.c b/host/apps/omap_debug/usrp-e-i2c.c new file mode 100644 index 000000000..da8709ae1 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-i2c.c @@ -0,0 +1,87 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" + +// Usage: usrp_e_i2c w address data0 data1 data 2 .... +// Usage: usrp_e_i2c r address count + +int main(int argc, char *argv[]) +{ +	int fp, ret, i, tmp; +	struct usrp_e_i2c *i2c_msg; +	int direction, address, count; + +	if (argc < 3) { +		printf("Usage: usrp-e-i2c w address data0 data1 data2 ...\n"); +		printf("Usage: usrp-e-i2c r address count\n"); +		printf("All addresses and data in hex.\n"); +		exit(-1); +	} + +	if (strcmp(argv[1], "r") == 0) { +		direction = 0; +	} else if (strcmp(argv[1], "w") == 0) { +		direction = 1; +	} else { +		return -1; +	} + +	sscanf(argv[2], "%X", &address); +	printf("Address = %X\n", address); + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); +	if (fp < 0) { +		perror("Open failed"); +		return -1; +	} + +//	sleep(1); + +	if (direction) { +		count = argc - 3; +	} else { +		sscanf(argv[3], "%X", &count); +	} +	printf("Count = %X\n", count); + +	i2c_msg = malloc(sizeof(i2c_msg) + count * sizeof(char)); + +	i2c_msg->addr = address; +	i2c_msg->len = count; + +	for (i = 0; i < count; i++) { +		i2c_msg->data[i] = i; +	} + +	if (direction) { +		// Write + +		for (i=0; i<count; i++) { +			sscanf(argv[3+i], "%X", &tmp); +			i2c_msg->data[i] = tmp; +		} + +		ret = ioctl(fp, USRP_E_I2C_WRITE, i2c_msg); +		printf("Return value from i2c_write ioctl: %d\n", ret); +	} else { +		// Read + +		ret = ioctl(fp, USRP_E_I2C_READ, i2c_msg); +		printf("Return value from i2c_read ioctl: %d\n", ret); + +		printf("Ioctl: %d Data read :", ret); +		for (i=0; i<count; i++) { +			printf(" %X", i2c_msg->data[i]); +		} +		printf("\n"); +			 +	} +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-lb-test.c b/host/apps/omap_debug/usrp-e-lb-test.c new file mode 100644 index 000000000..68848064e --- /dev/null +++ b/host/apps/omap_debug/usrp-e-lb-test.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> +#include <pthread.h> +#include <stdlib.h> +#include <unistd.h> +#include <stddef.h> +#include "usrp_e.h" + +// max length #define PKT_DATA_LENGTH 1016 + +int main(int argc, char *argv[]) +{ +	struct usrp_transfer_frame *tx_data, *rx_data; +	int i, fp, packet_data_length, cnt; +	struct usrp_e_ctl16 d; + +	if (argc < 2) { +		printf("%s data_size (in bytes < 2040)\n", argv[0]); +		return -1; +	} + +	packet_data_length = atoi(argv[1]); + +	fp = open("/dev/usrp_e0", O_RDWR); + +	d.offset = 14; +	d.count = 1; +	d.buf[0] = (1 << 13); +	ioctl(fp, USRP_E_WRITE_CTL16, &d); + +	tx_data = malloc(2048); +	rx_data = malloc(2048); + +	tx_data->status = 0; +	tx_data->len = sizeof(struct usrp_transfer_frame) + packet_data_length; + +	while (1) { + +		for (i = 0; i < packet_data_length; i++) { +			tx_data->buf[i] = random() >> 24; + +		} + +		cnt = write(fp, tx_data, 2048); +		cnt = read(fp, rx_data, 2048); + +		if (tx_data->len != rx_data->len) +			printf("Bad frame length sent %d, read %d\n", tx_data->len, rx_data->len); + +		for (i = 0; i < packet_data_length; i++) { +			if (tx_data->buf[i] != rx_data->buf[i]) +				printf("Bad data at %d, sent %d, received %d\n", i, tx_data->buf[i], rx_data->buf[i]); +		} +		printf("---------------------------------------------------\n"); +		sleep(1); +	} +} diff --git a/host/apps/omap_debug/usrp-e-led.c b/host/apps/omap_debug/usrp-e-led.c new file mode 100644 index 000000000..d1b6c8996 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-led.c @@ -0,0 +1,35 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> +#include <unistd.h> + +#include "usrp_e.h" +#include "usrp_e_regs.hpp" + +// Usage: usrp_e_uart <string> + + +int main(int argc, char *argv[]) +{ +	int fp, i, ret; +	struct usrp_e_ctl16 d; + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	d.offset = UE_REG_MISC_BASE; +	d.count = 1; + +	while (1) { +		for (i=0; i<8; i++) { +			d.buf[0] = i; +			ret = ioctl(fp, USRP_E_WRITE_CTL16, &d); +			sleep(1); +		} +	} + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-ram.c b/host/apps/omap_debug/usrp-e-ram.c new file mode 100644 index 000000000..d548f7ccd --- /dev/null +++ b/host/apps/omap_debug/usrp-e-ram.c @@ -0,0 +1,25 @@ +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> + +int main(int rgc, char *argv[]) +{ +	int fp, i, cnt; +	unsigned short buf[1024]; +	unsigned short buf_rb[1024]; + +	fp = open("/dev/usrp1_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	for (i=0; i<1024; i++) +		buf[i] = i*256;  +	write(fp, buf, 2048); +	read(fp, buf_rb, 2048); + +	printf("Read back %hX %hX\n", buf_rb[0], buf_rb[1]); + +	for (i=0; i<1024; i++) { +		if (buf[i] != buf_rb[i]) +			printf("Read - %hX, expected - %hX\n", buf_rb[i], buf[i]); +	} +} diff --git a/host/apps/omap_debug/usrp-e-read.c b/host/apps/omap_debug/usrp-e-read.c new file mode 100644 index 000000000..c28f018d5 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-read.c @@ -0,0 +1,18 @@ +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> + +int main(int rgc, char *argv[]) +{ +	int fp, cnt; +	short buf[1024]; + +	fp = open("/dev/usrp1_e0", O_RDONLY); +	printf("fp = %d\n", fp); + +	do { +	cnt = read(fp, buf, 2048); +//	printf("Bytes read - %d\n", cnt); +	} while(1); +	printf("Data - %hX\n", buf[0]); +} diff --git a/host/apps/omap_debug/usrp-e-spi.c b/host/apps/omap_debug/usrp-e-spi.c new file mode 100644 index 000000000..c353c409b --- /dev/null +++ b/host/apps/omap_debug/usrp-e-spi.c @@ -0,0 +1,54 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" + +// Usage: usrp_e_spi w|rb slave data + +int main(int argc, char *argv[]) +{ +	int fp, slave, length, ret; +	unsigned int data; +	struct usrp_e_spi spi_dat; + +	if (argc < 5) { +		printf("Usage: usrp_e_spi w|rb slave transfer_length data\n"); +		exit(-1); +	} + +	slave = atoi(argv[2]); +	length = atoi(argv[3]); +	data = atoll(argv[4]); + +	printf("Data = %X\n", data); + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); +	if (fp < 0) { +		perror("Open failed"); +		return -1; +	} + +//	sleep(1); + + +	spi_dat.slave = slave; +	spi_dat.data = data; +	spi_dat.length = length; +	spi_dat.flags = UE_SPI_PUSH_FALL | UE_SPI_LATCH_RISE; + +	if (*argv[1] == 'r') { +		spi_dat.readback = 1; +		ret = ioctl(fp, USRP_E_SPI, &spi_dat); +		printf("Ioctl returns: %d, Data returned = %d\n", ret, spi_dat.data); +	} else { +		spi_dat.readback = 0; +		ioctl(fp, USRP_E_SPI, &spi_dat); +	} + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-uart-rx.c b/host/apps/omap_debug/usrp-e-uart-rx.c new file mode 100644 index 000000000..24b417980 --- /dev/null +++ b/host/apps/omap_debug/usrp-e-uart-rx.c @@ -0,0 +1,53 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" +#include "usrp_e_regs.hpp" + +// Usage: usrp_e_uart <string> + + +int main(int argc, char *argv[]) +{ +	int fp, ret; +	struct usrp_e_ctl16 d; +	__u16 clkdiv; + +	if (argc == 0) { +		printf("Usage: usrp-e-uart-rx <opt clkdiv>\n"); +		printf("clkdiv = 278 is 230.4k \n"); +		printf("clkdiv = 556 is 115.2k \n"); +		exit(-1); +	} + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	if (argc == 2) { +		clkdiv = atoi(argv[1]); +		d.offset = UE_REG_UART_CLKDIV; +		d.count = 1; +		d.buf[0] = clkdiv; +		ret = ioctl(fp, USRP_E_WRITE_CTL16, &d); +	} + +	while(1) { +		d.offset = UE_REG_UART_RXLEVEL; +		d.count = 1; +		ret = ioctl(fp, USRP_E_READ_CTL16, &d); + +		if (d.buf[0] > 0) { +			d.offset = UE_REG_UART_RXCHAR; +			d.count = 1; +			ret = ioctl(fp, USRP_E_READ_CTL16, &d); +			printf("%c", d.buf[0]); +			fflush(stdout); +		} +	} + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-uart.c b/host/apps/omap_debug/usrp-e-uart.c new file mode 100644 index 000000000..2956c407f --- /dev/null +++ b/host/apps/omap_debug/usrp-e-uart.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ioctl.h> + +#include "usrp_e.h" +#include "usrp_e_regs.hpp" + +// Usage: usrp_e_uart <string> + + +int main(int argc, char *argv[]) +{ +	int fp, i, ret; +	struct usrp_e_ctl16 d; +	char *str = argv[1]; +	__u16 clkdiv; + +	if (argc < 2) { +		printf("Usage: usrp_e_uart <string> <opt clkdiv>\n"); +		printf("clkdiv = 278 is 230.4k \n"); +		printf("clkdiv = 556 is 115.2k \n"); +		exit(-1); +	} + +	fp = open("/dev/usrp_e0", O_RDWR); +	printf("fp = %d\n", fp); + +	if (argc == 3) { +		clkdiv = atoi(argv[2]); +		d.offset = UE_REG_UART_CLKDIV; +		d.count = 1; +		d.buf[0] = clkdiv; +		ret = ioctl(fp, USRP_E_WRITE_CTL16, &d); +	} + +	for (i=0; i<strlen(str); i++) { +		d.offset = UE_REG_UART_TXCHAR; +		d.count = 1; +		d.buf[0] = str[i]; +		ret = ioctl(fp, USRP_E_WRITE_CTL16, &d); +		printf("Wrote %X, to %X, ret = %d\n", d.buf[0], d.offset, ret); +	} + +	return 0; +} diff --git a/host/apps/omap_debug/usrp-e-write.c b/host/apps/omap_debug/usrp-e-write.c new file mode 100644 index 000000000..903c0071f --- /dev/null +++ b/host/apps/omap_debug/usrp-e-write.c @@ -0,0 +1,21 @@ +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> + +int main(int rgc, char *argv[]) +{ +	int fp, i, cnt; +	short buf[1024]; + +	fp = open("/dev/usrp1_e0", O_WRONLY); +	printf("fp = %d\n", fp); + +	for (i=0; i<1024; i++) { +		buf[i] = i; +	} + +//	do { +		cnt = write(fp, buf, 2048); +		printf("Bytes written - %d\n", cnt); +//	} while (1); +} diff --git a/host/apps/omap_debug/usrp_e.h b/host/apps/omap_debug/usrp_e.h new file mode 100644 index 000000000..2c4aa2ac1 --- /dev/null +++ b/host/apps/omap_debug/usrp_e.h @@ -0,0 +1,60 @@ + +/* + *  Copyright (C) 2010 Ettus Research, LLC + * + *  Written by Philip Balister <philip@opensdr.com> + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + */ + +#ifndef __USRP_E_H +#define __USRP_E_H + +#include <linux/types.h> +#include <linux/ioctl.h> + +struct usrp_e_ctl16 { +	__u32 offset; +	__u32 count; +	__u16 buf[20]; +}; + +struct usrp_e_ctl32 { +	__u32 offset; +	__u32 count; +	__u32 buf[10]; +}; + +#define USRP_E_IOC_MAGIC	'u' +#define USRP_E_WRITE_CTL16	_IOW(USRP_E_IOC_MAGIC, 0x20, struct usrp_e_ctl16) +#define USRP_E_READ_CTL16	_IOWR(USRP_E_IOC_MAGIC, 0x21, struct usrp_e_ctl16) +#define USRP_E_WRITE_CTL32	_IOW(USRP_E_IOC_MAGIC, 0x22, struct usrp_e_ctl32) +#define USRP_E_READ_CTL32	_IOWR(USRP_E_IOC_MAGIC, 0x23, struct usrp_e_ctl32) +#define USRP_E_GET_RB_INFO      _IOR(USRP_E_IOC_MAGIC, 0x27, struct usrp_e_ring_buffer_size_t) +#define USRP_E_GET_COMPAT_NUMBER _IO(USRP_E_IOC_MAGIC, 0x28) + +#define USRP_E_COMPAT_NUMBER 2 + +/* Flag defines */ +#define RB_USER (1<<0) +#define RB_KERNEL (1<<1) +#define RB_OVERRUN (1<<2) +#define RB_DMA_ACTIVE (1<<3) +#define RB_USER_PROCESS (1<<4) + +struct ring_buffer_info { +	int flags; +	int len; +}; + +struct usrp_e_ring_buffer_size_t { +	int num_pages_rx_flags; +	int num_rx_frames; +	int num_pages_tx_flags; +	int num_tx_frames; +}; + +#endif | 
