I have written this code to sample a potentiometer with Pin E1 using ADC1 with sequencer 3
I used IAR Embedded Workbench IDE
The program works fine in the debugger mode but not in the normal after I reset.
I used CMSIS
The code for main.c
/***********************************************************************
#include <LM4F120H5QR.h>
volatile static uint32_t adcResult = 0;
void ADC1SS3_Handler(void)
{
adcResult = ADC1->SSFIFO3;
ADC1->ISC = (1<<3);
}
int main()
{
SYSCTL->RCGCADC |= (1<<1);
SYSCTL->RCGCGPIO |= (1<<4);
SYSCTL->RCGCGPIO |= (1<<5);
GPIOF->DEN |= (7<<1);
GPIOF->AFSEL &= ~(7<<1);
GPIOF->AMSEL &= ~(7<<1);
GPIOF->DIR |= (7<<1);
GPIOE->DIR |= (1<<1);
GPIOE->AFSEL |= (1<<1);
GPIOE->AMSEL |= (1<<1);
GPIOE->DEN &= ~(1<<1);
ADC1->ACTSS &= ~(1<<3);
for(long x = 800000; x > 0; x--){} GPIOF->DATA &= ~(1<<1);
ADC1->EMUX = (0xF << 12);
for(long x = 800000; x > 0; x--){}GPIOF->DATA |= (1<<1);
ADC1->SSMUX3 = 2;
for(long x = 800000; x > 0; x--){}GPIOF->DATA &= ~(7<<1);
ADC1->SSCTL3 = 0x6;
for(long x = 800000; x > 0; x--){}GPIOF->DATA |= (1<<2);
ADC1->IM = (1<<3);
for(long x = 800000; x > 0; x--){}GPIOF->DATA &= ~(7<<1);
ADC1->ACTSS |= (1<<3);
for(long x = 800000; x > 0; x--){}GPIOF->DATA |= (1<<3);
ADC1->ISC = (1<<3);
for(long x = 800000; x > 0; x--){}GPIOF->DATA &= ~(7<<1);
NVIC->ISER[1] |= (1<<19);
for(long x = 800000; x > 0; x--){}GPIOF->DATA |= (1<<1);
for(long x = 800000; x > 0; x--){}
while(1)
{
if(adcResult > 2047)
{
GPIOF->DATA |= (1<<1);
}
else
{
GPIOF->DATA &= ~(1<<1);
}
}
return 0;
}
*******************************************************************************/
code for cstartup_M.c
/*******************************************************************************
/**************************************************
*
* This file contains an interrupt vector for Cortex-M written in C.
* The actual interrupt functions must be provided by the application developer.
*
* Copyright 2007 IAR Systems. All rights reserved.
*
* $Revision: 66254 $
*
**************************************************/
#pragma language=extended
#pragma segment="CSTACK"
extern void __iar_program_start( void );
extern void NMI_Handler( void );
extern void HardFault_Handler( void );
extern void MemManage_Handler( void );
extern void BusFault_Handler( void );
extern void UsageFault_Handler( void );
extern void SVC_Handler( void );
extern void DebugMon_Handler( void );
extern void PendSV_Handler( void );
extern void SysTick_Handler( void );
extern void ADC1SS3_Handler( void);
typedef void( *intfunc )( void );
typedef union { intfunc __fun; void * __ptr; } intvec_elem;
#pragma location = ".intvec"
const intvec_elem __vector_table[] =
{
{ .__ptr = __sfe( "CSTACK" ) },
__iar_program_start,
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
0,
0,
0,
0,
SVC_Handler,
DebugMon_Handler,
0,
PendSV_Handler,
SysTick_Handler,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
ADC1SS3_Handler
};
#pragma call_graph_root = "interrupt"
__weak void NMI_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void HardFault_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void MemManage_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void BusFault_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void UsageFault_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void SVC_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void DebugMon_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void PendSV_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void SysTick_Handler( void ) { while (1) {} }
#pragma call_graph_root = "interrupt"
__weak void ADC1SS3_Handler( void ) { while (1) {} }
void __cmain( void );
__weak void __iar_init_core( void );
__weak void __iar_init_vfp( void );
#pragma required=__vector_table
void __iar_program_start( void )
{
__iar_init_core();
__iar_init_vfp();
__cmain();
}
**************************************************/