#include "ch.h" #include "hal.h" #include "dfi.h" #define FET_COUNT 8 #define BYTE_PER_FET 6 volatile uint8_t data[FET_COUNT][BYTE_PER_FET]; static virtual_timer_t mosfet_timer; // prototypes void initializeSRData(void); static void refreshDisplay(void *arg); void shiftOut(uint8_t); THD_WORKING_AREA(wa_dfiFunc, DFI_THREAD_STACK_SIZE); THD_FUNCTION(dfiFunc, p) { (void)p; chRegSetThreadName("dfi"); static systime_t last_time_simul = 0; static uint8_t counterFet = 0; static uint8_t counterDigit = 0; static uint8_t counterBit = 0; chVTObjectInit(&mosfet_timer); chVTSet(&mosfet_timer, MS2ST(10), refreshDisplay, NULL); while(true) { if(ST2MS(chVTTimeElapsedSinceX(last_time_simul)) > 100) { for(int fet=0; fet 7) { counterBit = 0; counterDigit++; if(counterDigit > 5) { counterFet++; counterDigit = 0; counterFet %= FET_COUNT; } } last_time_simul = chVTGetSystemTimeX(); palTogglePad(GPIOC, GPIOC_LED); } } } void initializeSRData() { palSetPad(GPIOE, GPIOE_PIN1); //Tells all SRs that uController is sending data for(int digit = 0; digit < BYTE_PER_FET; digit++) { shiftOut(0); } for(int fet=0; fet> i; /* if(bitbit == 1) { palSetPad(GPIOE, GPIOE_PIN2); } else { palClearPad(GPIOE, GPIOE_PIN2); }*/ palWritePad(GPIOE, GPIOE_PIN2, bitbit); palSetPad(GPIOE, GPIOE_PIN0); //clock for (int w = 0; w < 1000; w++); palClearPad(GPIOE, GPIOE_PIN0); //clock for (int w = 0; w < 1000; w++); } } void init_hw() { initializeSRData(); palSetGroupMode(GPIOD, 0xff00, 0, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); palSetGroupMode(GPIOE, 0x00ff, 0, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* // enable clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIOD_PIN8 | GPIOD_PIN9 | GPIOD_PIN10 | GPIOD_PIN11 | GPIOD_PIN12 | GPIOD_PIN13 | GPIOD_PIN14 | GPIOD_PIN15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIOE_PIN0 | GPIOE_PIN1 | GPIOE_PIN2 | GPIOE_PIN3 | GPIOE_PIN4 | GPIOE_PIN5 | GPIOE_PIN6 | GPIOE_PIN7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); */ }