EE445M RTOS
Taken at the University of Texas Spring 2015
adc.c File Reference
#include "adc.h"
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "driverlib/pin_map.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/timer.h"
#include "libhw/hardware.h"
Include dependency graph for adc.c:

Go to the source code of this file.

Functions

void adc_init (hw_metadata metadata)
 
void adc_channel_init (hw_metadata metadata)
 
void adc_interrupt_init (hw_metadata metadata)
 

Function Documentation

void adc_channel_init ( hw_metadata  metadata)

Definition at line 36 of file adc.c.

References hw_metadata::adc, ADCIntEnable(), ADCSequenceConfigure(), ADCSequenceDisable(), ADCSequenceEnable(), ADCSequenceStepConfigure(), hw_adc_metadata::base, hw_adc_metadata::channel, hw_adc_metadata::channel_configuration, hw_adc_metadata::sample_sequence, and hw_adc_metadata::trigger_source.

Referenced by main().

36  {
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 }
uint32_t sample_sequence
Definition: hardware.h:88
memory_address_t base
Definition: hardware.h:86
void ADCIntEnable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:263
uint32_t trigger_source
Definition: hardware.h:87
uint32_t channel
Definition: hardware.h:89
hw_adc_metadata adc
Definition: hardware.h:100
void ADCSequenceEnable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:391
void ADCSequenceDisable(uint32_t ui32Base, uint32_t ui32SequenceNum)
Definition: adc.c:419
void ADCSequenceConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum, uint32_t ui32Trigger, uint32_t ui32Priority)
Definition: adc.c:502
void ADCSequenceStepConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum, uint32_t ui32Step, uint32_t ui32Config)
Definition: adc.c:605
uint32_t channel_configuration
Definition: hardware.h:90

Here is the call graph for this function:

Here is the caller graph for this function:

void adc_init ( hw_metadata  metadata)

Initialize the ADC device on the board

Returns
void

Definition at line 16 of file adc.c.

References hw_metadata::adc, ADC0_BASE, ADC_REF_INT, ADCReferenceSet(), hw_adc_metadata::base, GPIO_PIN_1, GPIO_PIN_2, GPIO_PIN_3, GPIO_PORTE_AHB_BASE, GPIOPinTypeADC(), postpone_death, SYSCTL_PERIPH_ADC0, SYSCTL_PERIPH_GPIOE, SysCtlGPIOAHBEnable(), SysCtlPeripheralEnable(), and SysCtlPeripheralReset().

Referenced by main().

16  {
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 }
void ADCReferenceSet(uint32_t ui32Base, uint32_t ui32Ref)
Definition: adc.c:1634
#define SYSCTL_PERIPH_ADC0
Definition: sysctl.h:63
memory_address_t base
Definition: hardware.h:86
#define GPIO_PORTE_AHB_BASE
Definition: hw_memmap.h:104
#define GPIO_PIN_2
Definition: gpio.h:62
#define GPIO_PIN_1
Definition: gpio.h:61
#define ADC0_BASE
Definition: hw_memmap.h:89
void SysCtlGPIOAHBEnable(uint32_t ui32GPIOPeripheral)
Definition: sysctl.c:3248
#define postpone_death()
Definition: nexus.h:40
void SysCtlPeripheralEnable(uint32_t ui32Peripheral)
Definition: sysctl.c:841
#define GPIO_PIN_3
Definition: gpio.h:63
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 GPIOPinTypeADC(uint32_t ui32Port, uint8_t ui8Pins)
Definition: gpio.c:1081
#define ADC_REF_INT
Definition: adc.h:207

Here is the call graph for this function:

Here is the caller graph for this function:

void adc_interrupt_init ( hw_metadata  metadata)

Definition at line 67 of file adc.c.

References hw_metadata::adc, ADC_TRIGGER_TIMER, ADCIntClear(), hw_timer_metadata::base, hw_adc_metadata::base, hw_channel_init(), hw_init, HW_TIMER, INT_ADC0SS0, IntEnable(), hw_adc_metadata::sample_sequence, adc_trigger_metadata::timer, TIMER_A, TimerControlTrigger(), hw_adc_metadata::trigger_metadata, and hw_adc_metadata::trigger_source.

Referenced by main().

67  {
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 }
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 INT_ADC0SS0
Definition: hw_ints.h:352
hw_timer_metadata timer
Definition: hardware.h:79
#define hw_init(type, metadata)
Definition: hardware.h:143
uint32_t trigger_source
Definition: hardware.h:87
#define TIMER_A
Definition: timer.h:152
memory_address_t base
Definition: hardware.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
hw_adc_metadata adc
Definition: hardware.h:100
#define ADC_TRIGGER_TIMER
Definition: adc.h:65
void hw_channel_init(HW_TYPE type, hw_metadata metadata)
Definition: hardware.c:94
void IntEnable(uint32_t ui32Interrupt)
Definition: interrupt.c:610

Here is the call graph for this function:

Here is the caller graph for this function: