summaryrefslogtreecommitdiff
path: root/software/hhd70dongle.old/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'software/hhd70dongle.old/util.c')
-rw-r--r--software/hhd70dongle.old/util.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/software/hhd70dongle.old/util.c b/software/hhd70dongle.old/util.c
new file mode 100644
index 0000000..dce23b9
--- /dev/null
+++ b/software/hhd70dongle.old/util.c
@@ -0,0 +1,87 @@
+/*
+ *
+ * mur.sat
+ *
+ * Somewhen in the year 20xx, mur.at will have a nano satellite launched
+ * into a low earth orbit (310 km above the surface of our planet). The
+ * satellite itself is a TubeSat personal satellite kit, developed and
+ * launched by interorbital systems. mur.sat is a joint venture of mur.at,
+ * ESC im Labor and realraum.
+ *
+ * Please visit the project hompage at sat.mur.at for further information.
+ *
+ *
+ * Copyright (C) 2012 Bernhard Tittelbach <xro@realraum.at>
+ *
+ * This file is part of mur.sat.
+ *
+ * mur.sat 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
+ * any later version.
+ *
+ * mur.sat 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 mur.sat. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include "util.h"
+
+typedef void (*f_ptr_type)(void);
+f_ptr_type start_bootloader = (f_ptr_type)0x3800;
+
+void reset(void)
+{
+ cli();
+ // disable watchdog, if enabled
+ // disable all peripherals
+ UDCON = 1;
+ USBCON = (1<<FRZCLK); // disable USB
+ UCSR1B = 0;
+ _delay_ms(5);
+ EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
+ TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
+ DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
+ PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
+ start_bootloader();
+}
+
+//not switchin off adc produces slightly besser results
+void adc_on(void)
+{
+ ADCSRA = (1<<ADEN) | 0b00000111; // enable ADC, Prescaler 1:128
+}
+
+void adc_off(void)
+{
+ ADCSRA &= ~(1<<ADEN); // disable ADC -> save power
+}
+
+uint8_t adc_read(uint8_t mux)
+{
+ ADCSRB = (mux & 0x20); // select input
+ ADMUX = 0b11100000 | (mux & 0x1F); // select input cont'd
+ // select internal 2.56V reference,
+ // result is left justified
+ ADCSRA |= (1<<ADSC); // start the conversion
+ while (ADCSRA & (1<<ADSC)) ; // wait for result
+ return ADCH;
+}
+
+void debug_sprint_int16hex(char *buffer, int16_t num)
+{
+ int c,n;
+ for (c=0; c<4; c++)
+ {
+ n = (num >> (3-c)*4 ) & 15;
+ buffer[c] = n + ((n < 10) ? '0' : 'A' - 10);
+ }
+ buffer[4]=0;
+}