Created
October 11, 2012 14:58
-
-
Save scompo/3872971 to your computer and use it in GitHub Desktop.
Stellaris Launchpad serialADC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#****************************************************************************** | |
# | |
# Makefile - Rules for building the serialADC example. | |
# | |
# Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. | |
# Software License Agreement | |
# | |
# Texas Instruments (TI) is supplying this software for use solely and | |
# exclusively on TI's microcontroller products. The software is owned by | |
# TI and/or its suppliers, and is protected under applicable copyright | |
# laws. You may not combine this software with "viral" open-source | |
# software in order to form a larger program. | |
# | |
# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. | |
# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT | |
# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY | |
# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL | |
# DAMAGES, FOR ANY REASON WHATSOEVER. | |
# | |
# This is part of revision 9453 of the EK-LM4F120XL Firmware Package. | |
# | |
#****************************************************************************** | |
# | |
# Defines the part type that this project uses. | |
# | |
PART=LM4F120H5QR | |
# | |
# Set the processor variant. | |
# | |
VARIANT=cm4f | |
# | |
# The base directory for StellarisWare. | |
# | |
ROOT=../../.. | |
# | |
# Include the common make definitions. | |
# | |
include ${ROOT}/makedefs | |
# | |
# Where to find header files that do not live in the source directory. | |
# | |
IPATH=../../.. | |
# | |
# Where to find source files that do not live in this directory. | |
# | |
VPATH=../../../utils | |
# | |
# The default rule, which causes the serialADC example to be built. | |
# | |
all: ${COMPILER} | |
all: ${COMPILER}/serialADC.axf | |
# | |
# The rule to clean out all the build products. | |
# | |
clean: | |
@rm -rf ${COMPILER} ${wildcard *~} | |
# | |
# The rule to create the target directory. | |
# | |
${COMPILER}: | |
@mkdir -p ${COMPILER} | |
# | |
# Rules for building the serialADC example. | |
# | |
${COMPILER}/serialADC.axf: ${COMPILER}/startup_${COMPILER}.o | |
${COMPILER}/serialADC.axf: ${COMPILER}/serialADC.o | |
${COMPILER}/serialADC.axf: ${COMPILER}/uartstdio.o | |
${COMPILER}/serialADC.axf: ${ROOT}/driverlib/${COMPILER}-cm4f/libdriver-cm4f.a | |
${COMPILER}/serialADC.axf: serialADC.ld | |
SCATTERgcc_serialADC=serialADC.ld | |
ENTRY_serialADC=ResetISR | |
CFLAGSgcc=-DTARGET_IS_BLIZZARD_RA1 | |
# | |
# Include the automatically generated dependency files. | |
# | |
ifneq (${MAKECMDGOALS},clean) | |
-include ${wildcard ${COMPILER}/*.d} __dummy__ | |
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* serialADC: send the data from the internal temperature sensor | |
* via uart0 back to a connected PC. | |
* | |
* Author: Mauro Scomparin <[email protected]> | |
* Version: 1.0 | |
* Date: 11/10/2012 | |
*/ | |
#include "inc/hw_memmap.h" | |
#include "inc/hw_types.h" | |
#include "driverlib/adc.h" | |
#include "driverlib/gpio.h" | |
#include "driverlib/sysctl.h" | |
#include "driverlib/debug.h" | |
#include "utils/uartstdio.h" | |
#ifdef DEBUG | |
void__error__(char *pcFilename, unsigned long ulLine){ | |
} | |
#endif | |
#define ADC_SEQUENCER_LENGTH 1 | |
//initializes the adc | |
void initADC(void){ | |
//enable the adc0 peripherial. | |
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); | |
//set the speed to 1msps. | |
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_1MSPS); | |
//set the auto avergage to 64. | |
ADCHardwareOversampleConfigure(ADC0_BASE, 64); | |
//before setting up I must disable the sequence 3. | |
ADCSequenceDisable(ADC0_BASE, 3); | |
//set the sequence to use (adc0 sequence 3). | |
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); | |
//set up the sequence step. | |
//set up the last step and start an interrupt when the conversion it's over. | |
ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); | |
//enable the sequence again! | |
ADCSequenceEnable(ADC0_BASE, 3); | |
} | |
void initConsole(void) | |
{ | |
//enable portA | |
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); | |
//configure the pin multiplexing | |
GPIOPinConfigure(GPIO_PA0_U0RX); | |
GPIOPinConfigure(GPIO_PA1_U0TX); | |
//configure the type of the pins for uart tx/rx | |
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); | |
//init the console | |
UARTStdioInit(0); | |
} | |
//Main entry point for application. | |
int main(void){ | |
//Variable to store the data from the sequencer. | |
unsigned long ulADC0Value[ADC_SEQUENCER_LENGTH]; | |
unsigned long ulTemp_ValueC=0; | |
//Set the system clock to run at 40MHz. | |
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); | |
//I should initialize the adc! | |
initADC(); | |
//init the console for serial use. | |
initConsole(); | |
while(1) | |
{ | |
//clear the interrupt flag | |
ADCIntClear(ADC0_BASE, 3); | |
//trigger the adc conversion process. | |
ADCProcessorTrigger(ADC0_BASE, 3); | |
//wait for the interrupt flag to get set! | |
while(!ADCIntStatus(ADC0_BASE, 3, false)) | |
{ | |
} | |
//get the actual data samples from adc0 sequencer 3! | |
ADCSequenceDataGet(ADC0_BASE, 3, ulADC0Value); | |
//convert the value! | |
ulTemp_ValueC = ((1475 * 1023) - (2250 * ulADC0Value[0])) / 10230;; | |
UARTprintf("Temperature = %3d*C \n\r", ulTemp_ValueC); | |
SysCtlDelay(SysCtlClockGet() / 12); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//***************************************************************************** | |
// | |
// startup_gcc.c - Startup code for use with GNU tools. | |
// | |
// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. | |
// Software License Agreement | |
// | |
// Texas Instruments (TI) is supplying this software for use solely and | |
// exclusively on TI's microcontroller products. The software is owned by | |
// TI and/or its suppliers, and is protected under applicable copyright | |
// laws. You may not combine this software with "viral" open-source | |
// software in order to form a larger program. | |
// | |
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. | |
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT | |
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY | |
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL | |
// DAMAGES, FOR ANY REASON WHATSOEVER. | |
// | |
// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. | |
// | |
//***************************************************************************** | |
#include "inc/hw_nvic.h" | |
#include "inc/hw_types.h" | |
//***************************************************************************** | |
// | |
// Forward declaration of the default fault handlers. | |
// | |
//***************************************************************************** | |
void ResetISR(void); | |
static void NmiSR(void); | |
static void FaultISR(void); | |
static void IntDefaultHandler(void); | |
//***************************************************************************** | |
// | |
// External declaration for the interrupt handler used by the application. | |
// extern void UARTIntHandler(void); | |
//***************************************************************************** | |
//***************************************************************************** | |
// | |
// The entry point for the application. | |
// | |
//***************************************************************************** | |
extern int main(void); | |
//***************************************************************************** | |
// | |
// Reserve space for the system stack. | |
// | |
//***************************************************************************** | |
static unsigned long pulStack[64]; | |
//***************************************************************************** | |
// | |
// The vector table. Note that the proper constructs must be placed on this to | |
// ensure that it ends up at physical address 0x0000.0000. | |
// | |
//***************************************************************************** | |
__attribute__ ((section(".isr_vector"))) | |
void (* const g_pfnVectors[])(void) = | |
{ | |
(void (*)(void))((unsigned long)pulStack + sizeof(pulStack)), | |
// The initial stack pointer | |
ResetISR, // The reset handler | |
NmiSR, // The NMI handler | |
FaultISR, // The hard fault handler | |
IntDefaultHandler, // The MPU fault handler | |
IntDefaultHandler, // The bus fault handler | |
IntDefaultHandler, // The usage fault handler | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
IntDefaultHandler, // SVCall handler | |
IntDefaultHandler, // Debug monitor handler | |
0, // Reserved | |
IntDefaultHandler, // The PendSV handler | |
IntDefaultHandler, // The SysTick handler | |
IntDefaultHandler, // GPIO Port A | |
IntDefaultHandler, // GPIO Port B | |
IntDefaultHandler, // GPIO Port C | |
IntDefaultHandler, // GPIO Port D | |
IntDefaultHandler, // GPIO Port E | |
IntDefaultHandler, // UART0 Rx and Tx | |
IntDefaultHandler, // UART1 Rx and Tx | |
IntDefaultHandler, // SSI0 Rx and Tx | |
IntDefaultHandler, // I2C0 Master and Slave | |
IntDefaultHandler, // PWM Fault | |
IntDefaultHandler, // PWM Generator 0 | |
IntDefaultHandler, // PWM Generator 1 | |
IntDefaultHandler, // PWM Generator 2 | |
IntDefaultHandler, // Quadrature Encoder 0 | |
IntDefaultHandler, // ADC Sequence 0 | |
IntDefaultHandler, // ADC Sequence 1 | |
IntDefaultHandler, // ADC Sequence 2 | |
IntDefaultHandler, // ADC Sequence 3 | |
IntDefaultHandler, // Watchdog timer | |
IntDefaultHandler, // Timer 0 subtimer A | |
IntDefaultHandler, // Timer 0 subtimer B | |
IntDefaultHandler, // Timer 1 subtimer A | |
IntDefaultHandler, // Timer 1 subtimer B | |
IntDefaultHandler, // Timer 2 subtimer A | |
IntDefaultHandler, // Timer 2 subtimer B | |
IntDefaultHandler, // Analog Comparator 0 | |
IntDefaultHandler, // Analog Comparator 1 | |
IntDefaultHandler, // Analog Comparator 2 | |
IntDefaultHandler, // System Control (PLL, OSC, BO) | |
IntDefaultHandler, // FLASH Control | |
IntDefaultHandler, // GPIO Port F | |
IntDefaultHandler, // GPIO Port G | |
IntDefaultHandler, // GPIO Port H | |
IntDefaultHandler, // UART2 Rx and Tx | |
IntDefaultHandler, // SSI1 Rx and Tx | |
IntDefaultHandler, // Timer 3 subtimer A | |
IntDefaultHandler, // Timer 3 subtimer B | |
IntDefaultHandler, // I2C1 Master and Slave | |
IntDefaultHandler, // Quadrature Encoder 1 | |
IntDefaultHandler, // CAN0 | |
IntDefaultHandler, // CAN1 | |
IntDefaultHandler, // CAN2 | |
IntDefaultHandler, // Ethernet | |
IntDefaultHandler, // Hibernate | |
IntDefaultHandler, // USB0 | |
IntDefaultHandler, // PWM Generator 3 | |
IntDefaultHandler, // uDMA Software Transfer | |
IntDefaultHandler, // uDMA Error | |
IntDefaultHandler, // ADC1 Sequence 0 | |
IntDefaultHandler, // ADC1 Sequence 1 | |
IntDefaultHandler, // ADC1 Sequence 2 | |
IntDefaultHandler, // ADC1 Sequence 3 | |
IntDefaultHandler, // I2S0 | |
IntDefaultHandler, // External Bus Interface 0 | |
IntDefaultHandler, // GPIO Port J | |
IntDefaultHandler, // GPIO Port K | |
IntDefaultHandler, // GPIO Port L | |
IntDefaultHandler, // SSI2 Rx and Tx | |
IntDefaultHandler, // SSI3 Rx and Tx | |
IntDefaultHandler, // UART3 Rx and Tx | |
IntDefaultHandler, // UART4 Rx and Tx | |
IntDefaultHandler, // UART5 Rx and Tx | |
IntDefaultHandler, // UART6 Rx and Tx | |
IntDefaultHandler, // UART7 Rx and Tx | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
IntDefaultHandler, // I2C2 Master and Slave | |
IntDefaultHandler, // I2C3 Master and Slave | |
IntDefaultHandler, // Timer 4 subtimer A | |
IntDefaultHandler, // Timer 4 subtimer B | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
0, // Reserved | |
IntDefaultHandler, // Timer 5 subtimer A | |
IntDefaultHandler, // Timer 5 subtimer B | |
IntDefaultHandler, // Wide Timer 0 subtimer A | |
IntDefaultHandler, // Wide Timer 0 subtimer B | |
IntDefaultHandler, // Wide Timer 1 subtimer A | |
IntDefaultHandler, // Wide Timer 1 subtimer B | |
IntDefaultHandler, // Wide Timer 2 subtimer A | |
IntDefaultHandler, // Wide Timer 2 subtimer B | |
IntDefaultHandler, // Wide Timer 3 subtimer A | |
IntDefaultHandler, // Wide Timer 3 subtimer B | |
IntDefaultHandler, // Wide Timer 4 subtimer A | |
IntDefaultHandler, // Wide Timer 4 subtimer B | |
IntDefaultHandler, // Wide Timer 5 subtimer A | |
IntDefaultHandler, // Wide Timer 5 subtimer B | |
IntDefaultHandler, // FPU | |
IntDefaultHandler, // PECI 0 | |
IntDefaultHandler, // LPC 0 | |
IntDefaultHandler, // I2C4 Master and Slave | |
IntDefaultHandler, // I2C5 Master and Slave | |
IntDefaultHandler, // GPIO Port M | |
IntDefaultHandler, // GPIO Port N | |
IntDefaultHandler, // Quadrature Encoder 2 | |
IntDefaultHandler, // Fan 0 | |
0, // Reserved | |
IntDefaultHandler, // GPIO Port P (Summary or P0) | |
IntDefaultHandler, // GPIO Port P1 | |
IntDefaultHandler, // GPIO Port P2 | |
IntDefaultHandler, // GPIO Port P3 | |
IntDefaultHandler, // GPIO Port P4 | |
IntDefaultHandler, // GPIO Port P5 | |
IntDefaultHandler, // GPIO Port P6 | |
IntDefaultHandler, // GPIO Port P7 | |
IntDefaultHandler, // GPIO Port Q (Summary or Q0) | |
IntDefaultHandler, // GPIO Port Q1 | |
IntDefaultHandler, // GPIO Port Q2 | |
IntDefaultHandler, // GPIO Port Q3 | |
IntDefaultHandler, // GPIO Port Q4 | |
IntDefaultHandler, // GPIO Port Q5 | |
IntDefaultHandler, // GPIO Port Q6 | |
IntDefaultHandler, // GPIO Port Q7 | |
IntDefaultHandler, // GPIO Port R | |
IntDefaultHandler, // GPIO Port S | |
IntDefaultHandler, // PWM 1 Generator 0 | |
IntDefaultHandler, // PWM 1 Generator 1 | |
IntDefaultHandler, // PWM 1 Generator 2 | |
IntDefaultHandler, // PWM 1 Generator 3 | |
IntDefaultHandler // PWM 1 Fault | |
}; | |
//***************************************************************************** | |
// | |
// The following are constructs created by the linker, indicating where the | |
// the "data" and "bss" segments reside in memory. The initializers for the | |
// for the "data" segment resides immediately following the "text" segment. | |
// | |
//***************************************************************************** | |
extern unsigned long _etext; | |
extern unsigned long _data; | |
extern unsigned long _edata; | |
extern unsigned long _bss; | |
extern unsigned long _ebss; | |
//***************************************************************************** | |
// | |
// This is the code that gets called when the processor first starts execution | |
// following a reset event. Only the absolutely necessary set is performed, | |
// after which the application supplied entry() routine is called. Any fancy | |
// actions (such as making decisions based on the reset cause register, and | |
// resetting the bits in that register) are left solely in the hands of the | |
// application. | |
// | |
//***************************************************************************** | |
void | |
ResetISR(void) | |
{ | |
unsigned long *pulSrc, *pulDest; | |
// | |
// Copy the data segment initializers from flash to SRAM. | |
// | |
pulSrc = &_etext; | |
for(pulDest = &_data; pulDest < &_edata; ) | |
{ | |
*pulDest++ = *pulSrc++; | |
} | |
// | |
// Zero fill the bss segment. | |
// | |
__asm(" ldr r0, =_bss\n" | |
" ldr r1, =_ebss\n" | |
" mov r2, #0\n" | |
" .thumb_func\n" | |
"zero_loop:\n" | |
" cmp r0, r1\n" | |
" it lt\n" | |
" strlt r2, [r0], #4\n" | |
" blt zero_loop"); | |
// | |
// Enable the floating-point unit. This must be done here to handle the | |
// case where main() uses floating-point and the function prologue saves | |
// floating-point registers (which will fault if floating-point is not | |
// enabled). Any configuration of the floating-point unit using DriverLib | |
// APIs must be done here prior to the floating-point unit being enabled. | |
// | |
// Note that this does not use DriverLib since it might not be included in | |
// this project. | |
// | |
HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & | |
~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | | |
NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); | |
// | |
// Call the application's entry point. | |
// | |
main(); | |
} | |
//***************************************************************************** | |
// | |
// This is the code that gets called when the processor receives a NMI. This | |
// simply enters an infinite loop, preserving the system state for examination | |
// by a debugger. | |
// | |
//***************************************************************************** | |
static void | |
NmiSR(void) | |
{ | |
// | |
// Enter an infinite loop. | |
// | |
while(1) | |
{ | |
} | |
} | |
//***************************************************************************** | |
// | |
// This is the code that gets called when the processor receives a fault | |
// interrupt. This simply enters an infinite loop, preserving the system state | |
// for examination by a debugger. | |
// | |
//***************************************************************************** | |
static void | |
FaultISR(void) | |
{ | |
// | |
// Enter an infinite loop. | |
// | |
while(1) | |
{ | |
} | |
} | |
//***************************************************************************** | |
// | |
// This is the code that gets called when the processor receives an unexpected | |
// interrupt. This simply enters an infinite loop, preserving the system state | |
// for examination by a debugger. | |
// | |
//***************************************************************************** | |
static void | |
IntDefaultHandler(void) | |
{ | |
// | |
// Go into an infinite loop. | |
// | |
while(1) | |
{ | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/****************************************************************************** | |
* | |
* uart_echo.ld - Linker configuration file for uart_echo. | |
* | |
* Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. | |
* Software License Agreement | |
* | |
* Texas Instruments (TI) is supplying this software for use solely and | |
* exclusively on TI's microcontroller products. The software is owned by | |
* TI and/or its suppliers, and is protected under applicable copyright | |
* laws. You may not combine this software with "viral" open-source | |
* software in order to form a larger program. | |
* | |
* THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. | |
* NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT | |
* NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
* A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY | |
* CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL | |
* DAMAGES, FOR ANY REASON WHATSOEVER. | |
* | |
* This is part of revision 9453 of the EK-LM4F120XL Firmware Package. | |
* | |
*****************************************************************************/ | |
MEMORY | |
{ | |
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 | |
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 | |
} | |
SECTIONS | |
{ | |
.text : | |
{ | |
_text = .; | |
KEEP(*(.isr_vector)) | |
*(.text*) | |
*(.rodata*) | |
_etext = .; | |
} > FLASH | |
.data : AT(ADDR(.text) + SIZEOF(.text)) | |
{ | |
_data = .; | |
*(vtable) | |
*(.data*) | |
_edata = .; | |
} > SRAM | |
.bss : | |
{ | |
_bss = .; | |
*(.bss*) | |
*(COMMON) | |
_ebss = .; | |
} > SRAM | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment