diff --git a/Examples/ADC/QT_src/ADC b/Examples/ADC/QT_src/ADC new file mode 100755 index 0000000..e7bd47e Binary files /dev/null and b/Examples/ADC/QT_src/ADC differ diff --git a/Examples/ADC/QT_src/ADC1.pro b/Examples/ADC/QT_src/ADC1.pro new file mode 100644 index 0000000..e261ef4 --- /dev/null +++ b/Examples/ADC/QT_src/ADC1.pro @@ -0,0 +1,23 @@ +# ##################################################################### +# Automatically generated by qmake (2.01a) Sat Apr 3 14:28:42 2010 +# ##################################################################### +TEMPLATE = app +TARGET = ADC +DEPENDPATH += . +INCLUDEPATH += . + +# Input +HEADERS += mainwindow.h \ + jz47xx_mmap.h \ + signaldisplay.h \ + ADCw.h \ + jz_adc_peripheral.h \ + jz47xx_gpio.h +FORMS += mainwindow.ui +SOURCES += main.cpp \ + mainwindow.cpp \ + signaldisplay.cpp \ + ADCw.cpp \ + jz_adc_peripheral.cpp \ + jz47xx_gpio.cpp \ + jz47xx_mmap.cpp diff --git a/Examples/ADC/QT_src/ADC1.pro.user b/Examples/ADC/QT_src/ADC1.pro.user new file mode 100644 index 0000000..6725c31 --- /dev/null +++ b/Examples/ADC/QT_src/ADC1.pro.user @@ -0,0 +1,205 @@ + + + + RunConfiguration0-Arguments + + + + RunConfiguration0-Executable + + + + RunConfiguration0-RunConfiguration.name + Custom Executable + + + RunConfiguration0-UseTerminal + false + + + RunConfiguration0-UserEnvironmentChanges + + + + RunConfiguration0-UserName + + + + RunConfiguration0-UserSetName + false + + + RunConfiguration0-WorkingDirectory + $BUILDDIR + + + RunConfiguration0-type + ProjectExplorer.CustomExecutableRunConfiguration + + + activeRunConfiguration + 0 + + + activebuildconfiguration + Debug + + + buildConfiguration-Debug + + Debug + 2 + + + + + buildconfiguration-Debug-buildstep0 + + Debug + + DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-cTqMrTHqN2,guid=cb05698ea245dbdf49f1995a4bb51c63 + DESKTOP_SESSION=gnome + DESKTOP_STARTUP_ID= + DISPLAY=:0.0 + GDMSESSION=gnome + GDM_KEYBOARD_LAYOUT=es + GDM_LANG=en_US.UTF-8 + GNOME_DESKTOP_SESSION_ID=this-is-deprecated + GNOME_KEYRING_PID=2296 + GNOME_KEYRING_SOCKET=/tmp/keyring-Z9jTYs/socket + GTK_MODULES=canberra-gtk-module + GTK_RC_FILES=/etc/gtk/gtkrc:/home/juan64bits/.gtkrc-1.2-gnome2 + HOME=/home/juan64bits + LANG=en_US.UTF-8 + LANGUAGE= + LD_LIBRARY_PATH=/usr/lib/qtcreator: + LOGNAME=juan64bits + ORBIT_SOCKETDIR=/tmp/orbit-juan64bits + PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games + PWD=/home/juan64bits + QTDIR=/usr + SESSION_MANAGER=local/Maximus:@/tmp/.ICE-unix/2311,unix/Maximus:/tmp/.ICE-unix/2311 + SHELL=/bin/bash + SHLVL=0 + SPEECHD_PORT=7560 + SSH_AGENT_PID=2357 + SSH_AUTH_SOCK=/tmp/keyring-Z9jTYs/socket.ssh + USER=juan64bits + USERNAME=juan64bits + XAUTHORITY=/var/run/gdm/auth-for-juan64bits-TMPZko/database + XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/ + XDG_SESSION_COOKIE=195688a1fd83f711af67c5214b6a489d-1270160483.283912-172210674 + + + /home/juan64bits/QT/ADC1/ADC1.pro + -spec + /usr/share/qt4/mkspecs/linux-g++ + -r + CONFIG+=debug + + /usr/bin/qmake-qt4 + false + /home/juan64bits/QT/ADC1 + 2 + + + + buildconfiguration-Debug-buildstep1 + + Debug + + DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-cTqMrTHqN2,guid=cb05698ea245dbdf49f1995a4bb51c63 + DESKTOP_SESSION=gnome + DESKTOP_STARTUP_ID= + DISPLAY=:0.0 + GDMSESSION=gnome + GDM_KEYBOARD_LAYOUT=es + GDM_LANG=en_US.UTF-8 + GNOME_DESKTOP_SESSION_ID=this-is-deprecated + GNOME_KEYRING_PID=2296 + GNOME_KEYRING_SOCKET=/tmp/keyring-Z9jTYs/socket + GTK_MODULES=canberra-gtk-module + GTK_RC_FILES=/etc/gtk/gtkrc:/home/juan64bits/.gtkrc-1.2-gnome2 + HOME=/home/juan64bits + LANG=en_US.UTF-8 + LANGUAGE= + LD_LIBRARY_PATH=/usr/lib/qtcreator: + LOGNAME=juan64bits + ORBIT_SOCKETDIR=/tmp/orbit-juan64bits + PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games + PWD=/home/juan64bits + QTDIR=/usr + SESSION_MANAGER=local/Maximus:@/tmp/.ICE-unix/2311,unix/Maximus:/tmp/.ICE-unix/2311 + SHELL=/bin/bash + SHLVL=0 + SPEECHD_PORT=7560 + SSH_AGENT_PID=2357 + SSH_AUTH_SOCK=/tmp/keyring-Z9jTYs/socket.ssh + USER=juan64bits + USERNAME=juan64bits + XAUTHORITY=/var/run/gdm/auth-for-juan64bits-TMPZko/database + XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/ + XDG_SESSION_COOKIE=195688a1fd83f711af67c5214b6a489d-1270160483.283912-172210674 + + + -w + + /usr/bin/make + true + /home/juan64bits/QT/ADC1 + + + + buildconfiguration-Debug-cleanstep0 + + Debug + + + + buildconfigurations + + Debug + + + + buildstep0 + + + + + + + buildstep1 + + + + + + buildsteps + + trolltech.qt4projectmanager.qmake + trolltech.qt4projectmanager.make + + + + cleanstep0 + + + true + + + + cleansteps + + trolltech.qt4projectmanager.make + + + + defaultFileEncoding + System + + + project + + + diff --git a/Examples/ADC/QT_src/ADCw.cpp b/Examples/ADC/QT_src/ADCw.cpp new file mode 100644 index 0000000..a1f0f26 --- /dev/null +++ b/Examples/ADC/QT_src/ADCw.cpp @@ -0,0 +1,74 @@ +#include "ADCw.h" + +ADCw::ADCw() +{ + ADCBuffer = jz_adc_init(); + /*************************Clean FPGA RAM memory****************************/ + for (int i = 0; i < 512; i++) //RAMB16_s9_s9 has 2048 bytes 8-bit + { + ADCBuffer[i] = 0x00000000; //Clean 4 register by cicle + } +} + +void ADCw::testADC() +{ + /****************Configure ADC register on FPGA RAM memory*****************/ + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_SPI_CLKDIV); + usleep (1000); + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_FAST_CONV); + usleep (1000); + printf("\nADC in Fast Convertion Mode (10us) and Fs=9.8KHz (Min)\n"); + + int LENB = 0xFE; // 254 read/cmd + + /******************************* TEST 1 ***********************************/ + printf("\nINIT TEST1: Autoselft {(Vref+) - (Vref-)}/2 -> Return 0x0200 \n"); + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_1); + usleep (1000); + jz_adc_config(ADCBuffer, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_1); + printf("[%08X]", ADCBuffer[0]);fflush (stdout); + while(jz_adc_check_buffer(ADCBuffer)){usleep (10);} + for(int i=1; i< LENB/2+1; i++) + printf("[%08X]", ADCBuffer[i]); + fflush (stdout); + + /******************************* TEST 2 ***********************************/ + printf("\n\nINIT TEST2: Autoselft (Vref-) -> Return 0x0000 \n"); + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_2); + usleep (1000); + jz_adc_config(ADCBuffer, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_2); + printf("[%08X]", ADCBuffer[0]);fflush (stdout); + while(jz_adc_check_buffer(ADCBuffer)){usleep (10);} + for(int i=1; i< LENB/2+1; i++) + printf("[%08X]", ADCBuffer[i]); + fflush (stdout); + + /******************************* TEST 3 ***********************************/ + printf("\n\nINIT TEST3: Autoselft (Vref+) -> Return 0x03FF \n"); + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_3); + usleep (1000); + jz_adc_config(ADCBuffer, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_3); + printf("[%08X]", ADCBuffer[0]);fflush (stdout); + while(jz_adc_check_buffer(ADCBuffer)){usleep (10);} + for(int i=1; i< LENB/2+1; i++) + printf("[%08X]", ADCBuffer[i]); + fflush (stdout); + + printf("\n\nTESTS complete\n"); +} + +void ADCw::powerDownADC() +{ + jz_adc_config(ADCBuffer, 0x01, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_POWER_DOWN); + printf("\nADC in Power Down Mode \n"); +} + +JZ_REG* ADCw::takeSamplesADC(int LENB, uchar CLKDIV, int CHANNEL) +{ + jz_adc_config(ADCBuffer, 0x01, CLKDIV, ADC_CMD_SET_CHANNEL0+CHANNEL); + usleep (1000); + jz_adc_config(ADCBuffer, LENB, CLKDIV, ADC_CMD_READ_CHANNEL0+CHANNEL); + //while(jz_adc_check_buffer(ADCBuffer)){usleep (400000);printf("[%08X]", ADCBuffer[0]);fflush (stdout);} + while(jz_adc_check_buffer(ADCBuffer)){usleep (10);} + return ADCBuffer; +} diff --git a/Examples/ADC/QT_src/ADCw.h b/Examples/ADC/QT_src/ADCw.h new file mode 100644 index 0000000..845e45e --- /dev/null +++ b/Examples/ADC/QT_src/ADCw.h @@ -0,0 +1,21 @@ +#ifndef ADCW_H +#define ADCW_H + +#include "jz_adc_peripheral.h" +#include +#include + +class ADCw +{ +public: + ADCw(); + ~ADCw(){}; + + void testADC(); + void powerDownADC(); + JZ_REG * takeSamplesADC(int LENB, uchar CLKDIV, int CHANNEL); +private: + JZ_REG * ADCBuffer; +}; + +#endif // ADCW_H diff --git a/Examples/ADC/QT_src/Makefile b/Examples/ADC/QT_src/Makefile new file mode 100644 index 0000000..24936e3 --- /dev/null +++ b/Examples/ADC/QT_src/Makefile @@ -0,0 +1,265 @@ +############################################################################# +# Makefile for building: ADC +# Generated by qmake (2.01a) (Qt 4.6.2) on: Mon Apr 5 13:58:40 2010 +# Project: ADC1.pro +# Template: app +# Command: /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/qmake -spec ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++ -unix -o Makefile ADC1.pro +############################################################################# + +####### Compiler, tools and options + +CC = mipsel-openwrt-linux-uclibc-gcc +CXX = mipsel-openwrt-linux-uclibc-g++ +DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -Os -pipe -mips32 -mtune=mips32 -funit-at-a-time -fhonour-copts -msoft-float -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/include/freetype2 -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/include -O2 -Wall -W -D_REENTRANT $(DEFINES) +CXXFLAGS = -Os -pipe -mips32 -mtune=mips32 -funit-at-a-time -fhonour-copts -msoft-float -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/include/freetype2 -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/include -I/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/include -O2 -Wall -W -D_REENTRANT $(DEFINES) +INCPATH = -I../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++ -I. -I../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/include/QtCore -I../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/include/QtNetwork -I../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/include/QtGui -I../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/include -I. -I. -I. +LINK = mipsel-openwrt-linux-uclibc-g++ +LFLAGS = -L/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib -L/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/lib -L/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/lib -L/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/lib -L/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/lib -Wl,-rpath-link=/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr/lib -Wl,-O1 +LIBS = $(SUBLIBS) -L/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib -lQtGui -L/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib -L/home/juan64bits/ebd/ECB/openwrt-xburst/staging_dir/target-mipsel_uClibc-0.9.30.1/usr//lib -ldirectfb -lfusion -ldirect -lQtNetwork -lQtCore -lpthread +AR = mipsel-openwrt-linux-uclibc-ar cqs +RANLIB = mipsel-openwrt-linux-uclibc-ranlib +QMAKE = /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -r +STRIP = : +INSTALL_FILE = install -m 644 -p +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = install -m 755 -p +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + signaldisplay.cpp \ + ADCw.cpp \ + jz_adc_peripheral.cpp \ + jz47xx_gpio.cpp \ + jz47xx_mmap.cpp moc_mainwindow.cpp +OBJECTS = main.o \ + mainwindow.o \ + signaldisplay.o \ + ADCw.o \ + jz_adc_peripheral.o \ + jz47xx_gpio.o \ + jz47xx_mmap.o \ + moc_mainwindow.o +DIST = ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/g++.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/unix.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/linux.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/qws.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_functions.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_config.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/exclusive_builds.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_pre.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/release.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_post.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/warn_on.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/unix/thread.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/moc.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/resources.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/uic.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/yacc.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/lex.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/include_source_dir.prf \ + ADC1.pro +QMAKE_TARGET = ADC +DESTDIR = +TARGET = ADC + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile $(TARGET) + +$(TARGET): ui_mainwindow.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: ADC1.pro ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++/qmake.conf ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/g++.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/unix.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/linux.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/qws.conf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_functions.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_config.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/exclusive_builds.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_pre.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/release.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_post.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/warn_on.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/unix/thread.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/moc.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/resources.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/uic.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/yacc.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/lex.prf \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/include_source_dir.prf \ + /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtGui.prl \ + /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtNetwork.prl \ + /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtCore.prl + $(QMAKE) -spec ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++ -unix -o Makefile ADC1.pro +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/g++.conf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/unix.conf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/linux.conf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/common/qws.conf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_functions.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt_config.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/exclusive_builds.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_pre.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/release.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/default_post.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/warn_on.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/qt.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/unix/thread.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/moc.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/resources.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/uic.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/yacc.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/lex.prf: +../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/features/include_source_dir.prf: +/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtGui.prl: +/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtNetwork.prl: +/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/lib/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -spec ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++ -unix -o Makefile ADC1.pro + +dist: + @$(CHK_DIR_EXISTS) .tmp/ADC1.0.0 || $(MKDIR) .tmp/ADC1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/ADC1.0.0/ && $(COPY_FILE) --parents mainwindow.h jz47xx_mmap.h signaldisplay.h ADCw.h jz_adc_peripheral.h jz47xx_gpio.h .tmp/ADC1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp signaldisplay.cpp ADCw.cpp jz_adc_peripheral.cpp jz47xx_gpio.cpp jz47xx_mmap.cpp .tmp/ADC1.0.0/ && $(COPY_FILE) --parents mainwindow.ui .tmp/ADC1.0.0/ && (cd `dirname .tmp/ADC1.0.0` && $(TAR) ADC1.0.0.tar ADC1.0.0 && $(COMPRESS) ADC1.0.0.tar) && $(MOVE) `dirname .tmp/ADC1.0.0`/ADC1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/ADC1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile + + +/home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/moc: + (cd $(QTDIR)/src/tools/moc && $(MAKE)) + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_moc_header_make_all: moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp +moc_mainwindow.cpp: ADCw.h \ + jz_adc_peripheral.h \ + jz47xx_mmap.h \ + jz47xx_gpio.h \ + mainwindow.h \ + ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/moc + /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_mainwindow.h +compiler_uic_clean: + -$(DEL_FILE) ui_mainwindow.h +ui_mainwindow.h: mainwindow.ui \ + signaldisplay.h + /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/uic mainwindow.ui -o ui_mainwindow.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean compiler_uic_clean + +####### Compile + +main.o: main.cpp mainwindow.h \ + ADCw.h \ + jz_adc_peripheral.h \ + jz47xx_mmap.h \ + jz47xx_gpio.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + ADCw.h \ + jz_adc_peripheral.h \ + jz47xx_mmap.h \ + jz47xx_gpio.h \ + ui_mainwindow.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +signaldisplay.o: signaldisplay.cpp signaldisplay.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o signaldisplay.o signaldisplay.cpp + +ADCw.o: ADCw.cpp ADCw.h \ + jz_adc_peripheral.h \ + jz47xx_mmap.h \ + jz47xx_gpio.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ADCw.o ADCw.cpp + +jz_adc_peripheral.o: jz_adc_peripheral.cpp jz_adc_peripheral.h \ + jz47xx_mmap.h \ + jz47xx_gpio.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o jz_adc_peripheral.o jz_adc_peripheral.cpp + +jz47xx_gpio.o: jz47xx_gpio.cpp jz47xx_gpio.h \ + jz47xx_mmap.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o jz47xx_gpio.o jz47xx_gpio.cpp + +jz47xx_mmap.o: jz47xx_mmap.cpp jz47xx_mmap.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o jz47xx_mmap.o jz47xx_mmap.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/Examples/ADC/QT_src/jz47xx_gpio.c b/Examples/ADC/QT_src/jz47xx_gpio.c new file mode 100644 index 0000000..affa85e --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_gpio.c @@ -0,0 +1,108 @@ +/* + JZ47xx GPIO at userspace + + Copyright (C) 2010 Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include +#include + +#include +#include + + +#define JZ_GPIO_BASE 0x10010000 + +void +jz_gpio_as_output (JZ_PIO * pio, unsigned int o) +{ + pio->PXFUNC = (1 << (o)); + pio->PXSELC = (1 << (o)); + pio->PXDIRS = (1 << (o)); +} + +void +jz_gpio_as_input (JZ_PIO * pio, unsigned int o) +{ + pio->PXFUNC = (1 << (o)); + pio->PXSELC = (1 << (o)); + pio->PXDIRC = (1 << (o)); +} + +void +jz_gpio_set_pin (JZ_PIO * pio, unsigned int o) +{ + pio->PXDATS = (1 << (o)); +} + +void +jz_gpio_clear_pin (JZ_PIO * pio, unsigned int o) +{ + pio->PXDATC = (1 << (o)); +} + +void +jz_gpio_out (JZ_PIO * pio, unsigned int o, unsigned int val) +{ + if (val == 0) + pio->PXDATC = (1 << (o)); + else + pio->PXDATS = (1 << (o)); +} + +unsigned int +jz_gpio_get_pin (JZ_PIO * pio, unsigned int o) +{ + return (pio->PXPIN & (1 << o)) ? 1 : 0; +} + +int +jz_gpio_as_func (JZ_PIO * pio, unsigned int o, int func) +{ + switch (func) + { + case 0: + pio->PXFUNS = (1 << o); + pio->PXTRGC = (1 << o); + pio->PXSELC = (1 << o); + return 1; + + case 1: + pio->PXFUNS = (1 << o); + pio->PXTRGC = (1 << o); + pio->PXSELS = (1 << o); + return 1; + + case 2: + pio->PXFUNS = (1 << o); + pio->PXTRGS = (1 << o); + pio->PXSELC = (1 << o); + return 1; + } + return 0; +} + +JZ_PIO * +jz_gpio_map (int port) +{ + JZ_PIO *pio; + + pio = (JZ_PIO *) jz_mmap (JZ_GPIO_BASE); + pio = (JZ_PIO *) ((unsigned int) pio + port * 0x100); + + return pio; +} diff --git a/Examples/ADC/QT_src/jz47xx_gpio.cpp b/Examples/ADC/QT_src/jz47xx_gpio.cpp new file mode 100644 index 0000000..affa85e --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_gpio.cpp @@ -0,0 +1,108 @@ +/* + JZ47xx GPIO at userspace + + Copyright (C) 2010 Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include +#include + +#include +#include + + +#define JZ_GPIO_BASE 0x10010000 + +void +jz_gpio_as_output (JZ_PIO * pio, unsigned int o) +{ + pio->PXFUNC = (1 << (o)); + pio->PXSELC = (1 << (o)); + pio->PXDIRS = (1 << (o)); +} + +void +jz_gpio_as_input (JZ_PIO * pio, unsigned int o) +{ + pio->PXFUNC = (1 << (o)); + pio->PXSELC = (1 << (o)); + pio->PXDIRC = (1 << (o)); +} + +void +jz_gpio_set_pin (JZ_PIO * pio, unsigned int o) +{ + pio->PXDATS = (1 << (o)); +} + +void +jz_gpio_clear_pin (JZ_PIO * pio, unsigned int o) +{ + pio->PXDATC = (1 << (o)); +} + +void +jz_gpio_out (JZ_PIO * pio, unsigned int o, unsigned int val) +{ + if (val == 0) + pio->PXDATC = (1 << (o)); + else + pio->PXDATS = (1 << (o)); +} + +unsigned int +jz_gpio_get_pin (JZ_PIO * pio, unsigned int o) +{ + return (pio->PXPIN & (1 << o)) ? 1 : 0; +} + +int +jz_gpio_as_func (JZ_PIO * pio, unsigned int o, int func) +{ + switch (func) + { + case 0: + pio->PXFUNS = (1 << o); + pio->PXTRGC = (1 << o); + pio->PXSELC = (1 << o); + return 1; + + case 1: + pio->PXFUNS = (1 << o); + pio->PXTRGC = (1 << o); + pio->PXSELS = (1 << o); + return 1; + + case 2: + pio->PXFUNS = (1 << o); + pio->PXTRGS = (1 << o); + pio->PXSELC = (1 << o); + return 1; + } + return 0; +} + +JZ_PIO * +jz_gpio_map (int port) +{ + JZ_PIO *pio; + + pio = (JZ_PIO *) jz_mmap (JZ_GPIO_BASE); + pio = (JZ_PIO *) ((unsigned int) pio + port * 0x100); + + return pio; +} diff --git a/Examples/ADC/QT_src/jz47xx_gpio.h b/Examples/ADC/QT_src/jz47xx_gpio.h new file mode 100644 index 0000000..d8b0113 --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_gpio.h @@ -0,0 +1,84 @@ +/* + JZ47xx GPIO at userspace + + Copyright (C) 2010 Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef __jz47xx_gpio_h__ +#define __jz47xx_gpio_h__ + +#define JZ_GPIO_PORT_A 0 +#define JZ_GPIO_PORT_B 1 +#define JZ_GPIO_PORT_C 2 +#define JZ_GPIO_PORT_D 3 + +typedef volatile unsigned int JZ_REG; /* Hardware register definition */ + +typedef struct _JZ_PIO +{ + JZ_REG PXPIN; /* PIN Level Register */ + JZ_REG Reserved0; + JZ_REG Reserved1; + JZ_REG Reserved2; + JZ_REG PXDAT; /* Port Data Register */ + JZ_REG PXDATS; /* Port Data Set Register */ + JZ_REG PXDATC; /* Port Data Clear Register */ + JZ_REG Reserved3; + JZ_REG PXIM; /* Interrupt Mask Register */ + JZ_REG PXIMS; /* Interrupt Mask Set Reg */ + JZ_REG PXIMC; /* Interrupt Mask Clear Reg */ + JZ_REG Reserved4; + JZ_REG PXPE; /* Pull Enable Register */ + JZ_REG PXPES; /* Pull Enable Set Reg. */ + JZ_REG PXPEC; /* Pull Enable Clear Reg. */ + JZ_REG Reserved5; + JZ_REG PXFUN; /* Function Register */ + JZ_REG PXFUNS; /* Function Set Register */ + JZ_REG PXFUNC; /* Function Clear Register */ + JZ_REG Reserved6; + JZ_REG PXSEL; /* Select Register */ + JZ_REG PXSELS; /* Select Set Register */ + JZ_REG PXSELC; /* Select Clear Register */ + JZ_REG Reserved7; + JZ_REG PXDIR; /* Direction Register */ + JZ_REG PXDIRS; /* Direction Set Register */ + JZ_REG PXDIRC; /* Direction Clear Register */ + JZ_REG Reserved8; + JZ_REG PXTRG; /* Trigger Register */ + JZ_REG PXTRGS; /* Trigger Set Register */ + JZ_REG PXTRGC; /* Trigger Set Register */ + JZ_REG Reserved9; + JZ_REG PXFLG; /* Port Flag Register */ + JZ_REG PXFLGC; /* Port Flag clear Register */ +} JZ_PIO, *PJZ_PIO; + +void jz_gpio_as_output (JZ_PIO * pio, unsigned int o); + +void jz_gpio_as_input (JZ_PIO * pio, unsigned int o); + +void jz_gpio_set_pin (JZ_PIO * pio, unsigned int o); + +void jz_gpio_clear_pin (JZ_PIO * pio, unsigned int o); + +void jz_gpio_out (JZ_PIO * pio, unsigned int o, unsigned int val); + +unsigned int jz_gpio_get_pin (JZ_PIO * pio, unsigned int o); + +int jz_gpio_as_func (JZ_PIO * pio, unsigned int o, int func); + +JZ_PIO *jz_gpio_map (int port); + +#endif diff --git a/Examples/ADC/QT_src/jz47xx_mmap.c b/Examples/ADC/QT_src/jz47xx_mmap.c new file mode 100644 index 0000000..e8cf317 --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_mmap.c @@ -0,0 +1,39 @@ +/* + * JZ47xx GPIO lines + * + * Written 2010 by Andres Calderon andres.calderon@emqbit.com + */ + +#include +#include +#include +#include +#include +#include + +#include + + +void * +jz_mmap (off_t address) +{ + int fd; + + void *pio; + + if ((fd = open ("/dev/mem", O_RDWR | O_SYNC)) == -1) + { + fprintf (stderr, "Cannot open /dev/mem.\n"); + return 0; + } + + pio = (void *) mmap (0, getpagesize (), PROT_READ | PROT_WRITE, MAP_SHARED, fd, address); + + if (pio == (void *) -1) + { + fprintf (stderr, "Cannot mmap.\n"); + return 0; + } + + return pio; +} diff --git a/Examples/ADC/QT_src/jz47xx_mmap.cpp b/Examples/ADC/QT_src/jz47xx_mmap.cpp new file mode 100644 index 0000000..52266bb --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_mmap.cpp @@ -0,0 +1,39 @@ +/* + * JZ47xx GPIO lines + * + * Written 2010 by Andres Calderon andres.calderon@emqbit.com + */ + +#include +#include +#include +#include +#include +#include + +#include + + +unsigned int * +jz_mmap (off_t address) +{ + int fd; + + unsigned int *pio; + + if ((fd = open ("/dev/mem", O_RDWR | O_SYNC)) == -1) + { + fprintf (stderr, "Cannot open /dev/mem.\n"); + return 0; + } + + pio = (unsigned int *) mmap (0, getpagesize (), PROT_READ | PROT_WRITE, MAP_SHARED, fd, address); + + if (pio == (unsigned int *) -1) + { + fprintf (stderr, "Cannot mmap.\n"); + return 0; + } + + return pio; +} diff --git a/Examples/ADC/QT_src/jz47xx_mmap.h b/Examples/ADC/QT_src/jz47xx_mmap.h new file mode 100644 index 0000000..7380eb6 --- /dev/null +++ b/Examples/ADC/QT_src/jz47xx_mmap.h @@ -0,0 +1,14 @@ +/* + * JZ47xx GPIO lines + * + * Written 2010 by Andres Calderon andres.calderon@emqbit.com + */ + +#ifndef __jz47xx_mmap_h__ +#define __jz47xx_mmap_h__ + +#include + +unsigned int * jz_mmap (off_t address); + +#endif diff --git a/Examples/ADC/QT_src/jz_adc_peripheral.c b/Examples/ADC/QT_src/jz_adc_peripheral.c new file mode 100644 index 0000000..e5f9cd1 --- /dev/null +++ b/Examples/ADC/QT_src/jz_adc_peripheral.c @@ -0,0 +1,36 @@ +/* ADC Peripheral.c + +Copyright (C) 2010 Carlos Camargo cicamargoba@unal.edu.co + Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include + +#include "jz_adc_peripheral.h" + +void +jz_adc_config(JZ_REG * addr, uchar BUFFER, uchar CLK_DIV, uchar CMD) +{ + addr[0] = (BUFFER << 16) + (CLK_DIV<<8) + CMD; +} + +int +jz_adc_check_buffer(JZ_REG * addr) +{ + return addr[0]&0x00FF0000; +} + diff --git a/Examples/ADC/QT_src/jz_adc_peripheral.cpp b/Examples/ADC/QT_src/jz_adc_peripheral.cpp new file mode 100644 index 0000000..3824f38 --- /dev/null +++ b/Examples/ADC/QT_src/jz_adc_peripheral.cpp @@ -0,0 +1,59 @@ +/* ADC Peripheral.c + +Copyright (C) 2010 Carlos Camargo cicamargoba@unal.edu.co + Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include + +#include "jz_adc_peripheral.h" + +JZ_REG * +jz_adc_init() +{ + JZ_PIO *pio; + JZ_REG *virt_addr; + + pio = jz_gpio_map (CS2_PORT); + jz_gpio_as_func (pio, CS2_PIN, 0); + + virt_addr = (JZ_REG *) (jz_mmap(0x13010000) + 0x18); + + if (*virt_addr != 0x0FFF7700) + { + *virt_addr = 0x0FFF7700; + printf ("ADC: Configuring CS2 8 bits and 0 WS: %08X\n", *virt_addr); + } + else + printf ("ADC: CS2, already configured: %08X\n", *virt_addr); + + virt_addr = (JZ_REG *) jz_mmap (0x14000000); + + return virt_addr; +} + +void +jz_adc_config(JZ_REG * addr, int BUFFER, uchar CLK_DIV, uchar CMD) +{ + addr[0] = (BUFFER << 16) + (CLK_DIV<<8) + CMD; +} + +int +jz_adc_check_buffer(JZ_REG * addr) +{ + return addr[0]&0x00FF0000; +} diff --git a/Examples/ADC/QT_src/jz_adc_peripheral.h b/Examples/ADC/QT_src/jz_adc_peripheral.h new file mode 100644 index 0000000..6100ad9 --- /dev/null +++ b/Examples/ADC/QT_src/jz_adc_peripheral.h @@ -0,0 +1,84 @@ +/* ADC Peripheral.h + +Copyright (C) 2010 Carlos Camargo cicamargoba@unal.edu.co + Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef __adc_peripheral_h__ +#define __adc_peripheral_h__ + +#include "jz47xx_mmap.h" +#include "jz47xx_gpio.h" + +#define ADC_CMD_NONE 0x00 /* Nothing to do */ +#define ADC_CMD_SET_SPI_CLKDIV 0x90 /* Set clock divider for ADC sclk */ + +#define ADC_CMD_SET_CHANNEL0 0x50 /* Set channel 0 */ +#define ADC_CMD_READ_CHANNEL0 0x60 /* Read channel 0 */ + +#define ADC_CMD_SET_CHANNEL1 0x51 /* Set channel 1 */ +#define ADC_CMD_READ_CHANNEL1 0x61 /* Read channel 1 */ + +#define ADC_CMD_SET_CHANNEL2 0x52 /* Set channel 2 */ +#define ADC_CMD_READ_CHANNEL2 0x62 /* Read channel 2 */ + +#define ADC_CMD_SET_CHANNEL3 0x53 /* Set channel 3 */ +#define ADC_CMD_READ_CHANNEL3 0x63 /* Read channel 3 */ + +#define ADC_CMD_SET_CHANNEL4 0x54 /* Set channel 4 */ +#define ADC_CMD_READ_CHANNEL4 0x64 /* Read channel 4 */ + +#define ADC_CMD_SET_CHANNEL5 0x55 /* Set channel 5 */ +#define ADC_CMD_READ_CHANNEL5 0x65 /* Read channel 5 */ + +#define ADC_CMD_SET_CHANNEL6 0x56 /* Set channel 6 */ +#define ADC_CMD_READ_CHANNEL6 0x66 /* Read channel 6 */ + +#define ADC_CMD_SET_CHANNEL7 0x57 /* Set channel 7 */ +#define ADC_CMD_READ_CHANNEL7 0x67 /* Read channel 8 */ + +#define ADC_CMD_SET_POWER_DOWN 0X58 /* Set ADC power down mode (1uA) */ + +#define ADC_CMD_SET_FAST_CONV 0X59 /* Initialize ADC Fast Convertion(<10us)*/ + +#define ADC_CMD_SET_LOW_CONV 0X5A /* Initialize ADC Fast Convertion(<40us)*/ + +#define ADC_CMD_SET_AUTOSELFT_1 0x5B /* Set Autoselft ADC {(Vref+)-(Vref-)}/2*/ +#define ADC_CMD_READ_AUTOSELFT_1 0x6B /* Read Autoselft ADC 1 (0x0200) */ + +#define ADC_CMD_SET_AUTOSELFT_2 0x5C /* Set Autoselft ADC (Vref-) */ +#define ADC_CMD_READ_AUTOSELFT_2 0x6C /* Read Autoselft ADC 2 (0x0000) */ + +#define ADC_CMD_SET_AUTOSELFT_3 0x5D /* Set Autoselft ADC (Vref+) */ +#define ADC_CMD_READ_AUTOSELFT_3 0x6D /* Read Autoselft ADC 3 (0x03FF) */ + +#define ADC_SPI_CLKDIV_MIN 0x14 /* 50/(2*20) -> 1.25MHz (MAX=2.8MHz) */ +#define ADC_SPI_CLKDIV_MAX 0xFF /* 50/(2*255) -> 98.04KHz */ + +#define ADC_MAX_BUFFER 0x3FE/* 1022 reads/commands */ + +#define CS2_PORT JZ_GPIO_PORT_B +#define CS2_PIN 26 + +typedef unsigned char uchar; + +JZ_REG *jz_adc_init(); + +void jz_adc_config(JZ_REG * addr, int BUFFER, uchar CLK_DIV, uchar CMD); + +int jz_adc_check_buffer(JZ_REG * addr); + +#endif diff --git a/Examples/ADC/QT_src/jz_test_adc.c b/Examples/ADC/QT_src/jz_test_adc.c new file mode 100644 index 0000000..eda939c --- /dev/null +++ b/Examples/ADC/QT_src/jz_test_adc.c @@ -0,0 +1,110 @@ +/* ADC TEST + +Copyright (C) 2010 Carlos Camargo cicamargoba@unal.edu.co + Andres Calderon andres.calderon@emqbit.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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include + +#include "jz47xx_gpio.h" +#include "jz47xx_mmap.h" +#include "jz_adc_peripheral.h" + +#define TEST_PORT JZ_GPIO_PORT_B +#define TEST_PIN 26 + +int +main () +{ + int i,j; + JZ_PIO *pio; + JZ_REG *virt_addr; + + pio = jz_gpio_map (TEST_PORT); + jz_gpio_as_func (pio, TEST_PIN, 0); + + virt_addr = (JZ_REG *) (jz_mmap (0x13010000) + 0x18); + + if (*virt_addr != 0x0FFF7700) + { + *virt_addr = 0x0FFF7700; + printf ("Configuring CS2 32 bits and 0 WS: %08X\n", *virt_addr); + } + else + printf ("CS2, already configured: %08X\n", *virt_addr); + + virt_addr = (JZ_REG *) jz_mmap (0x14000000); + + /*************************Clean FPGA RAM memory****************************/ + for (i = 0; i < 512; i++) //RAMB16_s9_s9 has 2048 bytes 8-bit + { + virt_addr[i] = 0x00000000; //Clean 4 register by cicle + } + + /****************Configure ADC register on FPGA RAM memory*****************/ + uchar LENB = 0x01; // 1 read/cmd + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_SPI_CLKDIV); + usleep (100); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_FAST_CONV); + usleep (100); + printf("\nADC in Fast Convertion Mode (10us) and Fs=9.8KHz (Min)\n"); + + LENB = ADC_MAX_BUFFER; // 254 read/cmd + + /******************************* TEST 1 ***********************************/ + printf("\nINIT TEST1: Autoselft {(Vref+) - (Vref-)}/2 -> Return 0x0200 \n"); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_1); + usleep (100); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_1); + printf("[%08X]", virt_addr[0]); + while(jz_adc_check_buffer(virt_addr)) + { + printf("[%08X]-", virt_addr[0]); + fflush (stdout); + usleep (10000); + } + for(i=1; i< LENB/2+1; i++) + printf("[%08X]", virt_addr[i]); + + /******************************* TEST 2 ***********************************/ + printf("\n\nINIT TEST2: Autoselft (Vref-) -> Return 0x0000 \n"); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_2); + usleep (100); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_2); + while(jz_adc_check_buffer(virt_addr)){usleep (100);} + for(i=1; i< LENB/2+1; i++) + printf("[%08X]", virt_addr[i]); + + /******************************* TEST 3 ***********************************/ + printf("\n\nINIT TEST3: Autoselft (Vref+) -> Return 0x03FF \n"); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_AUTOSELFT_3); + usleep (100); + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_READ_AUTOSELFT_3); + while(jz_adc_check_buffer(virt_addr)){usleep (100);} + for(i=1; i< LENB/2+1; i++) + printf("[%08X]", virt_addr[i]); + + printf("\n\nTESTS complete\n"); + + LENB = 0x01; // 1 read/cmd + jz_adc_config(virt_addr, LENB, ADC_SPI_CLKDIV_MAX, ADC_CMD_SET_POWER_DOWN); + printf("\nADC in Power Down Mode \n"); + + return 0; +} + + diff --git a/Examples/ADC/QT_src/main.cpp b/Examples/ADC/QT_src/main.cpp new file mode 100755 index 0000000..ee0cfef --- /dev/null +++ b/Examples/ADC/QT_src/main.cpp @@ -0,0 +1,10 @@ +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/Examples/ADC/QT_src/mainwindow.cpp b/Examples/ADC/QT_src/mainwindow.cpp new file mode 100755 index 0000000..246050f --- /dev/null +++ b/Examples/ADC/QT_src/mainwindow.cpp @@ -0,0 +1,47 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include + +#include +#include + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), ui(new Ui::MainWindow) +{ + ui->setupUi(this); + connect(this,SIGNAL(refresh()),ui->Graph, SLOT(repaint())); + ui->Graph->setPointsPerPlot(250); + ui->Graph->setVoltsPerDiv(102); + + timer1 = new QTimer(this); + timer1->start(50); + connect(timer1, SIGNAL(timeout()), this, SLOT(updateGraph())); + + ADC1 = new ADCw; + ADC1->testADC(); + printf("\nTaking 250 samples each 50ms from Channel 0 at Fs=9.8KHz \n"); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::updateGraph() +{ + JZ_REG * dataADC =ADC1->takeSamplesADC(250, 0xFF, 1); + int tempD; + + for(int i=1; i< 250/2+1; i++) + { + tempD = dataADC[i]&0xFFFF; //printf("[%08X]",tempD); + ui->Graph->addPoint(tempD); + tempD = dataADC[i]>>16; //printf("[%08X]",tempD); + ui->Graph->addPoint(tempD); + } + //fflush (stdout); + /*for(int i = 0; i<100;i++) + ui->Graph->addPoint(20*sin(6.2832*i/100)+20);*/ + + emit refresh(); +} diff --git a/Examples/ADC/QT_src/mainwindow.h b/Examples/ADC/QT_src/mainwindow.h new file mode 100755 index 0000000..f87f85c --- /dev/null +++ b/Examples/ADC/QT_src/mainwindow.h @@ -0,0 +1,32 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include "ADCw.h" + +namespace Ui +{ + class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + ~MainWindow(); + +public slots: + void updateGraph(); + +signals: + void refresh(); + +private: + Ui::MainWindow *ui; + QTimer *timer1; + ADCw *ADC1; +}; + +#endif // MAINWINDOW_H diff --git a/Examples/ADC/QT_src/mainwindow.ui b/Examples/ADC/QT_src/mainwindow.ui new file mode 100755 index 0000000..8a9e77e --- /dev/null +++ b/Examples/ADC/QT_src/mainwindow.ui @@ -0,0 +1,62 @@ + + + MainWindow + + + + 0 + 0 + 320 + 240 + + + + ADC Test + + + + + + + + 100 + 20 + + + + + + + + + &Salir + + + + + A&cerca de... + + + + + Acerca de &QT + + + + + Acerca de &Qt... + + + + + + + SignalDisplay + QWidget +
signaldisplay.h
+ 1 +
+
+ + +
diff --git a/Examples/ADC/QT_src/signaldisplay.cpp b/Examples/ADC/QT_src/signaldisplay.cpp new file mode 100755 index 0000000..dc6678e --- /dev/null +++ b/Examples/ADC/QT_src/signaldisplay.cpp @@ -0,0 +1,60 @@ +#include "signaldisplay.h" +#include +#include + +SignalDisplay::SignalDisplay(QWidget *&parent):QWidget(parent) +{ + colorTrace = Qt::blue; + secsPerDiv = 1.0/600.0; + voltsPerDiv = 20; + setPointsPerPlot(10); +} + +void SignalDisplay::setPointsPerPlot(int value) +{ + pointsPerPlot = value; + waves = new QPoint[pointsPerPlot]; + secsIdx = 0; +} + +void SignalDisplay::drawGrid(QPainter &p, QColor colorGrid, int x, int y, int w, int h, int nx, int ny){ + p.setPen(colorGrid); + for (int ix= 0; ix +#include +#include + +class SignalDisplay : public QWidget +{ +public: + SignalDisplay(QWidget *&parent); + void addPoint( int value1); + void setSecsPerDiv( float value ){ secsPerDiv = fabs(value);} + void setVoltsPerDiv( float value ){ voltsPerDiv = fabs(value);} + float getSecsPerDiv(){ return secsPerDiv; } + void setPointsPerPlot(int value); + void setColorTrace(QColor color){colorTrace=color;}; + +private: + void paintEvent(QPaintEvent *event); + void drawGrid(QPainter &p, QColor colorGrid, int x, int y, int w, int h, int nx, int ny); + QPoint *waves; + float voltsPerDiv; + float secsPerDiv; + QColor colorTrace; + int secsIdx; + int w, h, ox, oy; + int pointsPerPlot; +}; + +#endif // SIGNALDISPLAY_H diff --git a/Examples/ADC/logic/ADC_peripheral.v b/Examples/ADC/logic/ADC_peripheral.v index f49bc02..7e51522 100644 --- a/Examples/ADC/logic/ADC_peripheral.v +++ b/Examples/ADC/logic/ADC_peripheral.v @@ -2,7 +2,7 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, ADC_SCLK, ADC_SDIN, ADC_SDOUT, addr, rdBus, wrBus, we); - + input clk, reset, ADC_EOC, cs, we; input [10:0] addr; input [7:0] wrBus; @@ -13,7 +13,6 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, //RAMB registers reg [7:0] rdBus; wire [7:0] rdBus1; - wire [7:0] rdBus2; reg [7:0] wrBus2; reg [10:0] addr2; reg we1=0; @@ -24,6 +23,7 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, reg nSample=0; reg [10:0] auto_count=0; reg [4:0] w_st2=0; + //SPI registers reg [3:0] SPI_in_data=0; @@ -36,44 +36,113 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, reg CMD_TYP; reg [3:0] CMD_ADC; reg [7:0] CLKDIV = 0; - reg [10:0] SIZEB; //[10:8] -> size_hi | [7:0] -> size_low + reg [9:0] SIZEB; //[10:8] -> size_hi | [7:0] -> size_low //TEMPS - reg [10:0] SIZEB2; - reg CMD_DONE2; + reg [9:0] SIZEB2; assign ADC_CSTART = 1'b1; // Dual-port RAM instatiation RAMB16_S9_S9 ba0( - .DOA(rdBus1), // Port A 8-bit Data Output - .DOB(rdBus2), // Port B 8-bit Data Output - .DOPA(), // Port A 1-bit Parity Output - .DOPB(), // Port B 1-bit Parity Output - .ADDRA(addr[10:0]), // Port A 11-bit Address Input - .ADDRB(addr2[10:0]), // Port B 11-bit Address Input - .CLKA(~clk), // Port A Clock - .CLKB(~clk), // Port B Clock - .DIA(wrBus), // Port A 8-bit Data Input - .DIB(wrBus2), // Port B 8-bit Data Input - .DIPA(1'b0), // Port A 1-bit parity Input - .DIPB(1'b0), // Port-B 1-bit parity Input - .ENA(1'b1), // Port A RAM Enable Input - .ENB(1'b1), // Port B RAM Enable Input - .SSRA(1'b0), // Port A Synchronous Set/Reset Input - .SSRB(1'b0), // Port B Synchronous Set/Reset Input - .WEA(we1), // Port A Write Enable Input - .WEB(we2) ); // Port B Write Enable Input + .DOA(rdBus1), // Port A 8-bit Data Output + .DOB(), // Port B 8-bit Data Output + .DOPA(), // Port A 1-bit Parity Output + .DOPB(), // Port B 1-bit Parity Output + .ADDRA(addr), // Port A 11-bit Address Input + .ADDRB(addr2), // Port B 11-bit Address Input + .CLKA(~clk), // Port A Clock + .CLKB(~clk), // Port B Clock + .DIA(wrBus), // Port A 8-bit Data Input + .DIB(wrBus2), // Port B 8-bit Data Input + .DIPA(1'b0), // Port A 1-bit parity Input + .DIPB(1'b0), // Port-B 1-bit parity Input + .ENA(1'b1), // Port A RAM Enable Input + .ENB(1'b1), // Port B RAM Enable Input + .SSRA(1'b0), // Port A Synchronous Set/Reset Input + .SSRB(1'b0), // Port B Synchronous Set/Reset Input + .WEA(we1), // Port A Write Enable Input + .WEB(we2) ); // Port B Write Enable Input // SPI comunication module instantiation reg ADC_SCLK_buffer = 0; reg ADC_SDIN_buffer = 0; - reg busy = 0; + reg busy = 0, load_in = 0; + reg pulse = 0, clkdiv_en = 0; reg [3:0] in_buffer=0; reg [9:0] out_buffer; reg [7:0] clkcount = 0; reg [4:0] count = 0; + reg [4:0] w_st1=0; + + assign ADC_CS = ~busy; + // Clock Generator + always@(posedge clk) + if (clkdiv_en) begin + if(clkcount < CLKDIV) begin + clkcount <= clkcount + 1; pulse <=0; + end else begin + clkcount <= 0; pulse <=1; + if((count>0) && (count < 21)) + ADC_SCLK_buffer <= ~ADC_SCLK_buffer; + end + end else begin + ADC_SCLK_buffer <= 0; pulse <=0; + end + // Control + always @(posedge clk) + if(reset) begin + {w_st1, count, clkdiv_en, busy} <= 0; + end else begin + case (w_st1) + 0: begin + if(SPI_wr) begin + clkdiv_en <= 1; + load_in <= 1; + w_st1 <= 1; busy <= 1; + end + end + 1: begin + load_in <= 0; + if(pulse) + count <= count + 1; + else if (count > 30) begin + clkdiv_en <= 0; busy <= 0; w_st1 <= 0; count <= 0; end + end + endcase + end + + // Receptor + always@(posedge clk) + begin + if((count[0] & pulse) && (count < 21)) begin + out_buffer <= out_buffer << 1; + out_buffer[0] <= ADC_SDOUT; + end + end + + always@(SPI_rd or out_buffer or busy or CLKDIV) + begin + SPI_out_data <= 10'bx; + if(SPI_rd) + begin SPI_out_data <= out_buffer; end + end + + // Transmitter + always@(posedge clk) + begin + if(load_in) in_buffer <= SPI_in_data; + if(!count[0] & pulse) begin + ADC_SDIN_buffer <= in_buffer[3]; + in_buffer <= in_buffer << 1; + end + end + + assign ADC_SCLK = ADC_SCLK_buffer; + assign ADC_SDIN = ADC_SDIN_buffer; + +/* assign ADC_CS = ~busy; always@(SPI_rd or out_buffer or busy or CLKDIV) @@ -90,8 +159,8 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, if(SPI_wr) begin in_buffer = SPI_in_data; busy = 1; end end - else - begin + else + begin clkcount = clkcount + 1; if(clkcount >= CLKDIV) begin @@ -114,7 +183,7 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, busy = 0; end end - end + end end always@(posedge ADC_SCLK_buffer) @@ -124,10 +193,10 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, end assign ADC_SCLK = ADC_SCLK_buffer; - assign ADC_SDIN = ADC_SDIN_buffer; + assign ADC_SDIN = ADC_SDIN_buffer;*/ // Write control - always @(negedge clk) + always @(posedge clk) if(reset) {CMD_TYP,CMD_ADC,SIZEB,we1} <= 0; else if(we & cs) begin @@ -136,14 +205,15 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, CMD_ADC[3:0] <= wrBus[3:0]; end 1: begin CLKDIV <= wrBus; end 2: begin SIZEB[7:0] <= wrBus; end - 3: begin SIZEB[10:8] <= wrBus[2:0]; end - default: begin we1 <= 1; end + 3: begin SIZEB[9:8] <= wrBus[2:0]; end + default: begin we1 <= 1; end endcase end else if(nSample) begin SIZEB <= SIZEB - 1; end - else - begin we1 <= 0; end + else + begin we1 <= 0; end + // Read control always @(posedge clk) if(reset) @@ -153,7 +223,7 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, 0: begin rdBus <= {CMD_DONE,CMD_TYP,CMD_ADC};end 1: begin rdBus <= CLKDIV; end 2: begin rdBus <= SIZEB[7:0]; end - 3: begin rdBus <= SIZEB[10:8]; end + 3: begin rdBus <= SIZEB[9:8]; end default: begin rdBus <= rdBus1; end endcase end @@ -165,42 +235,42 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, else begin case (w_st2) 0: begin w_st2 <= 2; SIZEB2<=SIZEB; end - 2: begin - if (SIZEB == 0) - begin w_st2 <= 0; CMD_DONE<= 1; auto_count <= 0; end - else begin - CMD_DONE<= 0; - //Send data to ADC - auto_count <= auto_count+1; - SPI_in_data <= CMD_ADC[3:0]; - SPI_wr <= 1; w_st2 <= 3; - end - end - 3: begin - SPI_wr <= 0; - //Wait for complete convertion - if(!ADC_EOC || ADC_CS) begin - SPI_rd <=1; - if(CMD_TYP) - w_st2<= 2; - else - w_st2<= 4; - end - end - 4: begin - //Write data on BRAM (LOW) - wrBus2 <= SPI_out_data[7:0]; - addr2 <= 4+2*(SIZEB2-SIZEB); - we2 <= 1; w_st2 <= 5; - end - 5: begin we2 <= 0; w_st2 <= 6; end - 6: begin - //Write data on BRAM (HI) - wrBus2 <= SPI_out_data[9:8]; - addr2 <= 5+2*(SIZEB2-SIZEB); - we2 <= 1; w_st2 <= 7; nSample <= 1; - end - 7: begin nSample <= 0; we2 <= 0; SPI_rd <=0; w_st2 <= 2; end + 2: begin + if (SIZEB == 0) + begin w_st2 <= 0; CMD_DONE<= 1; auto_count <= 0; end + else begin + CMD_DONE<= 0; + //Send data to ADC + auto_count <= auto_count+1; + SPI_in_data <= CMD_ADC[3:0]; + SPI_wr <= 1; w_st2 <= 3; + end + end + 3: begin + SPI_wr <= 0; + //Wait for complete convertion + if(ADC_CS && ADC_EOC) begin + SPI_rd <=1; + if(CMD_TYP) + w_st2<= 2; + else + w_st2<= 4; + end + end + 4: begin + //Write data on BRAM (LOW) + wrBus2 <= SPI_out_data[7:0]; + addr2 <= 4+2*(SIZEB-SIZEB2); + we2 <= 1; w_st2 <= 5; + end + 5: begin we2 <= 0; w_st2 <= 6; end + 6: begin + //Write data on BRAM (HI) + wrBus2 <= SPI_out_data[9:8]; + addr2 <= 5+2*(SIZEB-SIZEB2); + we2 <= 1; w_st2 <= 7; nSample <= 1; + end + 7: begin nSample <= 0; we2 <= 0; SPI_rd <=0; w_st2 <= 2; end endcase end