mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Convert original source to system workbench
Create readme Started commenting the files in english NO Optimisations yet, just trying to get it all working over as is first Using newer STM StdPeriph libs (i think they are newer?)
This commit is contained in:
390
workspace/ts100/src/Hardware.c
Normal file
390
workspace/ts100/src/Hardware.c
Normal file
@@ -0,0 +1,390 @@
|
||||
/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
|
||||
File Name : CTRL.c
|
||||
Version : S100 APP Ver 2.11
|
||||
Description:
|
||||
Author : Celery
|
||||
Data: 2015/07/07
|
||||
History:
|
||||
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
2015/07/20 <20>Ӵ<EFBFBD><D3B4>¶ȱ<C2B6><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "APP_Version.h"
|
||||
#include "Hardware.h"
|
||||
#include "CTRL.h"
|
||||
#include "Bios.h"
|
||||
#include "UI.h"
|
||||
/******************************************************************************/
|
||||
#define CAL_AD 250
|
||||
const u32 gVol[] = { 3900, 2760, 1720, 584 };
|
||||
const u16 gRate[] = { 300, 150, 90, 40 };
|
||||
s32 gZerop_ad = 239;
|
||||
u32 gTurn_offv = 100;
|
||||
u8 gCalib_flag = 0;
|
||||
vu16 gMeas_cnt = 0;/* Measure*/
|
||||
u32 gKey_in;
|
||||
u8 gLongkey_flag = 0;
|
||||
u8 gAlarm_type = 1;
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_CalFlag
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡУ״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:У״̬<D7B4><CCAC>־
|
||||
*******************************************************************************/
|
||||
u32 Get_CalFlag(void) {
|
||||
return gCalib_flag;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_gKey
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>״̬
|
||||
*******************************************************************************/
|
||||
u32 Get_gKey(void) {
|
||||
return gKey_in;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_gKey
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD>״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Ҫ<><D2AA><EFBFBD>õİ<C3B5><C4B0><EFBFBD>״̬
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void Set_gKey(u32 key) {
|
||||
gKey_in = key;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_LongKeyFlag
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0 :<3A><><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD><EFBFBD> 1: <20><><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void Set_LongKeyFlag(u32 flag) {
|
||||
gLongkey_flag = flag;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_AlarmType
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
0:<3A><><EFBFBD><EFBFBD>
|
||||
1:sensor - err
|
||||
2:<3A><><EFBFBD><EFBFBD>
|
||||
3:<3A><>ѹ
|
||||
*******************************************************************************/
|
||||
u8 Get_AlarmType(void) {
|
||||
return gAlarm_type;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_AlarmType
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
0:<3A><><EFBFBD><EFBFBD>
|
||||
1:sen - err
|
||||
2:<3A><><EFBFBD><EFBFBD>
|
||||
3:<3A><>ѹ
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void Set_AlarmType(u8 type) {
|
||||
gAlarm_type = type;
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function: Read_Vb
|
||||
Description:Reads the input voltage and compares it to the thresholds??
|
||||
Input:Selects which threshold we are comparing to
|
||||
Output:Returns a key for if the voltage is in spec (I think)
|
||||
*******************************************************************************/
|
||||
int Read_Vb(u8 flag) {
|
||||
u32 tmp, i, sum = 0;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
tmp = ADC_GetConversionValue(ADC2);
|
||||
sum += tmp;
|
||||
}
|
||||
tmp = sum / 10;
|
||||
if (tmp >= (gVol[0] + gVol[0] / 100)) {
|
||||
gAlarm_type = HIGH_VOLTAGE;
|
||||
return H_ALARM; //<2F><><EFBFBD><EFBFBD>3500
|
||||
}
|
||||
tmp = (tmp * 10 / 144); //<2F><>ѹvb = 3.3 * 85 *ad / 40950
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (i == 2) {
|
||||
if (flag == 0) {
|
||||
if (tmp >= gRate[i])
|
||||
break;
|
||||
} else {
|
||||
if (tmp >= gTurn_offv)
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (tmp >= gRate[i])
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i + 1);
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Scan_Key
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD>(50msÿ<73><C3BF>)
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void Scan_Key(void) {
|
||||
static u32 p_cnt = 0, key_statuslast = 0;
|
||||
u32 key_state = 0;
|
||||
|
||||
if ((~GPIOA->IDR) & 0x0200)
|
||||
key_state |= KEY_V1; //KEY_V1
|
||||
if ((~GPIOA->IDR) & 0x0040)
|
||||
key_state |= KEY_V2; //KEY_V2
|
||||
|
||||
if (key_state == 0)
|
||||
return;
|
||||
|
||||
if (gLongkey_flag == 1) { //LongKey_flag :<3A><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
if (key_statuslast == key_state) {
|
||||
p_cnt++;
|
||||
if (p_cnt > 21)
|
||||
Set_gKey(KEY_CN | key_state); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
} else {
|
||||
p_cnt = 0;
|
||||
key_statuslast = key_state;
|
||||
Set_gKey(key_state);
|
||||
}
|
||||
} else {
|
||||
p_cnt = 0;
|
||||
key_statuslast = key_state;
|
||||
Set_gKey(key_state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_SlAvg
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:avg_data ƽ<><C6BD><EFBFBD><EFBFBD>ADֵ
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
*******************************************************************************/
|
||||
u32 Get_SlAvg(u32 avg_data) {
|
||||
static u32 sum_avg = 0;
|
||||
static u8 init_flag = 0;
|
||||
u16 si_avg = sum_avg / SI_COE, abs;
|
||||
|
||||
if (init_flag == 0) { /*<2A><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD>*/
|
||||
sum_avg = SI_COE * avg_data;
|
||||
init_flag = 1;
|
||||
return sum_avg / SI_COE;
|
||||
}
|
||||
if (avg_data > si_avg)
|
||||
abs = avg_data - si_avg;
|
||||
else
|
||||
abs = si_avg - avg_data;
|
||||
|
||||
if (abs > SI_THRESHOLD)
|
||||
sum_avg = SI_COE * avg_data;
|
||||
else
|
||||
sum_avg += avg_data - sum_avg / SI_COE;
|
||||
|
||||
return sum_avg / SI_COE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_AvgAd
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ADƽ<44><C6BD>ֵ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:ADƽ<44><C6BD>ֵ
|
||||
*******************************************************************************/
|
||||
u32 Get_AvgAd(void) {
|
||||
static u32 ad_sum = 0;
|
||||
static u32 max = 0, min = 5000;
|
||||
u32 ad_value, avg_data, slide_data;
|
||||
|
||||
Set_HeatingTime(0);
|
||||
HEAT_OFF();
|
||||
Delay_HalfMs(25);
|
||||
gMeas_cnt = 10;
|
||||
|
||||
while (gMeas_cnt > 0) {
|
||||
ad_value = Get_AdcValue(0); //Read_Tmp();
|
||||
ad_sum += ad_value;
|
||||
if (ad_value > max)
|
||||
max = ad_value;
|
||||
if (ad_value < min)
|
||||
min = ad_value;
|
||||
|
||||
if (gMeas_cnt == 1) {
|
||||
ad_sum = ad_sum - max - min;
|
||||
avg_data = ad_sum / 8;
|
||||
|
||||
slide_data = Get_SlAvg(avg_data);
|
||||
ad_sum = 0;
|
||||
min = 5000;
|
||||
max = 0;
|
||||
}
|
||||
gMeas_cnt--;
|
||||
}
|
||||
return slide_data; //gSlide_data;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_TempSlAvg
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>¶Ȼ<C2B6><C8BB><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:avg_data <20><><EFBFBD><EFBFBD>¶<EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>¶Ȼ<C2B6><C8BB><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
*******************************************************************************/
|
||||
int Get_TempSlAvg(int avg_data) {
|
||||
static int sum_avg = 0;
|
||||
static u8 init_flag = 0;
|
||||
|
||||
if (init_flag == 0) { /*<2A><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD>*/
|
||||
sum_avg = 8 * avg_data;
|
||||
init_flag = 1;
|
||||
return sum_avg / 8;
|
||||
}
|
||||
|
||||
sum_avg += avg_data - sum_avg / 8;
|
||||
|
||||
return sum_avg / 8;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_SensorTmp
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
*******************************************************************************/
|
||||
int Get_SensorTmp(void) {
|
||||
static u32 ad_sum = 0;
|
||||
static u32 max = 0, min = 5000;
|
||||
u32 ad_value, avg_data, slide_data;
|
||||
int sensor_temp = 0;
|
||||
|
||||
gMeas_cnt = 10;
|
||||
|
||||
while (gMeas_cnt > 0) {
|
||||
ad_value = Get_AdcValue(1);
|
||||
ad_sum += ad_value;
|
||||
if (ad_value > max)
|
||||
max = ad_value;
|
||||
if (ad_value < min)
|
||||
min = ad_value;
|
||||
|
||||
if (gMeas_cnt == 1) {
|
||||
ad_sum = ad_sum - max - min;
|
||||
avg_data = ad_sum / 8;
|
||||
|
||||
slide_data = Get_TempSlAvg(avg_data);
|
||||
sensor_temp = (250 + (3300 * slide_data / 4096) - 750); //(25 + ((10*(33*gSlide_data)/4096)-75));
|
||||
ad_sum = 0;
|
||||
min = 5000;
|
||||
max = 0;
|
||||
}
|
||||
gMeas_cnt--;
|
||||
}
|
||||
return sensor_temp;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Zero_Calibration
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:У<D0A3><D7BC><EFBFBD>AD
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
*******************************************************************************/
|
||||
void Zero_Calibration(void) {
|
||||
u32 zerop;
|
||||
int cool_tmp;
|
||||
|
||||
zerop = Get_AvgAd();
|
||||
cool_tmp = Get_SensorTmp();
|
||||
|
||||
if (zerop >= 400) {
|
||||
gCalib_flag = 2;
|
||||
} else {
|
||||
if (cool_tmp < 300) {
|
||||
gZerop_ad = zerop;
|
||||
gCalib_flag = 1;
|
||||
} else {
|
||||
gCalib_flag = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_Temp
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ȶ<EFBFBD><C8B6>¶<EFBFBD>,<2C><><EFBFBD><EFBFBD>AD<41><44><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:wk_temp <20><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:ʵ<><CAB5><EFBFBD>¶<EFBFBD>
|
||||
*******************************************************************************/
|
||||
s16 Get_Temp(s16 wk_temp) {
|
||||
int ad_value, cool_tmp, compensation = 0;
|
||||
static u16 cnt = 0, h_cnt = 0;
|
||||
s16 rl_temp = 0;
|
||||
|
||||
ad_value = Get_AvgAd();
|
||||
cool_tmp = Get_SensorTmp();
|
||||
|
||||
if (ad_value == 4095)
|
||||
h_cnt++;
|
||||
else {
|
||||
h_cnt = 0;
|
||||
if (ad_value > 3800 && ad_value < 4095)
|
||||
cnt++; //20150720<32><EFBFBD>
|
||||
else
|
||||
cnt = 0;
|
||||
}
|
||||
if (h_cnt >= 60 && cnt == 0)
|
||||
gAlarm_type = SEN_ERR; //Sen-err
|
||||
if (h_cnt == 0 && cnt >= 10)
|
||||
gAlarm_type = HIGH_TEMP; //<2F><><EFBFBD><EFBFBD>
|
||||
if (h_cnt < 60 && cnt < 10)
|
||||
gAlarm_type = NORMAL_TEMP;
|
||||
|
||||
compensation = 80 + 150 * (wk_temp - 1000) / 3000;
|
||||
if (wk_temp == 1000)
|
||||
compensation -= 10;
|
||||
|
||||
if (wk_temp != 0) {
|
||||
if (ad_value > (compensation + gZerop_ad))
|
||||
ad_value -= compensation;
|
||||
}
|
||||
if (cool_tmp > 400)
|
||||
cool_tmp = 400;
|
||||
rl_temp = (ad_value * 1000 + 806 * cool_tmp - gZerop_ad * 1000) / 806;
|
||||
|
||||
return rl_temp;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Start_Watchdog
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ms <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>1
|
||||
*******************************************************************************/
|
||||
u32 Start_Watchdog(u32 ms) {
|
||||
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
|
||||
|
||||
/* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz (min:0.8ms -- max:3276.8ms */
|
||||
IWDG_SetPrescaler(IWDG_Prescaler_32);
|
||||
|
||||
/* Set counter reload value to XXms */
|
||||
IWDG_SetReload(ms * 10 / 8);
|
||||
|
||||
/* Reload IWDG counter */
|
||||
IWDG_ReloadCounter();
|
||||
|
||||
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
|
||||
IWDG_Enable();
|
||||
return 1;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Clear_Watchdog
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ÿ<EFBFBD><C3BF>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>1
|
||||
*******************************************************************************/
|
||||
u32 Clear_Watchdog(void) {
|
||||
IWDG_ReloadCounter();
|
||||
return 1;
|
||||
}
|
||||
/******************************** END OF FILE *********************************/
|
||||
Reference in New Issue
Block a user