aboutsummaryrefslogtreecommitdiff
path: root/arch/attiny1634.h
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-11-27 07:31:56 -0700
committerSelene ToyKeeper2023-11-27 07:31:56 -0700
commit1b6f40863b4f08365e39236496d687ab7806ed11 (patch)
treeaf573a54cfdf01d3398ce78799ba0b019f1cb21d /arch/attiny1634.h
parentmore ADC / DAC / MCU progress... (diff)
downloadanduril-1b6f40863b4f08365e39236496d687ab7806ed11.tar.gz
anduril-1b6f40863b4f08365e39236496d687ab7806ed11.tar.bz2
anduril-1b6f40863b4f08365e39236496d687ab7806ed11.zip
fixed ADC on attiny1634 and related builds
Diffstat (limited to '')
-rw-r--r--arch/attiny1634.h40
1 files changed, 26 insertions, 14 deletions
diff --git a/arch/attiny1634.h b/arch/attiny1634.h
index fb89fa8..559d04e 100644
--- a/arch/attiny1634.h
+++ b/arch/attiny1634.h
@@ -13,20 +13,25 @@
#define BOGOMIPS (F_CPU/4000)
#define DELAY_ZERO_TIME 1020
+inline void mcu_clock_speed();
+
///// clock dividers
inline void clock_prescale_set(uint8_t n);
+// TODO? allow hwdef to define a base clock speed,
+// and adjust these values accordingly
typedef enum
{
- clock_div_1 = 0,
- clock_div_2 = 1,
- clock_div_4 = 2,
- clock_div_8 = 3,
- clock_div_16 = 4,
- clock_div_32 = 5,
- clock_div_64 = 6,
- clock_div_128 = 7,
- clock_div_256 = 8
+ // datasheet 6.5.2, CLKPR - Clock Prescale Register
+ clock_div_1 = 0, // 8 MHz
+ clock_div_2 = 1, // 4 MHz
+ clock_div_4 = 2, // 2 MHz
+ clock_div_8 = 3, // 1 MHz
+ clock_div_16 = 4, // 500 kHz
+ clock_div_32 = 5, // 250 kHz
+ clock_div_64 = 6, // 125 kHz
+ clock_div_128 = 7, // 62.5 kHz
+ clock_div_256 = 8, // 31.75 kHz
} clock_div_t;
@@ -39,11 +44,11 @@ typedef enum
#define ADMUX_VCC 0b00001101
// (1 << V_REF) | (THERM_CHANNEL)
// DS table 19-3, 19-4, internal sensor / 1.1V ref
+// [refs1, refs0, refen, adc0en, mux3, mux2, mux1, mux0]
+// refs=0b10 : internal 1.1V ref
+// mux=0b1110 : internal temperature sensor
#define ADMUX_THERM 0b10001110
-
-
-
#define hwdef_set_admux_therm mcu_set_admux_therm
inline void mcu_set_admux_therm();
@@ -54,8 +59,6 @@ inline void mcu_adc_sleep_mode();
inline void mcu_adc_start_measurement();
-inline void mcu_adc_on();
-
inline void mcu_adc_off();
// NOP because interrupt flag clears itself
@@ -63,6 +66,15 @@ inline void mcu_adc_off();
inline uint16_t mcu_adc_result();
+// return Volts * 40, range 0 to 6.375V
+#define voltage_raw2cooked mcu_vdd_raw2cooked
+inline uint8_t mcu_vdd_raw2cooked(uint16_t measurement);
+inline uint8_t mcu_vdivider_raw2cooked(uint16_t measurement);
+
+// return (temp in Kelvin << 6)
+#define temp_raw2cooked mcu_temp_raw2cooked
+inline uint16_t mcu_temp_raw2cooked(uint16_t measurement);
+
inline uint8_t mcu_adc_lsb();