You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
1 year ago
|
#include "MaxHandler.h"
|
||
|
|
||
|
void Max_Init(uint8_t ch,uint8_t initMode) {
|
||
|
sSPI_select(ch);
|
||
|
|
||
|
sSPI_write_byte(0x80);
|
||
|
if (initMode == AutoConversion)
|
||
|
sSPI_write_byte((1<<7)|(1<<5)|(1<<0)); //Auto conversion + OC 33ms detection + 50hz rejection
|
||
|
else if (initMode == OneShotConversion)
|
||
|
sSPI_write_byte((1<<6)|(1<<5)|(1<<0)); //OneShot conversion + OC 33ms detection + 50hz rejection
|
||
|
else
|
||
|
sSPI_write_byte((1<<5)|(1<<0)); //OC 33ms detection + 50hz rejection
|
||
|
|
||
|
sSPI_write_byte(0b0011|(0b0011<<4)); //TC type K + 8 samples
|
||
|
|
||
|
sSPI_free();
|
||
|
|
||
|
uint8_t i = 0;
|
||
|
|
||
|
if (ch < THERMO_CHN_COUNT) {
|
||
|
i = ch;
|
||
|
++ch;
|
||
|
}
|
||
|
|
||
|
for (; i < ch; i++) {
|
||
|
ThermoSensor[i].lastTick = System_GetSysTick();
|
||
|
ThermoSensor[i].state = 4; //Set NO_DATA error
|
||
|
ThermoSensor[i].captureFlags = initMode;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
uint8_t IsMaxDRDYLow(uint8_t ch) {
|
||
|
if (ch > THERMO_CHN_COUNT-1) ch = THERMO_CHN_COUNT-1;
|
||
|
|
||
|
if ( ( RSLink_DipsRead() & (1<<(4+ch)) ) == 0) return 1;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void Max_Handler(){
|
||
|
ThermoData *Selected = &ThermoSensor[MaxSelectedChannel];
|
||
|
|
||
|
//If conversion ready or 5s timeout
|
||
|
if ((IsMaxDRDYLow(MaxSelectedChannel) || (System_GetSysTickDifference(Selected->lastTick)>2000)) && Selected->captureFlags != 0) {
|
||
|
sSPI_select(MaxSelectedChannel);
|
||
|
Selected->lastTick = System_GetSysTick();
|
||
|
sSPI_write_byte(0x0A);
|
||
|
Selected->CJTemp = (uint16_t)sSPI_read_byte()<<8;
|
||
|
Selected->CJTemp |= sSPI_read_byte();
|
||
|
Selected->Temperature = (uint32_t)sSPI_read_byte()<<11;
|
||
|
Selected->Temperature |= (uint32_t)sSPI_read_byte()<<3;
|
||
|
Selected->Temperature |= (uint32_t)sSPI_read_byte()>>5;
|
||
|
Selected->state = sSPI_read_byte()&(~4);
|
||
|
sSPI_free();
|
||
|
if ((Selected->captureFlags & OneShotConversion) != 0){
|
||
|
Selected->captureFlags &= ~(OneShotConversion);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
MaxSelectedChannel++;
|
||
|
if (MaxSelectedChannel == THERMO_CHN_COUNT) MaxSelectedChannel = 0;
|
||
|
}
|