// // 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); } }