49 lines
960 B
C
49 lines
960 B
C
#include "SEMAPHORE.h"
|
|
#include "gpio.h"
|
|
|
|
char stato = 0;
|
|
char dir = 0;
|
|
|
|
void SEMAPHORE_init(void){
|
|
TIM7 -> ARR = ON_time;
|
|
TIM7 -> PSC = 24000; // set single timer ticks to 100us (240MHz/24000 = 10kHz) - 240MHz is APB1 clock freq.
|
|
TIM7 -> CR1 |= TIM_CR1_CEN;
|
|
TIM7 -> CNT = 0;
|
|
TIM7 -> DIER |= TIM_DIER_UIE;
|
|
//inizia con UNO acceso
|
|
GPIOB -> BSRR = on_0;
|
|
}
|
|
|
|
void SEMAPHORE_TIM7_interrupt(void){
|
|
// spegni tutto
|
|
GPIOB -> BSRR = off_0;
|
|
GPIOE -> BSRR = off_1;
|
|
GPIOB -> BSRR = off_2;
|
|
|
|
TIM7->SR = 0;
|
|
|
|
switch(stato){
|
|
case 0:
|
|
GPIOE -> BSRR = on_1;
|
|
stato = 1;
|
|
TIM7 -> ARR = ON_time;
|
|
break;
|
|
case 1:
|
|
if(!dir){
|
|
GPIOB -> BSRR = on_2;
|
|
stato = 2;
|
|
dir = 1;
|
|
}else{
|
|
GPIOB -> BSRR = on_0;
|
|
stato = 0;
|
|
dir = 0;
|
|
}
|
|
TIM7 -> ARR = OFF_time;
|
|
break;
|
|
case 2:
|
|
GPIOE -> BSRR = on_1;
|
|
stato = 1;
|
|
TIM7 -> ARR = ON_time;
|
|
break;
|
|
}
|
|
}
|