From a6e18604befdb6a954542f7722c8d55424065621 Mon Sep 17 00:00:00 2001 From: Nicholas Corgan Date: Thu, 17 Jul 2014 11:50:50 -0700 Subject: OctoClock firmware upgrade, added host driver * OctoClock can communicate with UHD over Ethernet * Can read NMEA strings from GPSDO and send to host * Added multi_usrp_clock class for clock devices * uhd::device can now filter to return only USRP devices or clock devices * New OctoClock bootloader can accept firmware download over Ethernet * Added octoclock_burn_eeprom,octoclock_firmware_burner utilities * Added test_clock_synch example to show clock API --- firmware/octoclock/octoclock_r4/CMakeLists.txt | 47 ++++++ .../octoclock/octoclock_r4/octoclock_r4_main.c | 158 +++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 firmware/octoclock/octoclock_r4/CMakeLists.txt create mode 100644 firmware/octoclock/octoclock_r4/octoclock_r4_main.c (limited to 'firmware/octoclock/octoclock_r4') diff --git a/firmware/octoclock/octoclock_r4/CMakeLists.txt b/firmware/octoclock/octoclock_r4/CMakeLists.txt new file mode 100644 index 000000000..a030d3249 --- /dev/null +++ b/firmware/octoclock/octoclock_r4/CMakeLists.txt @@ -0,0 +1,47 @@ +# +# Copyright 2014 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 . +# + +add_executable(octoclock_r4_fw.elf octoclock_r4_main.c) +target_link_libraries(octoclock_r4_fw.elf octoclock) + +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/octoclock_r4_fw.bin + DEPENDS octoclock_r4_fw.elf + COMMENT "Generating octoclock_r4_fw.bin" + COMMAND ${AVR_OBJCOPY} -O binary ${CMAKE_CURRENT_BINARY_DIR}/octoclock_r4_fw.elf ${CMAKE_BINARY_DIR}/octoclock_r4_fw.bin +) +add_custom_target( + octoclock_r4_fw_bin ALL + DEPENDS ${CMAKE_BINARY_DIR}/octoclock_r4_fw.bin +) +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/octoclock_r4_fw.hex + DEPENDS octoclock_r4_fw.elf + COMMENT "Generating octoclock_r4_fw.hex" + COMMAND ${AVR_OBJCOPY} -O ihex ${CMAKE_CURRENT_BINARY_DIR}/octoclock_r4_fw.elf ${CMAKE_BINARY_DIR}/octoclock_r4_fw.hex +) +add_custom_target( + octoclock_r4_fw_hex ALL + DEPENDS ${CMAKE_BINARY_DIR}/octoclock_r4_fw.hex +) +add_custom_target( + upload_r4 + ${AVRDUDE} -p atmega128 -c ${PROGRAMMER} -P usb -U efuse:w:0xFF:m -U hfuse:w:0x81:m -U lfuse:w:0xFF:m -U flash:w:octoclock_r4_fw.hex:i + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS octoclock_r4_fw_hex + COMMENT "Uploading OctoClock firmware to device with ${PROGRAMMER}" +) diff --git a/firmware/octoclock/octoclock_r4/octoclock_r4_main.c b/firmware/octoclock/octoclock_r4/octoclock_r4_main.c new file mode 100644 index 000000000..f80c7d188 --- /dev/null +++ b/firmware/octoclock/octoclock_r4/octoclock_r4_main.c @@ -0,0 +1,158 @@ +/* + * Copyright 2013-2014 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 . + */ + +/* + * Welcome to the firmware code for the USRP Octoclock accessory product! + * + * Notes regarding this firmware: + * NOT in M103 compatibility mode + * CKOPT full rail-to-rail + * xtal osc + * 16K CK (16K clock cycles) + * additional delay 65ms for Crystal Oscillator + * slowly rising power + * persistent EEPROM + * + * These settings are very conservative. If a lower power oscillator is + * required, change CKOPT to '1' (UNPROGRAMMED). + * + * M103C = [ ] + * WDTON = [ ] + * OCDEN = [ ] + * JTAGEN = [X] + * SPIEN = [X] + * EESAVE = [X] + * BOOTSZ = 4096W_F000 + * BOOTRST = [ ] + * CKOPT = [X] + * BODLEVEL = 2V7 + * BODEN = [ ] + * SUT_CKSEL = EXTHIFXTALRES_16KCK_64MS + * + * EXTENDED = 0xFF (valid) + * HIGH = 0x81 (valid) + * LOW = 0xFF (valid) + * + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/******************************************************************************* +* Main Routine +*******************************************************************************/ + +int main(void){ + + #ifdef DEBUG + asm("cli"); + #else + asm("sei"); + #endif + + bool old_global_ext_ref_is_present = false; + switch_pos_t old_switch_pos, current_switch_pos; + + setup_atmel_io_ports(); + + network_init(); + init_udp_listeners(); + register_udp_listener(OCTOCLOCK_UDP_CTRL_PORT, handle_udp_ctrl_packet); + register_udp_listener(OCTOCLOCK_UDP_GPSDO_PORT, handle_udp_gpsdo_packet); + + DEBUG_INIT(); // Does nothing when not in debug mode + usart_init(); + + //Set initial ClkDist and front panel settings + led(Middle,true); + setup_TI_CDCE18005(Primary_GPS); // 10 MHz from Internal Source + + led(Top,true); + PORTA |= (1< 0) handle_eth_packet(recv_len); + } +} -- cgit v1.2.3