/**
******************************************************************************
* @file : main.c
* @author : Fernando Hermosillo Reynoso
* @brief : Main program body
******************************************************************************
*/
#include <stdint.h>
#include "stm32f103_hal.h"
/* Funciones privadas -----------------------------*/
void delay_ms(uint16_t ms) {
volatile unsigned long t = 0;
for(uint16_t i = 0; i < ms; i++)
{
for(t = 0; t < 800; t++);
}
}
void delay_us(uint16_t us)
{
for (volatile unsigned int cycles = 0; cycles < us; cycles++);
}
/* Codigo principal -------------------------------*/
int main(void)
{
// RCC config
rcc_clock_enable(RCC_TIM3);
rcc_clock_enable(RCC_GPIOA);
rcc_clock_enable(RCC_AFIO);
gpio_set_output(GPIOA, GPIO_PIN_1, GPIO_OUTPUT_PP, GPIO_SPEED_2MHZ);
// gpio_set_input(GPIOA, GPIO_PIN_2, GPIO_OUTPUT_PD);
// gpio_set_input(GPIOA, GPIO_PIN_3, GPIO_OUTPUT_PD);
/* GPIO Config */
timer_init(TIM3, TIMER_MODE_UP, 999, 7); // ARR=4999, PSC=7
timer_set_output_compare(TIM3, TIMER_IRQ_UPDATE, IRQ_ENABLE);
NVIC_EnableIRQ(TIM3_IRQn);
// timer_start(TIM3, TIMER_CONTINUOUS);
//EXIT config
exti_set_interrupt(PA0, EXIT_IRQ_RISING);
NVIC_ENABLEIRQ(EXTI0,IRQn);
// Loop
while (1)
{
if(gpio_read_pin(GPIOA, GPIO_PIN_3))
{
triac_on=1;
if(firing_delay>1000) firing_delay -= 1000;
delay_ms(10);
while(gpio_read_pin(GPIOA, GPIO_PIN_3));
delay_ms(10);
}
}
}
/* IRQ Handlers */
void TIM3_IRQHandler()
{
// If CCx interrupt is enabled, when TIMx->CNT reaches ARR it raises an interrupt
if(TIM3->SR & TIM_SR_CC1IF)
{
}
}