// hello_launchpad.c #include "TM4C123.h" // Device header #include #include #define UART_FR_TXFF 0x00000020 // UART Transmit FIFO Full #define UART_FR_RXFE 0x00000010 // UART Receive FIFO Empty #define UART_LCRH_WLEN_8 0x00000060 // 8 bit word length #define UART_LCRH_FEN 0x00000010 // UART Enable FIFOs #define UART_CTL_UARTEN 0x201 // UART Enable void GPIO_InIt(void); void ADC1_InIt(void); void ADC1Seq3_Handler(void); void UART0_initialize_115200bps_16MHz(void); unsigned char UART0_RxChar(void); void UART0_TxChar(unsigned char data); unsigned long UART_InUDec(void); int Result; int a,b,c,d,e,f; int main() { SYSCTL->RCGCGPIO |=0x10; // Enable clock for Port E SYSCTL->RCGCADC |=0x01; // Enable Clock for ADC Module 0 GPIO_InIt(); // Initialization of GPIO ADC1_InIt(); // Initialization of ADC UART0_initialize_115200bps_16MHz(); // Initialization of UART UART_InUDec(); // Conversion and ADC performed } void GPIO_InIt(void) { // PE3 int GPIOE->AFSEL |=8; // Enable alternative function GPIOE->DEN &=~8; // Enable Digital Function GPIOE->AMSEL |=8; // Enable Analog Function } void ADC1_InIt(void) { ADC0->ACTSS &=~8; // Disable sample Sequencer 3(SS3) ADC0->EMUX &=~0xF000; // Software Trigger Conversion ADC0->SSMUX3=0; // Get inout from channel 0 ADC0->SSCTL3 |=6; // Take one sample at a time set flat at 1st sample ADC0->ACTSS|=8; // Enable SS3 ADC0->PP|=1; } void ADC1Seq3_Handler(void) { ADC0->PSSI|=8; // Start Conversion at SS3 while((ADC0->RIS &8)==0){} // Wait for conversion complete Result =ADC0->SSFIFO3; // ADC0->ISC=8; } //------------UART_Init------------ // Initialize the UART for 115,200 baud rate (assuming 16 MHz bus clock), // 8 bit word length, no parity bits, one stop bit, FIFOs enabled // Input: none // Output: none void UART0_initialize_115200bps_16MHz(void){ SYSCTL->RCGCUART |= 0x01; // activate UART0 SYSCTL->RCGCGPIO |= 0x01; // activate port A UART0->CTL &= ~UART_CTL_UARTEN; // disable UART UART0->IBRD= 8; // IBRD = int(16,000,000 / (16 * 115,200)) = int(8.680) UART0->FBRD= 44; // FBRD = round(0.5104 * 64 ) = 33 UART0->LCRH=(UART_LCRH_WLEN_8|UART_LCRH_FEN); // 8 bit word length (no parity bits, one stop bit, FIFOs) //0X70 UART0->CTL |= UART_CTL_UARTEN; // enable UART GPIOA->AFSEL |= 0x03; // enable alt funct on PA1-0 GPIOA->DEN |= 0x03; // enable digital I/O on PA1-0 // configure PA1-0 as UART GPIOA->PCTL= (GPIOA->PCTL&0xFFFFFF00)+0x00000011; GPIOA->AMSEL&= ~0x03; // disable analog functionality on PA } //------------UART_InChar------------ // Wait for new serial port input // Input: none // Output: ASCII code for key typed unsigned char UART0_RxChar(void){ while((UART0->FR&UART_FR_RXFE)!= 0); return((unsigned char)(UART0->DR&0xFF)); } //------------UART_OutChar------------ // Output 8-bit to serial port // Input: letter is an 8-bit ASCII character to be transferred // Output: none void UART0_TxChar(unsigned char data){ while((UART0->FR&UART_FR_TXFF) != 0); UART0->DR = data; } // Accept ASCII input in unsigned decimal format, up to 4294967295 // if n>4294967295, it will turncate without format reporting the error unsigned long UART_InUDec(void){ // unsigned long n=0; // this will be the return value // char character; // this is the input ASCII typed while(1){ ADC1Seq3_Handler(); // character=UART0_RxChar(); // accept input a=Result/1000; b=Result%1000; c=b/100; d=b%100; e=d/10; f=d%10; UART0_TxChar(a+48); // out this character UART0_TxChar(c+48); // out this character UART0_TxChar(e+48); // out this character UART0_TxChar(f+48); // out this character UART0_TxChar(32); // out this character // if((character<'0')|| (character>'9')){ // check for non-number // return n; // quit if not a number // } // n= 10*n + (character-0x30); // overflow if above 4294967295 } }