diff options
| author | Omar Magdy <omar.professional8777@gmail.com> | 2022-08-23 23:43:02 +0200 |
|---|---|---|
| committer | Omar Magdy <omar.professional8777@gmail.com> | 2022-08-23 23:43:02 +0200 |
| commit | 9bebf5f393bbfd51489b4c4e65a066e47e623f1e (patch) | |
| tree | 9d32a88cad2c8f25902b864383fddd26776d44d5 | |
| parent | 547093d69d001fc6bf90778acc479316149a6fd1 (diff) | |
| download | Traffic-light-9bebf5f393bbfd51489b4c4e65a066e47e623f1e.tar.xz Traffic-light-9bebf5f393bbfd51489b4c4e65a066e47e623f1e.zip | |
Added Traffic_Handler function to apply DRY principle
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | trafficlight.c | 74 | ||||
| -rw-r--r-- | trafficlight.h | 1 |
3 files changed, 30 insertions, 47 deletions
@@ -13,4 +13,6 @@ Traffic tf_ped = {RED , GPIO_PORTB_BASE, 5, 4, 1}; int main()
{
TrafficInit();
+ // PortInit(GPIO_PORTA_BASE, SYSCTL_PERIPH_GPIOA, 0x0, 0xFF); // Initialize porta
+ // GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, 2);
}
diff --git a/trafficlight.c b/trafficlight.c index 9adf380..6ba5e18 100644 --- a/trafficlight.c +++ b/trafficlight.c @@ -39,54 +39,11 @@ void TimerInit(uint32_t timer, void(*timer_handler)(), uint32_t clk, uint32_t de } void Timer0_Handler() { - TimerIntClear(TIMER0_BASE, TIMER_BOTH); - if(switch_pressed) { - set_tf_color(tf1, RED); - } else { - switch(tf1.cur_color) { - case RED: - tf1.cur_color = GREEN; - set_tf_color(tf1, GREEN); - TimerLoadSet(TIMER0_BASE, TIMER_BOTH, GREEN_PERIOD); - break; - case YELLOW: - tf1.cur_color = RED; - set_tf_color(tf1, RED); - TimerLoadSet(TIMER0_BASE, TIMER_BOTH, RED_PERIOD); - break; - case GREEN: - tf1.cur_color = YELLOW; - set_tf_color(tf1, YELLOW); - TimerLoadSet(TIMER0_BASE, TIMER_BOTH, YELLOW_PERIOD); - break; - } - } + Traffic_Handler(&tf1, TIMER0_BASE); } void Timer1_Handler() { - TimerIntClear(TIMER1_BASE, TIMER_BOTH); - if(switch_pressed) { - set_tf_color(tf2, RED); - } else { - switch(tf2.cur_color) { - case RED: - tf2.cur_color = GREEN; - set_tf_color(tf2, GREEN); - TimerLoadSet(TIMER1_BASE, TIMER_BOTH, GREEN_PERIOD); - break; - case YELLOW: - tf2.cur_color = RED; - set_tf_color(tf2, RED); - TimerLoadSet(TIMER1_BASE, TIMER_BOTH, RED_PERIOD); - break; - case GREEN: - tf2.cur_color = YELLOW; - set_tf_color(tf2, YELLOW); - TimerLoadSet(TIMER1_BASE, TIMER_BOTH, YELLOW_PERIOD); - break; - } - - } + Traffic_Handler(&tf2, TIMER1_BASE); } void Timer2_Handler() { @@ -116,8 +73,6 @@ void Timer2_Handler() { void Switch_Handler() { GPIOIntClear(GPIO_PORTF_BASE, GPIO_PIN_0); switch_pressed = true; - tf1.prevPeriod = TimerValueGet(tf1.port, TIMER_A); - tf2.prevPeriod = TimerValueGet(tf2.port, TIMER_A); TimerDisable(TIMER0_BASE, TIMER_BOTH); TimerDisable(TIMER1_BASE, TIMER_BOTH); set_tf_color(tf1, RED); @@ -145,3 +100,28 @@ void TrafficInit() { __asm("wfi"); // power saving mode } } + +void Traffic_Handler(Traffic *tf, uint32_t timer) { + TimerIntClear(timer, TIMER_BOTH); + if(switch_pressed) { + set_tf_color(*tf, RED); + } else { + switch(tf->cur_color) { + case RED: + tf->cur_color = GREEN; + set_tf_color(*tf, GREEN); + TimerLoadSet(timer, TIMER_BOTH, GREEN_PERIOD); + break; + case YELLOW: + tf->cur_color = RED; + set_tf_color(*tf, RED); + TimerLoadSet(timer, TIMER_BOTH, RED_PERIOD); + break; + case GREEN: + tf->cur_color = YELLOW; + set_tf_color(*tf, YELLOW); + TimerLoadSet(timer, TIMER_BOTH, YELLOW_PERIOD); + break; + } + } +} diff --git a/trafficlight.h b/trafficlight.h index 026bcaa..efc2306 100644 --- a/trafficlight.h +++ b/trafficlight.h @@ -29,6 +29,7 @@ extern uint32_t period_2; extern uint32_t period_3; void TrafficInit(); +void Traffic_Handler(Traffic *tf, uint32_t timer); void set_tf_color(Traffic tf, uint8_t color); void PortInit(uint32_t port, uint32_t clk, uint32_t input, uint32_t output); void TimerInit(uint32_t timer, void(*timer_handler)(), uint32_t clk, uint32_t delay); |
