Fuck you it works
commit
bad2da32b4
|
@ -0,0 +1,87 @@
|
|||
#******************************************************************************
|
||||
#
|
||||
# Makefile - Rules for building the uart_echo 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=/home/q3k/sware/LM4F120H5QR
|
||||
|
||||
#
|
||||
# Include the common make definitions.
|
||||
#
|
||||
include ${ROOT}/makedefs
|
||||
|
||||
#
|
||||
# Where to find header files that do not live in the source directory.
|
||||
#
|
||||
IPATH=/home/q3k/sware/LM4F120H5QR
|
||||
|
||||
#
|
||||
# The default rule, which causes the uart_echo example to be built.
|
||||
#
|
||||
all: ${COMPILER}
|
||||
all: ${COMPILER}/uart_echo.axf
|
||||
|
||||
flash: all
|
||||
@sudo openocd -f /home/q3k/busblaster.cfg -f /usr/share/openocd/scripts/target/stellaris.cfg --command "init" --command "reset halt" --command "flash write_image erase /home/q3k/hwaw-fw/gcc/uart_echo.bin" --command "reset" --command "exit" || true
|
||||
|
||||
#
|
||||
# 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 uart_echo example.
|
||||
#
|
||||
${COMPILER}/uart_echo.axf: ${COMPILER}/startup_${COMPILER}.o
|
||||
${COMPILER}/uart_echo.axf: ${COMPILER}/uart_echo.o
|
||||
${COMPILER}/uart_echo.axf: ${ROOT}/driverlib/${COMPILER}-cm4f/libdriver-cm4f.a
|
||||
${COMPILER}/uart_echo.axf: uart_echo.ld
|
||||
SCATTERgcc_uart_echo=uart_echo.ld
|
||||
ENTRY_uart_echo=ResetISR
|
||||
CFLAGSgcc=-DTARGET_IS_BLIZZARD_RA1
|
||||
|
||||
#
|
||||
# Include the automatically generated dependency files.
|
||||
#
|
||||
ifneq (${MAKECMDGOALS},clean)
|
||||
-include ${wildcard ${COMPILER}/*.d} __dummy__
|
||||
endif
|
|
@ -0,0 +1,298 @@
|
|||
//*****************************************************************************
|
||||
//
|
||||
// startup_ccs.c - Startup code for use with TI's Code Composer Studio.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//*****************************************************************************
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// 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 reset handler that is to be called when the
|
||||
// processor is started
|
||||
//
|
||||
//*****************************************************************************
|
||||
extern void _c_int00(void);
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// Linker variable that marks the top of the stack.
|
||||
//
|
||||
//*****************************************************************************
|
||||
extern unsigned long __STACK_TOP;
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// External declaration for the interrupt handler used by the application.
|
||||
//
|
||||
//*****************************************************************************
|
||||
extern void UARTIntHandler(void);
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// The vector table. Note that the proper constructs must be placed on this to
|
||||
// ensure that it ends up at physical address 0x0000.0000 or at the start of
|
||||
// the program if located at a start address other than 0.
|
||||
//
|
||||
//*****************************************************************************
|
||||
#pragma DATA_SECTION(g_pfnVectors, ".intvecs")
|
||||
void (* const g_pfnVectors[])(void) =
|
||||
{
|
||||
(void (*)(void))((unsigned long)&__STACK_TOP),
|
||||
// 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
|
||||
UARTIntHandler, // 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
|
||||
};
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// 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)
|
||||
{
|
||||
//
|
||||
// Jump to the CCS C initialization routine. This will enable the
|
||||
// floating-point unit as well, so that does not need to be done here.
|
||||
//
|
||||
__asm(" .global _c_int00\n"
|
||||
" b.w _c_int00");
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// 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)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,349 @@
|
|||
//*****************************************************************************
|
||||
//
|
||||
// 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);
|
||||
extern void Timer0Handler(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
|
||||
UARTIntHandler, // 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
|
||||
Timer0Handler, // 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)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import serial
|
||||
import sys
|
||||
|
||||
s = serial.Serial("/dev/ttyACM0", 115200, timeout=10)
|
||||
|
||||
s.write("r")
|
||||
print s.read()
|
||||
s.write("a" + chr(int(sys.argv[1])))
|
||||
print s.read()
|
|
@ -0,0 +1,340 @@
|
|||
//*****************************************************************************
|
||||
//
|
||||
// uart_echo.c - Example for reading data from and writing data to the UART in
|
||||
// an interrupt driven fashion.
|
||||
//
|
||||
// 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_ints.h"
|
||||
#include "inc/hw_memmap.h"
|
||||
#include "inc/hw_types.h"
|
||||
#include "driverlib/debug.h"
|
||||
#include "driverlib/fpu.h"
|
||||
#include "driverlib/gpio.h"
|
||||
#include "driverlib/interrupt.h"
|
||||
#include "driverlib/pin_map.h"
|
||||
#include "driverlib/rom.h"
|
||||
#include "driverlib/sysctl.h"
|
||||
#include "driverlib/uart.h"
|
||||
#include "driverlib/timer.h"
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
//! \addtogroup example_list
|
||||
//! <h1>UART Echo (uart_echo)</h1>
|
||||
//!
|
||||
//! This example application utilizes the UART to echo text. The first UART
|
||||
//! (connected to the USB debug virtual serial port on the evaluation board)
|
||||
//! will be configured in 115,200 baud, 8-n-1 mode. All characters received on
|
||||
//! the UART are transmitted back to the UART.
|
||||
//
|
||||
//*****************************************************************************
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// The error routine that is called if the driver library encounters an error.
|
||||
//
|
||||
//*****************************************************************************
|
||||
#ifdef DEBUG
|
||||
void
|
||||
__error__(char *pcFilename, unsigned long ulLine)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// The UART interrupt handler.
|
||||
//
|
||||
//*****************************************************************************
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// Send a string to the UART.
|
||||
//
|
||||
//*****************************************************************************
|
||||
void
|
||||
UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
|
||||
{
|
||||
//
|
||||
// Loop while there are more characters to send.
|
||||
//
|
||||
while(ulCount--)
|
||||
{
|
||||
//
|
||||
// Write the next character to the UART.
|
||||
//
|
||||
ROM_UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);
|
||||
}
|
||||
}
|
||||
|
||||
#define DSET_SERVO1 'a'
|
||||
#define DSET_SERVO2 'b'
|
||||
#define DSET_DA 'c'
|
||||
#define DEST_DB 'd'
|
||||
#define DSET_DC 'e'
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef char s8;
|
||||
typedef unsigned int u32;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
u32 Servo1 : 1,
|
||||
Servo2 : 1;
|
||||
struct {
|
||||
u32 A : 1,
|
||||
B : 1,
|
||||
C : 1;
|
||||
} Digital;
|
||||
} NextReceive;
|
||||
u8 Servo1;
|
||||
u8 Servo2;
|
||||
struct {
|
||||
u32 A : 1,
|
||||
B : 1,
|
||||
C : 1;
|
||||
} Digital;
|
||||
} g_OutputControl;
|
||||
|
||||
void CommitState(void)
|
||||
{
|
||||
// F4 = fire
|
||||
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, g_OutputControl.Digital.A ? GPIO_PIN_4 : 0);
|
||||
}
|
||||
|
||||
void ClearNext(void)
|
||||
{
|
||||
g_OutputControl.NextReceive.Servo1 = 0;
|
||||
g_OutputControl.NextReceive.Servo2 = 0;
|
||||
g_OutputControl.NextReceive.Digital.A = 0;
|
||||
g_OutputControl.NextReceive.Digital.B = 0;
|
||||
g_OutputControl.NextReceive.Digital.C = 0;
|
||||
}
|
||||
|
||||
u32 Timer0Counter = 0;
|
||||
void Timer0Handler(void)
|
||||
{
|
||||
ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
|
||||
Timer0Counter++;
|
||||
|
||||
if (Timer0Counter >= 2000)
|
||||
Timer0Counter = 0;
|
||||
|
||||
if (Timer0Counter == 0)
|
||||
{
|
||||
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_PIN_2);
|
||||
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3);
|
||||
}
|
||||
|
||||
if (Timer0Counter == 100 + g_OutputControl.Servo1)
|
||||
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2, 0);
|
||||
|
||||
if (Timer0Counter == 100 + g_OutputControl.Servo2)
|
||||
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0);
|
||||
}
|
||||
|
||||
void
|
||||
UARTIntHandler(void)
|
||||
{
|
||||
unsigned long ulStatus;
|
||||
|
||||
//
|
||||
// Get the interrrupt status.
|
||||
//
|
||||
ulStatus = ROM_UARTIntStatus(UART0_BASE, true);
|
||||
|
||||
//
|
||||
// Clear the asserted interrupts.
|
||||
//
|
||||
ROM_UARTIntClear(UART0_BASE, ulStatus);
|
||||
|
||||
//
|
||||
// Loop while there are characters in the receive FIFO.
|
||||
//
|
||||
while(ROM_UARTCharsAvail(UART0_BASE))
|
||||
{
|
||||
//
|
||||
// Read the next character from the UART and write it back to the UART.
|
||||
//
|
||||
u8 Data = ROM_UARTCharGetNonBlocking(UART0_BASE);
|
||||
u8 Sent = 0;
|
||||
if (g_OutputControl.NextReceive.Digital.A)
|
||||
{
|
||||
g_OutputControl.Digital.A = Data > 0 ? 1 : 0;
|
||||
Sent = 1;
|
||||
}
|
||||
else if (g_OutputControl.NextReceive.Servo1)
|
||||
{
|
||||
g_OutputControl.Servo1 = (Data * 100) / 256;
|
||||
//UARTSend("a", 1);
|
||||
Sent = 1;
|
||||
}
|
||||
else if (g_OutputControl.NextReceive.Servo2)
|
||||
{
|
||||
g_OutputControl.Servo2 = (Data * 100) / 256;
|
||||
//UARTSend("b", 1);
|
||||
Sent = 1;
|
||||
}
|
||||
|
||||
ClearNext();
|
||||
|
||||
if (!Sent)
|
||||
{
|
||||
if (Data == 'a')
|
||||
{
|
||||
g_OutputControl.NextReceive.Servo1 = 1;
|
||||
//UARTSend("A", 1);
|
||||
}
|
||||
else if (Data == 'b')
|
||||
{
|
||||
g_OutputControl.NextReceive.Servo2 = 1;
|
||||
//UARTSend("B", 1);
|
||||
}
|
||||
else if (Data == 'c')
|
||||
{
|
||||
g_OutputControl.NextReceive.Digital.A = 1;
|
||||
}
|
||||
else if (Data == 'r')
|
||||
{
|
||||
UARTSend("R", 1);;
|
||||
}
|
||||
}
|
||||
|
||||
CommitState();
|
||||
|
||||
//
|
||||
// Blink the LED to show a character transfer is occuring.
|
||||
//
|
||||
//GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4);
|
||||
|
||||
//
|
||||
// Delay for 1 millisecond. Each SysCtlDelay is about 3 clocks.
|
||||
//
|
||||
//SysCtlDelay(SysCtlClockGet() / (1000 * 3));
|
||||
|
||||
//
|
||||
// Turn off the LED
|
||||
//
|
||||
//GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// This example demonstrates how to send a string of data to the UART.
|
||||
//
|
||||
//*****************************************************************************
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
// initialize crap
|
||||
g_OutputControl.Servo1 = 0;
|
||||
g_OutputControl.Servo2 = 0;
|
||||
g_OutputControl.Digital.A = 0;
|
||||
g_OutputControl.Digital.B = 0;
|
||||
g_OutputControl.Digital.C = 0;
|
||||
|
||||
g_OutputControl.NextReceive.Servo1 = 0;
|
||||
g_OutputControl.NextReceive.Servo2 = 0;
|
||||
g_OutputControl.NextReceive.Digital.A = 0;
|
||||
g_OutputControl.NextReceive.Digital.B = 0;
|
||||
g_OutputControl.NextReceive.Digital.C = 0;
|
||||
|
||||
//
|
||||
// Enable lazy stacking for interrupt handlers. This allows floating-point
|
||||
// instructions to be used within interrupt handlers, but at the expense of
|
||||
// extra stack usage.
|
||||
//
|
||||
ROM_FPUEnable();
|
||||
ROM_FPULazyStackingEnable();
|
||||
|
||||
//
|
||||
// Set the clocking to run directly from the crystal.
|
||||
//
|
||||
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
|
||||
SYSCTL_XTAL_16MHZ);
|
||||
|
||||
//
|
||||
// Enable the GPIO port that is used for the on-board LED.
|
||||
//
|
||||
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
|
||||
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
|
||||
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
|
||||
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
|
||||
|
||||
//
|
||||
// Enable the GPIO pins for the LED (PF2).
|
||||
//
|
||||
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
|
||||
|
||||
// digital
|
||||
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_4);
|
||||
|
||||
// servos (PA2, PA3)
|
||||
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_2);
|
||||
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_3);
|
||||
|
||||
//
|
||||
// Enable the peripherals used by this example.
|
||||
|
||||
//
|
||||
// Enable processor interrupts.
|
||||
//
|
||||
ROM_IntMasterEnable();
|
||||
|
||||
//
|
||||
// Set GPIO A0 and A1 as UART pins.
|
||||
//
|
||||
GPIOPinConfigure(GPIO_PA0_U0RX);
|
||||
GPIOPinConfigure(GPIO_PA1_U0TX);
|
||||
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
|
||||
|
||||
//
|
||||
// Configure the UART for 115,200, 8-N-1 operation.
|
||||
//
|
||||
ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200,
|
||||
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
|
||||
UART_CONFIG_PAR_NONE));
|
||||
|
||||
ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
|
||||
ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, ROM_SysCtlClockGet() / 100000);
|
||||
|
||||
//
|
||||
// Enable the UART interrupt.
|
||||
//
|
||||
ROM_IntEnable(INT_UART0);
|
||||
ROM_IntEnable(INT_TIMER0A);
|
||||
|
||||
ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
|
||||
ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
|
||||
|
||||
ROM_TimerEnable(TIMER0_BASE, TIMER_A);
|
||||
|
||||
//
|
||||
// Loop forever echoing data through the UART.
|
||||
//
|
||||
while(1)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* 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
|
||||
}
|
Loading…
Reference in New Issue