/* * This program sets up ADC0 Sample Sequener 0 to convert * channel 0 and writes the conversion result to the LEDs. * Analog channel 0 uses PORTE 3 pin and is connected to * a potentiometer on the Digilent Orbit BoosterPack. * The LEDs are connected to the MCU as: * LD1 PC6 * LD2 PC7 * LD3 PD6 * LD4 PB5 */ #include "TM4C123GH6PM.h" void delayMs(int n); int main(void) { int sample; SYSCTL->RCGCGPIO |= 0x1E; // enable clock to GPIOB, GPIOC, GPIOD, GPIOE SYSCTL->RCGCADC |= 1; // enable clock to ADC0 // initialize port pin PE3 for ADC0 input GPIOE->AFSEL |= 0x04; // enable alternate function GPIOE->DEN &= ~0x04; // disable digital function GPIOE->AMSEL |= 0x04; // enable analog function // initialize ADC0 Sample Sequencer 0 ADC0->ACTSS &= ~1; // disable ADC0 sequencer 0 during configuration ADC0->EMUX &= ~0x000F; // software trigger for sequencer 0 ADC0->SSMUX0 &= ~0xFFFFFFFF; // clear channel selects first ADC0->SSMUX0 |= 0x00000000; // set channel 0 for first and only sample ADC0->SSCTL0 |= 0x00000006; // finish sequence at 1st sample and post RIS bit ADC0->ACTSS |= 1; // enable ADC0 sequencer 0 // configure output pins GPIOC->DIR |= 0xC0; // set PORTC 7, 6 as output pins GPIOC->DEN |= 0xC0; // set PORTC 7, 6 as digital pins GPIOD->DIR |= 0x40; // set PORTD 6 as output pins GPIOD->DEN |= 0x40; // set PORTD 6 as digital pins GPIOB->DIR |= 0x20; // set PORTB 5 as output pins GPIOB->DEN |= 0x20; // set PORTB 5 as digital pins while(1) { ADC0->PSSI |= 1; // start a conversion at sequencer 0 while((ADC0->RIS & 1) == 0) ; // wait for conversion sequence complete sample = ADC0->SSFIFO0; // read conversion result from FIFO ADC0->ISC = 1; // clear completion flag GPIOB->DATA = sample >> 8; // write the most significant 4 bits of the sample to LEDs if(sample & 0x100) // use bit 8 of conversion result to set LD1 GPIOC->DATA |= 0x40; else GPIOC->DATA &= ~0x40; if(sample & 0x200) // use bit 9 of conversion result to set LD2 GPIOC->DATA |= 0x80; else GPIOC->DATA &= ~0x80; if(sample & 0x400) // use bit 10 of conversion result to set LD3 GPIOD->DATA |= 0x40; else GPIOD->DATA &= ~0x40; if(sample & 0x800) // use bit 11 of conversion result to set LD4 GPIOB->DATA |= 0x20; else GPIOB->DATA &= ~0x20; delayMs(100); } } // delay n milliseconds (16 MHz CPU clock) void delayMs(int n) { int i, j; for(i = 0 ; i < n; i++) for(j = 0; j < 3180; j++) {} // do nothing for 1 ms } // This function is called by the startup assembly // code to perform system specific initialization tasks. void SystemInit(void) { // Grant coprocessor access // This is required since TM4C123G has // a floating point coprocessor SCB->CPACR |= 0x00f00000; }