summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Magdy <omar.professional8777@gmail.com>2022-08-23 23:43:02 +0200
committerOmar Magdy <omar.professional8777@gmail.com>2022-08-23 23:43:02 +0200
commit9bebf5f393bbfd51489b4c4e65a066e47e623f1e (patch)
tree9d32a88cad2c8f25902b864383fddd26776d44d5
parent547093d69d001fc6bf90778acc479316149a6fd1 (diff)
downloadTraffic-light-9bebf5f393bbfd51489b4c4e65a066e47e623f1e.tar.xz
Traffic-light-9bebf5f393bbfd51489b4c4e65a066e47e623f1e.zip
Added Traffic_Handler function to apply DRY principle
-rw-r--r--main.c2
-rw-r--r--trafficlight.c74
-rw-r--r--trafficlight.h1
3 files changed, 30 insertions, 47 deletions
diff --git a/main.c b/main.c
index c9c115b..1da8860 100644
--- a/main.c
+++ b/main.c
@@ -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);