139 lines
3.3 KiB
C
139 lines
3.3 KiB
C
//
|
||
// Created by cfif on 05.05.23.
|
||
//
|
||
#include "MainModesArbiter_Private.h"
|
||
|
||
void Mma_Init(
|
||
tMma *env,
|
||
tGpios *gpios,
|
||
tSerialPorts *serialPorts,
|
||
tCanPorts *canPorts,
|
||
tSpiPorts *spiPorts,
|
||
tRtcs *rtcs
|
||
) {
|
||
env->gpios = gpios;
|
||
env->serialPorts = serialPorts;
|
||
env->canPorts = canPorts;
|
||
env->spiPorts = spiPorts;
|
||
env->rtcs = rtcs;
|
||
|
||
InitThreadAtrStatic(&env->thread.attr, "Mma", env->thread.controlBlock, env->thread.stack, osPriorityNormal);
|
||
env->thread.id = 0;
|
||
}
|
||
|
||
static _Noreturn void Mma_Thread(tMma *env) {
|
||
|
||
// Запуск устройства
|
||
Mma_InitStage(env);
|
||
|
||
bool result;
|
||
|
||
/*
|
||
uint32_t step_100 = 100000 / 256; // ОМ
|
||
uint32_t R100 = 100000;
|
||
uint32_t R2 = 100000 - R100; // Для записи в регистр
|
||
uint32_t steps = R2 / step_100;
|
||
|
||
uint32_t step_10 = 10000 / 256; // ОМ
|
||
uint32_t R10 = 10000;
|
||
uint32_t R3 = 10000 - R10; // Для записи в регистр
|
||
uint32_t steps2 = R3 / step_10;
|
||
*/
|
||
|
||
float Rwa = 60.0f;
|
||
|
||
float R100 = 21000.0f; // Это сколько нужно
|
||
float R100ab = 100000.0f;
|
||
int32_t D100 = (int32_t) (256.0f - (((R100 - Rwa) / R100ab) * 256.0f));
|
||
|
||
if (D100 > 255)
|
||
D100 = 255;
|
||
|
||
if (D100 < 0)
|
||
D100 = 0;
|
||
|
||
|
||
float R10 = 3000.0f; // Это сколько нужно
|
||
float R10ab = 10000.0f;
|
||
int32_t D10 = (int32_t) (256.0f - (((R10 - Rwa) / R10ab) * 256.0f));
|
||
|
||
if (D10 > 255)
|
||
D10 = 255;
|
||
|
||
if (D10 < 0)
|
||
D10 = 0;
|
||
|
||
|
||
for (;;) {
|
||
/*
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
*/
|
||
|
||
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, D100);
|
||
|
||
asm("nop");
|
||
|
||
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
|
||
|
||
asm("nop");
|
||
|
||
|
||
|
||
/*
|
||
|
||
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
|
||
data = 0;
|
||
result = setSpiSensor(&env->sensorSPI, data);
|
||
*/
|
||
/*
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
|
||
uint16_t data = 255;
|
||
bool result = setSpiSensor(&env->sensorSPI, data);
|
||
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
|
||
data = 128;
|
||
result = setSpiSensor(&env->sensorSPI, data);
|
||
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
|
||
data = 1;
|
||
result = setSpiSensor(&env->sensorSPI, data);
|
||
|
||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||
SystemDelayMs(1000);
|
||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||
SystemDelayMs(1000);
|
||
|
||
data = 0;
|
||
result = setSpiSensor(&env->sensorSPI, data);
|
||
*/
|
||
}
|
||
}
|
||
|
||
|
||
void Mma_StartThread(tMma *env) {
|
||
if (!env->thread.id) {
|
||
env->thread.id = osThreadNew((osThreadFunc_t) (Mma_Thread), (void *) (env), &env->thread.attr);
|
||
} else {
|
||
osThreadResume(env->thread.id);
|
||
}
|
||
} |