EE445M RTOS
Taken at the University of Texas Spring 2015
adc.c
Go to the documentation of this file.
1 /* -*- mode: c; c-basic-offset: 4; -*- */
2 #include "adc.h"
3 
4 #include "inc/hw_memmap.h"
5 #include "inc/hw_ints.h"
6 
7 #include "driverlib/pin_map.h"
8 #include "driverlib/gpio.h"
9 #include "driverlib/sysctl.h"
10 #include "driverlib/adc.h"
11 #include "driverlib/timer.h"
12 
13 #include "libhw/hardware.h"
14 
15 /* TODO: Need to be able to init the adc for any combination of ports and pins */
16 void adc_init(hw_metadata metadata) {
17 
18  /* TODO: determine where the other ADC ports are located */
19  switch(metadata.adc.base) {
20  case ADC0_BASE:
27  break;
28  default:
30  }
31  /* we don't have to set the reference for the internal ADC, but we
32  might if we have an external one. */
34 }
35 
36 void adc_channel_init(hw_metadata metadata) {
37 
38  /* disable the sample sequencer so we can configure it */
39  ADCSequenceDisable(metadata.adc.base, metadata.adc.sample_sequence);
40 
41  /* From TI: Configure step 0 on sequence 3. Sample channel 0
42  (ADC_CTL_CH0) in single-ended mode (default) and configure the
43  interrupt flag (ADC_CTL_IE) to be set when the sample is done.
44  Tell the ADC logic that this is the last conversion on sequence
45  3 (ADC_CTL_END). Sequence 3 has only one programmable step.
46  Sequence 1 and 2 have 4 steps, and sequence 0 has 8
47  programmable steps. Since we are only doing a single
48  conversion using sequence 3 we will only configure step 0. For
49  more information on the ADC sequences and steps, reference the
50  datasheet. */
51  /* TODO: PARAMETRIZE THE OPTIONS */
52  ADCSequenceConfigure(metadata.adc.base, metadata.adc.sample_sequence,
53  metadata.adc.trigger_source, 0);
54 
56  metadata.adc.sample_sequence,
57  metadata.adc.channel,
58  metadata.adc.channel_configuration);
59 
60  ADCIntEnable(metadata.adc.base, metadata.adc.sample_sequence);
61 
62  /* TODO: Parametrize the sequence number */
63  ADCSequenceEnable(metadata.adc.base, metadata.adc.sample_sequence);
64  /* ADCProcessorTrigger(metadata.adc.base, metadata.adc.sample_sequence); */
65 }
66 
68 
69  if (metadata.adc.trigger_source == ADC_TRIGGER_TIMER) {
72  TIMER_A, true);
74 
75  }
76 
77  /* Clear the interrupt status flag. This is done to make sure the
78  interrupt flag is cleared before we sample. */
79  ADCIntClear(metadata.adc.base, metadata.adc.sample_sequence);
81  /* ADCProcessorTrigger(metadata.adc.base, metadata.adc.sample_sequence); */
82 }
void ADCReferenceSet(uint32_t ui32Base, uint32_t ui32Ref)
Definition: adc.c:1634
#define SYSCTL_PERIPH_ADC0
Definition: sysctl.h:63
uint32_t sample_sequence
Definition: hardware.h:88
memory_address_t base
Definition: hardware.h:86
adc_trigger_metadata trigger_metadata
Definition: hardware.h:91
#define GPIO_PORTE_AHB_BASE
Definition: hw_memmap.h:104
#define INT_ADC0SS0
Definition: hw_ints.h:352
hw_timer_metadata timer
Definition: hardware.h:79
#define GPIO_PIN_2
Definition: gpio.h:62
void ADCIntEnable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:263
#define hw_init(type, metadata)
Definition: hardware.h:143
#define GPIO_PIN_1
Definition: gpio.h:61
void adc_channel_init(hw_metadata metadata)
Definition: adc.c:36
uint32_t trigger_source
Definition: hardware.h:87
#define TIMER_A
Definition: timer.h:152
#define ADC0_BASE
Definition: hw_memmap.h:89
void SysCtlGPIOAHBEnable(uint32_t ui32GPIOPeripheral)
Definition: sysctl.c:3248
memory_address_t base
Definition: hardware.h:63
#define postpone_death()
Definition: nexus.h:40
uint32_t channel
Definition: hardware.h:89
void SysCtlPeripheralEnable(uint32_t ui32Peripheral)
Definition: sysctl.c:841
#define GPIO_PIN_3
Definition: gpio.h:63
void ADCIntClear(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:363
void TimerControlTrigger(uint32_t ui32Base, uint32_t ui32Timer, bool bEnable)
Definition: timer.c:464
void SysCtlPeripheralReset(uint32_t ui32Peripheral)
Definition: sysctl.c:762
hw_adc_metadata adc
Definition: hardware.h:100
#define SYSCTL_PERIPH_GPIOE
Definition: sysctl.h:75
void ADCSequenceEnable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:391
void ADCSequenceDisable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:419
#define ADC_TRIGGER_TIMER
Definition: adc.h:65
void ADCSequenceConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum, uint32_t ui32Trigger, uint32_t ui32Priority)
Definition: adc.c:502
void adc_init(hw_metadata metadata)
Definition: adc.c:16
void adc_interrupt_init(hw_metadata metadata)
Definition: adc.c:67
void GPIOPinTypeADC(uint32_t ui32Port, uint8_t ui8Pins)
Definition: gpio.c:1081
void ADCSequenceStepConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum, uint32_t ui32Step, uint32_t ui32Config)
Definition: adc.c:605
void hw_channel_init(HW_TYPE type, hw_metadata metadata)
Definition: hardware.c:94
uint32_t channel_configuration
Definition: hardware.h:90
#define ADC_REF_INT
Definition: adc.h:207
void IntEnable(uint32_t ui32Interrupt)
Definition: interrupt.c:610