aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/microblaze
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-12-14 13:13:29 -0800
committerJosh Blum <josh@joshknows.com>2010-12-14 13:13:29 -0800
commit01d5209e103a590dbcdaa51b7fecd2a9e161f558 (patch)
tree3c26cac1aaeaecf49cb5b7c35cfcb9fd25ad744f /firmware/microblaze
parent546e877ea461404550f01a1066242c2f2610ad9d (diff)
parent42c8c0873c00e692eb88c54e7da4fcbabbd9a4b6 (diff)
downloaduhd-01d5209e103a590dbcdaa51b7fecd2a9e161f558.tar.gz
uhd-01d5209e103a590dbcdaa51b7fecd2a9e161f558.tar.bz2
uhd-01d5209e103a590dbcdaa51b7fecd2a9e161f558.zip
Merge branch 'zpu' into next
Diffstat (limited to 'firmware/microblaze')
-rw-r--r--firmware/microblaze/CMakeLists.txt120
-rw-r--r--firmware/microblaze/apps/blinkenlights.c4
-rw-r--r--firmware/microblaze/apps/txrx_uhd.c1
-rw-r--r--firmware/microblaze/lib/CMakeLists.txt47
-rw-r--r--firmware/microblaze/lib/hal_io.h28
-rw-r--r--firmware/microblaze/lib/hal_uart.c2
-rw-r--r--firmware/microblaze/lib/mdelay.c3
-rw-r--r--firmware/microblaze/lib/pic.h1
-rw-r--r--firmware/microblaze/usrp2/CMakeLists.txt38
-rw-r--r--firmware/microblaze/usrp2p/CMakeLists.txt48
10 files changed, 275 insertions, 17 deletions
diff --git a/firmware/microblaze/CMakeLists.txt b/firmware/microblaze/CMakeLists.txt
new file mode 100644
index 000000000..0b7f396c7
--- /dev/null
+++ b/firmware/microblaze/CMakeLists.txt
@@ -0,0 +1,120 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+
+########################################################################
+# setup project and compiler
+########################################################################
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+SET(CMAKE_C_COMPILER zpu-elf-gcc)
+SET(CMAKE_C_COMPILER_WORKS TRUE)
+SET(CMAKE_C_COMPILER_FORCED TRUE)
+PROJECT(USRP_NXXX_FW C)
+
+########################################################################
+# lwIP header include dirs
+########################################################################
+SET(LWIPDIR ${CMAKE_SOURCE_DIR}/lwip/lwip-1.3.1)
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/lwip
+ ${CMAKE_SOURCE_DIR}/lwip_port
+ ${LWIPDIR}/src/include
+ ${LWIPDIR}/src/include/ipv4
+)
+
+########################################################################
+# misc flags for the gcc compiler
+########################################################################
+SET(CMAKE_C_FLAGS -abel) #always needed compile time and link time
+#ADD_DEFINITIONS(-mxl-soft-div -msoft-float -mxl-soft-mul -mxl-barrel-shift)
+ADD_DEFINITIONS(-Os --std=gnu99 -Wall -Werror-implicit-function-declaration -ffunction-sections)
+
+MACRO(ADD_LINKER_FLAGS flags)
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flags}")
+ENDMACRO(ADD_LINKER_FLAGS)
+
+ADD_LINKER_FLAGS("-Wl,-defsym -Wl,_STACK_SIZE=3072")
+ADD_LINKER_FLAGS("-Wl,--relax -Wl,--gc-sections")
+
+########################################################################
+# define for the hal io (FIXME move?)
+########################################################################
+#ADD_DEFINITIONS(-DHAL_IO_USES_DBOARD_PINS)
+ADD_DEFINITIONS(-DHAL_IO_USES_UART)
+
+########################################################################
+# common cflags and ldflags
+########################################################################
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/../../host/lib/usrp
+ ${CMAKE_SOURCE_DIR}/lib
+)
+
+########################################################################
+# setup programs for output files
+########################################################################
+FIND_PROGRAM(LINKER zpu-elf-ld)
+FIND_PROGRAM(OBJCOPY zpu-elf-objcopy)
+FIND_PROGRAM(OBJDUMP zpu-elf-objdump)
+FIND_PROGRAM(HEXDUMP hexdump)
+
+########################################################################
+# helper functions to build output formats
+########################################################################
+MACRO(GEN_OUTPUTS target)
+ GET_FILENAME_COMPONENT(name ${target} NAME_WE)
+ #command to create a map from elf
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${name}.map DEPENDS ${target}
+ COMMAND ${LINKER}
+ ARGS -Map ${name}.map ${target}
+ )
+ #command to create a bin from elf
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${name}.bin DEPENDS ${target}
+ COMMAND ${OBJCOPY}
+ ARGS -O binary ${target} ${name}.bin
+ )
+ #command to create a ihx from elf
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${name}.ihx DEPENDS ${target}
+ COMMAND ${OBJCOPY}
+ ARGS -O ihex ${target} ${name}.ihx
+ )
+ #command to create a dump from elf
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${name}.dump DEPENDS ${target}
+ COMMAND ${OBJDUMP}
+ ARGS -DSC ${target} > ${name}.dump
+ )
+ #command to create a rom from bin
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${name}.rom DEPENDS ${name}.bin
+ COMMAND ${HEXDUMP}
+ ARGS -v -e'1/1 \"%.2X\\n\"' ${name}.bin > ${name}.rom
+ )
+ #add a top level target for output files
+ ADD_CUSTOM_TARGET(
+ ${name}_outputs ALL DEPENDS ${name}.map ${name}.bin ${name}.ihx ${name}.dump ${name}.rom
+ )
+ENDMACRO(GEN_OUTPUTS)
+
+########################################################################
+# Add the subdirectories
+########################################################################
+ADD_SUBDIRECTORY(usrp2)
+ADD_SUBDIRECTORY(usrp2p)
diff --git a/firmware/microblaze/apps/blinkenlights.c b/firmware/microblaze/apps/blinkenlights.c
index 4cebe5c9d..30cb33a7f 100644
--- a/firmware/microblaze/apps/blinkenlights.c
+++ b/firmware/microblaze/apps/blinkenlights.c
@@ -12,9 +12,11 @@ int main(int argc, char *argv[]) {
uint32_t c = 0;
uint8_t i = 0;
+ output_regs->led_src = 0;
+
while(1) {
//delay(5000000);
- for(c=0;c<5000000;c++) asm("NOP");
+ for(c=0;c<50000;c++) asm("NOP");
output_regs->leds = (i++ % 2) ? 0xFF : 0x00; //blink everything on that register
}
diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c
index e9c98c26e..517b50e91 100644
--- a/firmware/microblaze/apps/txrx_uhd.c
+++ b/firmware/microblaze/apps/txrx_uhd.c
@@ -373,6 +373,7 @@ main(void)
pkt_ctrl_release_incoming_buffer();
}
+ pic_interrupt_handler();
int pending = pic_regs->pending; // poll for under or overrun
if (pending & PIC_UNDERRUN_INT){
diff --git a/firmware/microblaze/lib/CMakeLists.txt b/firmware/microblaze/lib/CMakeLists.txt
new file mode 100644
index 000000000..193d63cfa
--- /dev/null
+++ b/firmware/microblaze/lib/CMakeLists.txt
@@ -0,0 +1,47 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+
+########################################################################
+SET(COMMON_SRCS
+ ${CMAKE_SOURCE_DIR}/lib/u2_init.c
+ ${CMAKE_SOURCE_DIR}/lib/abort.c
+ ${CMAKE_SOURCE_DIR}/lib/ad9510.c
+ ${CMAKE_SOURCE_DIR}/lib/clocks.c
+ ${CMAKE_SOURCE_DIR}/lib/eeprom.c
+ ${CMAKE_SOURCE_DIR}/lib/eth_addrs.c
+ ${CMAKE_SOURCE_DIR}/lib/eth_mac.c
+ ${CMAKE_SOURCE_DIR}/lib/_exit.c
+ ${CMAKE_SOURCE_DIR}/lib/exit.c
+ ${CMAKE_SOURCE_DIR}/lib/hal_io.c
+ ${CMAKE_SOURCE_DIR}/lib/hal_uart.c
+ ${CMAKE_SOURCE_DIR}/lib/i2c.c
+ ${CMAKE_SOURCE_DIR}/lib/mdelay.c
+ ${CMAKE_SOURCE_DIR}/lib/memcpy_wa.c
+ ${CMAKE_SOURCE_DIR}/lib/memset_wa.c
+ ${CMAKE_SOURCE_DIR}/lib/nonstdio.c
+ ${CMAKE_SOURCE_DIR}/lib/pic.c
+ ${CMAKE_SOURCE_DIR}/lib/pkt_ctrl.c
+ ${CMAKE_SOURCE_DIR}/lib/print_addrs.c
+ ${CMAKE_SOURCE_DIR}/lib/print_rmon_regs.c
+ ${CMAKE_SOURCE_DIR}/lib/print_buffer.c
+ ${CMAKE_SOURCE_DIR}/lib/printf.c
+ ${CMAKE_SOURCE_DIR}/lib/ihex.c
+ ${CMAKE_SOURCE_DIR}/lib/spi.c
+ ${CMAKE_SOURCE_DIR}/lib/net_common.c
+ ${CMAKE_SOURCE_DIR}/lib/arp_cache.c
+ ${CMAKE_SOURCE_DIR}/lib/banal.c
+)
diff --git a/firmware/microblaze/lib/hal_io.h b/firmware/microblaze/lib/hal_io.h
index 950f8d591..ff87a3494 100644
--- a/firmware/microblaze/lib/hal_io.h
+++ b/firmware/microblaze/lib/hal_io.h
@@ -72,10 +72,10 @@ hal_disable_ints(void)
{
int result, t0;
- asm volatile("mfs %0, rmsr \n\
- andni %1, %0, 0x2 \n\
- mts rmsr, %1"
- : "=r" (result), "=r" (t0));
+ //asm volatile("mfs %0, rmsr \n\
+// andni %1, %0, 0x2 \n\
+// mts rmsr, %1"
+// : "=r" (result), "=r" (t0));
return result;
}
@@ -88,10 +88,10 @@ hal_enable_ints(void)
{
int result, t0;
- asm volatile("mfs %0, rmsr \n\
- ori %1, %0, 0x2 \n\
- mts rmsr, %1"
- : "=r" (result), "=r" (t0));
+// asm volatile("mfs %0, rmsr \n\
+// ori %1, %0, 0x2 \n\
+// mts rmsr, %1"
+// : "=r" (result), "=r" (t0));
return result;
}
@@ -103,12 +103,12 @@ static inline void
hal_restore_ints(int prev_state)
{
int t0, t1;
- asm volatile("andi %0, %2, 0x2 \n\
- mfs %1, rmsr \n\
- andni %1, %1, 0x2 \n\
- or %1, %1, %0 \n\
- mts rmsr, %1"
- : "=r" (t0), "=r"(t1) : "r" (prev_state));
+// asm volatile("andi %0, %2, 0x2 \n\
+// mfs %1, rmsr \n\
+// andni %1, %1, 0x2 \n\
+// or %1, %1, %0 \n\
+// mts rmsr, %1"
+// : "=r" (t0), "=r"(t1) : "r" (prev_state));
}
#endif /* INCLUDED_HAL_IO_H */
diff --git a/firmware/microblaze/lib/hal_uart.c b/firmware/microblaze/lib/hal_uart.c
index 7836240fe..f0921f4f0 100644
--- a/firmware/microblaze/lib/hal_uart.c
+++ b/firmware/microblaze/lib/hal_uart.c
@@ -113,7 +113,7 @@ hal_uart_getc_timeout(hal_uart_name_t u)
int hal_uart_rx_flush(hal_uart_name_t u)
{
- char x;
+ char x = 0;
while(uart_regs[u].rxlevel) x = uart_regs[u].rxchar;
return x;
}
diff --git a/firmware/microblaze/lib/mdelay.c b/firmware/microblaze/lib/mdelay.c
index c8c119b1a..958acf3f5 100644
--- a/firmware/microblaze/lib/mdelay.c
+++ b/firmware/microblaze/lib/mdelay.c
@@ -30,7 +30,7 @@
inline static void
delay_1ms(int loop_count)
{
- int i;
+/* int i;
for (i = 0; i < loop_count; i++){
asm volatile ("or r0, r0, r0\n\
or r0, r0, r0\n\
@@ -40,6 +40,7 @@ delay_1ms(int loop_count)
or r0, r0, r0\n\
or r0, r0, r0\n");
}
+*/
}
// delay about ms milliseconds
diff --git a/firmware/microblaze/lib/pic.h b/firmware/microblaze/lib/pic.h
index 68918f9ad..6cbffb441 100644
--- a/firmware/microblaze/lib/pic.h
+++ b/firmware/microblaze/lib/pic.h
@@ -31,5 +31,6 @@ int pic_disable_interrupts();
int pic_enable_interrupts();
void pic_restore_interrupts(int prev_status);
+void pic_interrupt_handler();
#endif /* INCLUDED_PIC_H */
diff --git a/firmware/microblaze/usrp2/CMakeLists.txt b/firmware/microblaze/usrp2/CMakeLists.txt
new file mode 100644
index 000000000..6f43bb702
--- /dev/null
+++ b/firmware/microblaze/usrp2/CMakeLists.txt
@@ -0,0 +1,38 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+
+########################################################################
+INCLUDE(${CMAKE_SOURCE_DIR}/lib/CMakeLists.txt)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+
+ADD_LIBRARY(libusrp2fw STATIC
+ ${COMMON_SRCS}
+ sd.c
+ ethernet.c
+ udp_fw_update.c
+)
+
+########################################################################
+ADD_LINKER_FLAGS("-Wl,-defsym -Wl,_TEXT_START_ADDR=0x0050")
+
+ADD_EXECUTABLE(usrp2_txrx_uhd.elf ${CMAKE_SOURCE_DIR}/apps/txrx_uhd.c)
+TARGET_LINK_LIBRARIES(usrp2_txrx_uhd.elf libusrp2fw)
+GEN_OUTPUTS(usrp2_txrx_uhd.elf)
+
+ADD_EXECUTABLE(usrp2_blinkenlights.elf ${CMAKE_SOURCE_DIR}/apps/blinkenlights.c)
+TARGET_LINK_LIBRARIES(usrp2_blinkenlights.elf libusrp2fw)
+GEN_OUTPUTS(usrp2_blinkenlights.elf)
diff --git a/firmware/microblaze/usrp2p/CMakeLists.txt b/firmware/microblaze/usrp2p/CMakeLists.txt
new file mode 100644
index 000000000..825c3ab9e
--- /dev/null
+++ b/firmware/microblaze/usrp2p/CMakeLists.txt
@@ -0,0 +1,48 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+
+########################################################################
+INCLUDE(${CMAKE_SOURCE_DIR}/lib/CMakeLists.txt)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+
+ADD_DEFINITIONS(-DUSRP2P)
+
+ADD_LIBRARY(libusrp2pfw STATIC
+ ${COMMON_SRCS}
+ spif.c
+ spi_flash.c
+ spi_flash_read.c
+ bootloader_utils.c
+ ethernet.c
+ xilinx_s3_icap.c
+ udp_fw_update.c
+)
+
+########################################################################
+ADD_LINKER_FLAGS("-Wl,-defsym -Wl,_TEXT_START_ADDR=0x8050")
+
+ADD_EXECUTABLE(usrp2p_txrx_uhd.elf ${CMAKE_SOURCE_DIR}/apps/txrx_uhd.c)
+TARGET_LINK_LIBRARIES(usrp2p_txrx_uhd.elf libusrp2pfw)
+GEN_OUTPUTS(usrp2p_txrx_uhd.elf)
+
+ADD_EXECUTABLE(usrp2p_blinkenlights.elf ${CMAKE_SOURCE_DIR}/apps/blinkenlights.c)
+TARGET_LINK_LIBRARIES(usrp2p_blinkenlights.elf libusrp2pfw)
+GEN_OUTPUTS(usrp2p_blinkenlights.elf)
+
+ADD_EXECUTABLE(usrp2p_uart_flash_loader.elf ${CMAKE_SOURCE_DIR}/apps/uart_flash_loader.c)
+TARGET_LINK_LIBRARIES(usrp2p_uart_flash_loader.elf libusrp2pfw)
+GEN_OUTPUTS(usrp2p_uart_flash_loader.elf)