Commit 42dcede5 authored by Adam Wujek's avatar Adam Wujek

main_fw: improve TMR

Mark global variables with __xMR that are used within replicated functions
Signed-off-by: 's avatarAdam Wujek <dev_public@wujek.eu>
parent 840d1fe4
......@@ -58,9 +58,9 @@ void set_tmr_error(void);
void accvolt();
void acccurr();
void accpowr();
uint16_t curpage_volt;
uint16_t curpage_curr;
uint16_t curpage_powr;
uint16_t curpage_volt __xMR;
uint16_t curpage_curr __xMR;
uint16_t curpage_powr __xMR;
void query_prp();
void query_cln();
......
......@@ -26,25 +26,25 @@ extern uint16_t use_pec __xMR;
#define MAX_PAGE 2
#endif
uint16_t volts_lin[MAX_PAGE+1];
uint16_t currs_lin[MAX_PAGE+1];
uint16_t powrs_lin[MAX_PAGE+1];
uint16_t temps_lin[3];
uint16_t frpms_lin[3];
volatile uint16_t volts_lin[MAX_PAGE+1] __xMR;
volatile uint16_t currs_lin[MAX_PAGE+1] __xMR;
volatile uint16_t powrs_lin[MAX_PAGE+1] __xMR;
volatile uint16_t temps_lin[3]__xMR;
volatile uint16_t frpms_lin[3]__xMR;
volatile uint32_t seconds_up __xMR;
#define TOTAL_PWM_CLOCKS 255
int16_t curr_pwm_duty1000_1 = 10;
int16_t curr_pwm_duty1000_2 = 10;
int16_t curr_pwm_duty1000_3 = 10;
static int16_t curr_pwm_duty1000_1 __xMR = 10;
static int16_t curr_pwm_duty1000_2 __xMR = 10;
static int16_t curr_pwm_duty1000_3 __xMR = 10;
#define FAN_RAMPUP 950
int16_t goal_pwm_duty1000_1 = FAN_RAMPUP;
int16_t goal_pwm_duty1000_2 = FAN_RAMPUP;
int16_t goal_pwm_duty1000_3 = FAN_RAMPUP;
static volatile int16_t goal_pwm_duty1000_1 __xMR = FAN_RAMPUP;
static volatile int16_t goal_pwm_duty1000_2 __xMR = FAN_RAMPUP;
static volatile int16_t goal_pwm_duty1000_3 __xMR = FAN_RAMPUP;
static uint16_t iter __xMR;
......@@ -52,8 +52,8 @@ static uint16_t iter __xMR;
static uint16_t fan_ramp_up_count __xMR = 0;
#endif
uint16_t tacho_cnt[3];
uint16_t tacho_rpm[3];
static volatile uint16_t tacho_cnt[3] __xMR;
static volatile uint16_t tacho_rpm[3] __xMR;
// when fan_cmdrpm is 0, setfrpms and temp_curve_points_y represent
// duty cycle (0 to 1000)
......@@ -208,11 +208,9 @@ const uint8_t adc_ch_list[] __xMR = {adc_t1, adc_t2, adc_t3,
#endif
uint16_t adc_i __xMR;
uint16_t adc_vals[sizeof(adc_ch_list)];
float temps[3];
float volts[4];
float currs[3];
static volatile uint16_t adc_i __xMR;
static volatile uint16_t adc_vals[sizeof(adc_ch_list)] __xMR;
volatile float temps[3] __xMR;
uint8_t status_cml;
......@@ -303,10 +301,30 @@ void __xMR update_pwm()
#endif
static uint16_t adc_read_channel(void)
{
uint16_t val;
adc_async_read_channel(&ADC_0, 0, (uint8_t *)&val, 2);
return val;
}
static void adc_set_channel(uint8_t channel)
{
adc_async_set_inputs(&ADC_0, channel, 0x18, 0);
}
static void adc_start(void)
{
adc_async_start_conversion(&ADC_0);
}
void __xMR adc_cb(const struct adc_async_descriptor *const descr, const uint8_t channel)
{
adc_async_read_channel(&ADC_0, 0, (uint8_t *)&(adc_vals[adc_i]), 2);
float volts[4];
float currs[3];
adc_vals[adc_i] = adc_read_channel();
// debug("ADC has just read ch %u", adc_ch_list[adc_i]);
// channels are ordered from AIN0 to AIN11
// breakout board has the temp sensor connected to AIN10 and two pins at AIN4 and AIN5
......@@ -445,13 +463,13 @@ void __xMR adc_cb(const struct adc_async_descriptor *const descr, const uint8_t
adc_i = 0;
}
adc_async_set_inputs(&ADC_0, adc_ch_list[adc_i], 0x18, 0);
adc_set_channel(adc_ch_list[adc_i]);
if (adc_i == 0) {
trig_adc_next_second = 1;
} else {
/* trigger conversion for the next channel */
adc_async_start_conversion(&ADC_0);
adc_start();
}
}
......@@ -510,7 +528,7 @@ static void __xMR mytimercallback(const struct timer_task *const timer_task)
#endif
if (trig_adc_next_second) {
trig_adc_next_second = 0;
adc_async_start_conversion(&ADC_0);
adc_start();
}
} else
++iter;
......@@ -520,22 +538,22 @@ static void __xMR mytimercallback(const struct timer_task *const timer_task)
#if defined(MMFANT) || defined(MMPROT)
static void inc_tacho1(void)
static void inc_tacho1(void) __xMR
{
++tacho_cnt[0];
}
static void inc_tacho2(void)
static void inc_tacho2(void) __xMR
{
++tacho_cnt[1];
}
static void inc_tacho3(void)
static void inc_tacho3(void) __xMR
{
++tacho_cnt[2];
}
void __xMR load_fan_config()
void __xMR load_fan_config(void)
{
for (uint8_t i = 0; i < 3; ++i) {
fan_installed[i] = user_flash.fan_installed[i];
......
#include <temp_curve.h>
extern float temps[3];
extern float temps[3] __xMR;
extern float temp_curve_points_x[3][3] __xMR;
extern float temp_curve_points_y[3][3] __xMR;
extern float temp_matrix[3][3] __xMR;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment