#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/timer.h>
#include <hal/pin.h>
#include "funkce_spolecne.h"

void wait_cyklu (uint32_t cyklu)
{
    for (uint32_t j = 0; j < cyklu; j++)	/* Wait a bit. */
			__asm__ volatile("nop");
}


void LED_a_TL_inicializace(void)
{
    pin_pull_disable(LED1);
	pin_pull_disable(LED2);
	pin_pull_disable(LED3);
	pin_set(LED1, false);
	pin_set(LED2, false);
	pin_set(LED3, false);
	pin_output_pushpull(LED1);
	pin_output_pushpull(LED2);
	pin_output_pushpull(LED3);

	pin_pull_disable(TL1);
    pin_pull_disable(TL2);
    pin_input(TL1);
    pin_input(TL2);
}

void MCO2_inicializace(void)
{
    pin_clock_enable(MCO2);
    pin_af_pushpull(MCO2);
    pin_speed_fast(MCO2);
    //po restartu je nastaveno AF = 0

    RCC_CFGR &= (RCC_CFGR_MCOPRE_DIV_NONE << RCC_CFGR_MCO2PRE_SHIFT);
    RCC_CFGR &= (RCC_CFGR_MCO2_HSE << RCC_CFGR_MCO2_SHIFT);
    RCC_CFGR |= (RCC_CFGR_MCO2_HSE << RCC_CFGR_MCO2_SHIFT);
    rcc_osc_on(HSE);
	rcc_wait_for_osc_ready(HSE);
}

void povoleni_hodin_GPIO_vsechny(void)   //Povoleni hodin pro vsechny pouzivane GPIO porty
{
    uint32_t GPIO_povoleni [] = {RCC_GPIOA, RCC_GPIOB, RCC_GPIOC, RCC_GPIOD, RCC_GPIOE};
    for (uint16_t i = 0; i < sizeof(GPIO_povoleni) / sizeof(GPIO_povoleni[0]); i++)
    {
        rcc_periph_clock_enable(GPIO_povoleni[i]);
    }
}
