EE445M RTOS
Taken at the University of Texas Spring 2015
ctlsysctl.hpp
Go to the documentation of this file.
1 /* -*- mode: c++; c-basic-offset: 4; */
2 /* Created by Hershal Bhave and Eric Crosson on <2015-03-15 Sun> */
3 /* Revision History: Look in Git FGT */
4 #ifndef __ctlsysctl__
5 #define __ctlsysctl__
6 
11 #include "inc/hw_memmap.h"
12 #include "inc/hw_ints.h"
13 
14 #include "driverlib/sysctl.h"
15 #include "driverlib/gpio.h"
16 
17 #include "driverlib/timer.h"
18 
19 #include "criticalpp.hpp"
20 
21 class ctlsys : public critical {
22 public:
24  static void enable_periph(uint32_t sys_periph) {
25  uint32_t periph_base = 0xDEADBEEF;
26  switch(sys_periph) {
27  case GPIO_PORTA_BASE: periph_base = SYSCTL_PERIPH_GPIOA; break;
28  case GPIO_PORTB_BASE: periph_base = SYSCTL_PERIPH_GPIOB; break;
29  case GPIO_PORTC_BASE: periph_base = SYSCTL_PERIPH_GPIOC; break;
30  case GPIO_PORTD_BASE: periph_base = SYSCTL_PERIPH_GPIOD; break;
31  case GPIO_PORTE_BASE: periph_base = SYSCTL_PERIPH_GPIOE; break;
32  case GPIO_PORTF_BASE: periph_base = SYSCTL_PERIPH_GPIOF; break;
33  case GPIO_PORTG_BASE: periph_base = SYSCTL_PERIPH_GPIOG; break;
34  case GPIO_PORTH_BASE: periph_base = SYSCTL_PERIPH_GPIOH; break;
35  case GPIO_PORTJ_BASE: periph_base = SYSCTL_PERIPH_GPIOJ; break;
36  case PWM0_BASE: periph_base = SYSCTL_PERIPH_PWM0; break;
37  case PWM1_BASE: periph_base = SYSCTL_PERIPH_PWM1; break;
38  case CAN0_BASE: periph_base = SYSCTL_PERIPH_CAN0; break;
39  case CAN1_BASE: periph_base = SYSCTL_PERIPH_CAN1; break;
40  default: while(1) {}
41  }
42  uint32_t ui32Status = static_StartCritical();
43  SysCtlPeripheralEnable(periph_base);
44  static_EndCritical(ui32Status);
45  }
46 
47  static uint32_t timer_timeout_from_subtimer(uint32_t subtimer) {
48 
49  uint32_t timeout = 0x0;
50  switch(subtimer) {
51  case TIMER_BOTH:
52  case TIMER_A: timeout = TIMER_TIMA_TIMEOUT; break;
53  case TIMER_B: timeout = TIMER_TIMB_TIMEOUT; break;
54  default: while(1) {}
55  }
56  return timeout;
57  }
58 
59  static uint32_t gpio_pin_to_int(uint32_t pin) {
60  switch(pin) {
61  case GPIO_PIN_0: return GPIO_INT_PIN_0;
62  case GPIO_PIN_1: return GPIO_INT_PIN_1;
63  case GPIO_PIN_2: return GPIO_INT_PIN_2;
64  case GPIO_PIN_3: return GPIO_INT_PIN_3;
65  case GPIO_PIN_4: return GPIO_INT_PIN_4;
66  case GPIO_PIN_5: return GPIO_INT_PIN_5;
67  case GPIO_PIN_6: return GPIO_INT_PIN_6;
68  case GPIO_PIN_7: return GPIO_INT_PIN_7;
69  default: while(1) {}
70  }
71  }
72 
73  static uint32_t periph_to_int(uint32_t periph) {
74  switch(periph) {
75  case GPIO_PORTA_BASE: return INT_GPIOA_TM4C123;
76  case GPIO_PORTB_BASE: return INT_GPIOB_TM4C123;
77  case GPIO_PORTC_BASE: return INT_GPIOC_TM4C123;
78  case GPIO_PORTD_BASE: return INT_GPIOD_TM4C123;
79  case GPIO_PORTE_BASE: return INT_GPIOE_TM4C123;
80  case GPIO_PORTF_BASE: return INT_GPIOF_TM4C123;
81  case GPIO_PORTG_BASE: return INT_GPIOG_TM4C123;
82  case GPIO_PORTH_BASE: return INT_GPIOH_TM4C123;
83  case CAN0_BASE: return INT_CAN0_TM4C123;
84  default: while(1) {}
85  }
86  }
87 
88  static void gpio_int_clear(uint32_t base, uint32_t pin) {
89  uint32_t interrupt = gpio_pin_to_int(pin);
90  GPIOIntClear(base, interrupt);
91  }
92 
93  static void gpio_int_disable(uint32_t base, uint32_t pin) {
94 
95  uint32_t interrupt = gpio_pin_to_int(pin);
96  GPIOIntDisable(base, interrupt);
97  }
98 
99  static void gpio_int_enable(uint32_t base, uint32_t pin, bool clear_int = false) {
100 
101  uint32_t interrupt = gpio_pin_to_int(pin);
102  if (clear_int) {
103  gpio_int_clear(base, interrupt);
104  }
105  GPIOIntEnable(base, interrupt);
106  }
107 
109  static void set_clock(void) {
110  SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
111  SYSCTL_XTAL_16MHZ);
112  }
113 };
114 
115 #endif
116 
117 /* End Doxygen group
118  * @}
119  */
120 
121 /* Local Variables: */
122 /* firestarter: (compile "make -k -j32 -C ~/workspace/ee445m-labs/build/") */
123 /* End: */
static void gpio_int_enable(uint32_t base, uint32_t pin, bool clear_int=false)
Definition: ctlsysctl.hpp:99
static uint32_t gpio_pin_to_int(uint32_t pin)
Definition: ctlsysctl.hpp:59
static void static_EndCritical(uint32_t primask)
Definition: criticalpp.hpp:23
static void gpio_int_disable(uint32_t base, uint32_t pin)
Definition: ctlsysctl.hpp:93
static void gpio_int_clear(uint32_t base, uint32_t pin)
Definition: ctlsysctl.hpp:88
static uint32_t timer_timeout_from_subtimer(uint32_t subtimer)
Definition: ctlsysctl.hpp:47
static void set_clock(void)
Definition: ctlsysctl.hpp:109
static uint32_t static_StartCritical(void)
Definition: criticalpp.hpp:18
static uint32_t periph_to_int(uint32_t periph)
Definition: ctlsysctl.hpp:73
static void enable_periph(uint32_t sys_periph)
Definition: ctlsysctl.hpp:24