Implement HAL and apply macros across code-base
Implement AVR Platform
This commit is contained in:
committed by
Scott Lahteine
parent
fb04dfcda8
commit
4b16fa3272
@@ -32,7 +32,7 @@
|
||||
#include "language.h"
|
||||
|
||||
#if ENABLED(HEATER_0_USES_MAX6675)
|
||||
#include "spi.h"
|
||||
#include "private_spi.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
@@ -43,10 +43,6 @@
|
||||
#include "endstops.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(USE_WATCHDOG)
|
||||
#include "watchdog.h"
|
||||
#endif
|
||||
|
||||
#ifdef K1 // Defined in Configuration.h in the PID settings
|
||||
#define K2 (1.0-K1)
|
||||
#endif
|
||||
@@ -1054,38 +1050,39 @@ void Temperature::init() {
|
||||
|
||||
#endif // HEATER_0_USES_MAX6675
|
||||
|
||||
#ifdef DIDR2
|
||||
#define ANALOG_SELECT(pin) do{ if (pin < 8) SBI(DIDR0, pin); else SBI(DIDR2, pin - 8); }while(0)
|
||||
#else
|
||||
#define ANALOG_SELECT(pin) do{ SBI(DIDR0, pin); }while(0)
|
||||
#endif
|
||||
HAL_adc_init();
|
||||
|
||||
// Set analog inputs
|
||||
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07;
|
||||
DIDR0 = 0;
|
||||
#ifdef DIDR2
|
||||
DIDR2 = 0;
|
||||
#endif
|
||||
#if HAS_TEMP_0
|
||||
ANALOG_SELECT(TEMP_0_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_0_PIN);
|
||||
#endif
|
||||
#if HAS_TEMP_1
|
||||
ANALOG_SELECT(TEMP_1_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_1_PIN);
|
||||
#endif
|
||||
#if HAS_TEMP_2
|
||||
ANALOG_SELECT(TEMP_2_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_2_PIN);
|
||||
#endif
|
||||
#if HAS_TEMP_3
|
||||
ANALOG_SELECT(TEMP_3_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_3_PIN);
|
||||
#endif
|
||||
#if HAS_TEMP_4
|
||||
ANALOG_SELECT(TEMP_4_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_4_PIN);
|
||||
#endif
|
||||
#if HAS_TEMP_BED
|
||||
ANALOG_SELECT(TEMP_BED_PIN);
|
||||
HAL_ANALOG_SELECT(TEMP_BED_PIN);
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_WIDTH_SENSOR)
|
||||
ANALOG_SELECT(FILWIDTH_PIN);
|
||||
HAL_ANALOG_SELECT(FILWIDTH_PIN);
|
||||
#endif
|
||||
|
||||
// todo: HAL: fix abstraction
|
||||
#ifdef ARDUINO_ARCH_AVR
|
||||
// Use timer0 for temperature measurement
|
||||
// Interleave temperature interrupt with millies interrupt
|
||||
OCR0B = 128;
|
||||
SBI(TIMSK0, OCIE0B);
|
||||
#else
|
||||
HAL_timer_start (TEMP_TIMER_NUM, TEMP_TIMER_FREQUENCY);
|
||||
HAL_timer_enable_interrupt (TEMP_TIMER_NUM);
|
||||
#endif
|
||||
|
||||
#if HAS_AUTO_FAN_0
|
||||
@@ -1139,11 +1136,6 @@ void Temperature::init() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Use timer0 for temperature measurement
|
||||
// Interleave temperature interrupt with millies interrupt
|
||||
OCR0B = 128;
|
||||
SBI(TIMSK0, OCIE0B);
|
||||
|
||||
// Wait for temperature measurement to settle
|
||||
delay(250);
|
||||
|
||||
@@ -1415,12 +1407,12 @@ void Temperature::disable_all_heaters() {
|
||||
uint32_t max6675_temp = 2000;
|
||||
#define MAX6675_ERROR_MASK 7
|
||||
#define MAX6675_DISCARD_BITS 18
|
||||
#define MAX6675_SPEED_BITS (_BV(SPR1)) // clock ÷ 64
|
||||
#define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64
|
||||
#else
|
||||
uint16_t max6675_temp = 2000;
|
||||
#define MAX6675_ERROR_MASK 4
|
||||
#define MAX6675_DISCARD_BITS 3
|
||||
#define MAX6675_SPEED_BITS (_BV(SPR0)) // clock ÷ 16
|
||||
#define MAX6675_SPEED_BITS 2 // (_BV(SPR0)) // clock ÷ 16
|
||||
#endif
|
||||
|
||||
int Temperature::read_max6675() {
|
||||
@@ -1433,14 +1425,8 @@ void Temperature::disable_all_heaters() {
|
||||
|
||||
next_max6675_ms = ms + MAX6675_HEAT_INTERVAL;
|
||||
|
||||
CBI(
|
||||
#ifdef PRR
|
||||
PRR
|
||||
#elif defined(PRR0)
|
||||
PRR0
|
||||
#endif
|
||||
, PRSPI);
|
||||
SPCR = _BV(MSTR) | _BV(SPE) | MAX6675_SPEED_BITS;
|
||||
spiBegin();
|
||||
spiInit(MAX6675_SPEED_BITS);
|
||||
|
||||
WRITE(MAX6675_SS, 0); // enable TT_MAX6675
|
||||
|
||||
@@ -1451,7 +1437,7 @@ void Temperature::disable_all_heaters() {
|
||||
// Read a big-endian temperature value
|
||||
max6675_temp = 0;
|
||||
for (uint8_t i = sizeof(max6675_temp); i--;) {
|
||||
max6675_temp |= max6675_spi.receive();
|
||||
max6675_temp |= spiRec();
|
||||
if (i > 0) max6675_temp <<= 8; // shift left if not the last byte
|
||||
}
|
||||
|
||||
@@ -1607,7 +1593,10 @@ void Temperature::set_current_temp_raw() {
|
||||
* - For PINS_DEBUGGING, monitor and report endstop pins
|
||||
* - For ENDSTOP_INTERRUPTS_FEATURE check endstops if flagged
|
||||
*/
|
||||
ISR(TIMER0_COMPB_vect) { Temperature::isr(); }
|
||||
HAL_TEMP_TIMER_ISR {
|
||||
HAL_timer_isr_prologue (TEMP_TIMER_NUM);
|
||||
Temperature::isr();
|
||||
}
|
||||
|
||||
volatile bool Temperature::in_temp_isr = false;
|
||||
|
||||
@@ -1618,8 +1607,10 @@ void Temperature::isr() {
|
||||
in_temp_isr = true;
|
||||
|
||||
// Allow UART and stepper ISRs
|
||||
CBI(TIMSK0, OCIE0B); //Disable Temperature ISR
|
||||
sei();
|
||||
DISABLE_TEMPERATURE_INTERRUPT(); //Disable Temperature ISR
|
||||
#if !defined(CPU_32_BIT)
|
||||
sei();
|
||||
#endif
|
||||
|
||||
static int8_t temp_count = -1;
|
||||
static ADCSensorState adc_sensor_state = StartupDelay;
|
||||
@@ -1914,13 +1905,6 @@ void Temperature::isr() {
|
||||
* This gives each ADC 0.9765ms to charge up.
|
||||
*/
|
||||
|
||||
#define SET_ADMUX_ADCSRA(pin) ADMUX = _BV(REFS0) | (pin & 0x07); SBI(ADCSRA, ADSC)
|
||||
#ifdef MUX5
|
||||
#define START_ADC(pin) if (pin > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
|
||||
#else
|
||||
#define START_ADC(pin) ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
|
||||
#endif
|
||||
|
||||
switch (adc_sensor_state) {
|
||||
|
||||
case SensorsReady: {
|
||||
@@ -1940,66 +1924,66 @@ void Temperature::isr() {
|
||||
|
||||
#if HAS_TEMP_0
|
||||
case PrepareTemp_0:
|
||||
START_ADC(TEMP_0_PIN);
|
||||
HAL_START_ADC(TEMP_0_PIN);
|
||||
break;
|
||||
case MeasureTemp_0:
|
||||
raw_temp_value[0] += ADC;
|
||||
raw_temp_value[0] += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_BED
|
||||
case PrepareTemp_BED:
|
||||
START_ADC(TEMP_BED_PIN);
|
||||
HAL_START_ADC(TEMP_BED_PIN);
|
||||
break;
|
||||
case MeasureTemp_BED:
|
||||
raw_temp_bed_value += ADC;
|
||||
raw_temp_bed_value += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_1
|
||||
case PrepareTemp_1:
|
||||
START_ADC(TEMP_1_PIN);
|
||||
HAL_START_ADC(TEMP_1_PIN);
|
||||
break;
|
||||
case MeasureTemp_1:
|
||||
raw_temp_value[1] += ADC;
|
||||
raw_temp_value[1] += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_2
|
||||
case PrepareTemp_2:
|
||||
START_ADC(TEMP_2_PIN);
|
||||
HAL_START_ADC(TEMP_2_PIN);
|
||||
break;
|
||||
case MeasureTemp_2:
|
||||
raw_temp_value[2] += ADC;
|
||||
raw_temp_value[2] += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_3
|
||||
case PrepareTemp_3:
|
||||
START_ADC(TEMP_3_PIN);
|
||||
HAL_START_ADC(TEMP_3_PIN);
|
||||
break;
|
||||
case MeasureTemp_3:
|
||||
raw_temp_value[3] += ADC;
|
||||
raw_temp_value[3] += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_TEMP_4
|
||||
case PrepareTemp_4:
|
||||
START_ADC(TEMP_4_PIN);
|
||||
HAL_START_ADC(TEMP_4_PIN);
|
||||
break;
|
||||
case MeasureTemp_4:
|
||||
raw_temp_value[4] += ADC;
|
||||
raw_temp_value[4] += HAL_READ_ADC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_WIDTH_SENSOR)
|
||||
case Prepare_FILWIDTH:
|
||||
START_ADC(FILWIDTH_PIN);
|
||||
HAL_START_ADC(FILWIDTH_PIN);
|
||||
break;
|
||||
case Measure_FILWIDTH:
|
||||
if (ADC > 102) { // Make sure ADC is reading > 0.5 volts, otherwise don't read.
|
||||
if (HAL_READ_ADC > 102) { // Make sure ADC is reading > 0.5 volts, otherwise don't read.
|
||||
raw_filwidth_value -= (raw_filwidth_value >> 7); // Subtract 1/128th of the raw_filwidth_value
|
||||
raw_filwidth_value += ((unsigned long)ADC << 7); // Add new ADC reading, scaled by 128
|
||||
raw_filwidth_value += ((unsigned long)HAL_READ_ADC << 7); // Add new ADC reading, scaled by 128
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
@@ -2130,7 +2114,9 @@ void Temperature::isr() {
|
||||
}
|
||||
#endif
|
||||
|
||||
cli();
|
||||
#if !defined(CPU_32_BIT)
|
||||
cli();
|
||||
#endif
|
||||
in_temp_isr = false;
|
||||
SBI(TIMSK0, OCIE0B); //re-enable Temperature ISR
|
||||
ENABLE_TEMPERATURE_INTERRUPT(); //re-enable Temperature ISR
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user