summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/lm4f232/Libraries/startup/arm/start_rvds.S23
-rw-r--r--bsp/lm4f232/Libraries/startup/gcc/start_gcc.c34
-rw-r--r--bsp/lm4f232/drivers/board.c14
-rw-r--r--bsp/lm4f232/rtconfig.py46
4 files changed, 53 insertions, 64 deletions
diff --git a/bsp/lm4f232/Libraries/startup/arm/start_rvds.S b/bsp/lm4f232/Libraries/startup/arm/start_rvds.S
index 0fa43770f2..6878f7859d 100644
--- a/bsp/lm4f232/Libraries/startup/arm/start_rvds.S
+++ b/bsp/lm4f232/Libraries/startup/arm/start_rvds.S
@@ -19,7 +19,7 @@
; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
; DAMAGES, FOR ANY REASON WHATSOEVER.
;
-; This is part of revision 8049 of the EK-LM4F232 Firmware Package.
+; This is part of revision 8264 of the EK-LM4F232 Firmware Package.
;
;******************************************************************************
@@ -89,7 +89,7 @@ __Vectors
DCD StackMem + Stack ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NmiSR ; NMI Handler
- DCD HardFault_Handler ; Hard Fault Handler
+ DCD HardFault_Handler ; Hard Fault Handler
DCD IntDefaultHandler ; The MPU fault handler
DCD IntDefaultHandler ; The bus fault handler
DCD IntDefaultHandler ; The usage fault handler
@@ -144,7 +144,7 @@ __Vectors
DCD IntDefaultHandler ; CAN0
DCD IntDefaultHandler ; CAN1
DCD IntDefaultHandler ; CAN2
- DCD rt_hw_eth_handler ; Ethernet
+ DCD IntDefaultHandler ; Ethernet
DCD IntDefaultHandler ; Hibernate
DCD IntDefaultHandler ; USB0
DCD IntDefaultHandler ; PWM Generator 3
@@ -251,6 +251,23 @@ __Vectors
EXPORT Reset_Handler
Reset_Handler
;
+ ; 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.
+ ;
+ MOVW R0, #0xED88
+ MOVT R0, #0xE000
+ LDR R1, [R0]
+ ORR R1, #0x00F00000
+ STR R1, [R0]
+
+ ;
; Call the C library enty point that handles startup. This will copy
; the .data section initializers from flash to SRAM and zero fill the
; .bss section.
diff --git a/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c b/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c
index cca7508b50..2742aee7c5 100644
--- a/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c
+++ b/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c
@@ -18,10 +18,13 @@
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
//
-// This is part of revision 8049 of the EK-LM4F232 Firmware Package.
+// This is part of revision 8264 of the EK-LM4F232 Firmware Package.
//
//*****************************************************************************
+#include "inc/hw_nvic.h"
+#include "inc/hw_types.h"
+
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
@@ -32,11 +35,16 @@ static void NmiSR(void);
static void FaultISR(void);
static void IntDefaultHandler(void);
+//*****************************************************************************
+//
+// External declaration for the interrupt handler used by the application.
+//
+//*****************************************************************************
/* RT-Thread interface */
static void HardFault_Handler(void);
static void PendSV_Handler(void);
static void rt_hw_timer_handler(void);
-
+static void rt_hw_uart_isr_1(void);
//*****************************************************************************
//
// The entry point for the application.
@@ -64,7 +72,7 @@ void (* const g_pfnVectors[])(void) =
// The initial stack pointer
ResetISR, // The reset handler
NmiSR, // The NMI handler
- HardFault_Handler, // The hard fault handler
+ HardFault_Handler, // The hard fault handler
IntDefaultHandler, // The MPU fault handler
IntDefaultHandler, // The bus fault handler
IntDefaultHandler, // The usage fault handler
@@ -75,14 +83,14 @@ void (* const g_pfnVectors[])(void) =
IntDefaultHandler, // SVCall handler
IntDefaultHandler, // Debug monitor handler
0, // Reserved
- PendSV_Handler, // The PendSV handler
- rt_hw_timer_handler, // The SysTick handler
+ PendSV_Handler, // The PendSV handler
+ rt_hw_timer_handler, // 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
+ rt_hw_uart_isr_1, // UART0 Rx and Tx
IntDefaultHandler, // UART1 Rx and Tx
IntDefaultHandler, // SSI0 Rx and Tx
IntDefaultHandler, // I2C0 Master and Slave
@@ -269,6 +277,20 @@ ResetISR(void)
" 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();
diff --git a/bsp/lm4f232/drivers/board.c b/bsp/lm4f232/drivers/board.c
index cadb00e5ff..1e4b53f110 100644
--- a/bsp/lm4f232/drivers/board.c
+++ b/bsp/lm4f232/drivers/board.c
@@ -77,17 +77,11 @@ void rt_hw_eth_handler(void)
void rt_hw_board_init()
{
- //
- // The FPU should be enabled because some compilers will use floating-
- // point registers, even for non-floating-point code. If the FPU is not
- // enabled this will cause a fault. This also ensures that floating-
- // point operations could be added to this application and would work
- // correctly and use the hardware floating-point unit. Finally, lazy
- // stacking is enabled for interrupt handlers. This allows floating-
- // point instructions to be used within interrupt handlers, but at the
- // expense of extra stack usage.
//
- FPUEnable();
+ // 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.
+ //
FPULazyStackingEnable();
// set sysclock to 80M
diff --git a/bsp/lm4f232/rtconfig.py b/bsp/lm4f232/rtconfig.py
index 903a5e9281..32abf1f37f 100644
--- a/bsp/lm4f232/rtconfig.py
+++ b/bsp/lm4f232/rtconfig.py
@@ -14,11 +14,8 @@ if CROSS_TOOL == 'gcc':
elif CROSS_TOOL == 'keil':
PLATFORM = 'armcc'
EXEC_PATH = 'E:/Keil'
-elif CROSS_TOOL == 'iar':
- PLATFORM = 'iar'
- IAR_PATH = 'E:/Program Files/IAR Systems/Embedded Workbench 6.0'
-#
+
BUILD = 'debug'
if PLATFORM == 'gcc':
@@ -75,45 +72,4 @@ elif PLATFORM == 'armcc':
POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
-elif PLATFORM == 'iar':
- # toolchains
- CC = 'iccarm'
- AS = 'iasmarm'
- AR = 'iarchive'
- LINK = 'ilinkarm'
- TARGET_EXT = 'out'
-
- DEVICE = ' -D USE_STDPERIPH_DRIVER' + ' -D STM32F10X_HD'
-
- CFLAGS = DEVICE
- CFLAGS += ' --diag_suppress Pa050'
- CFLAGS += ' --no_cse'
- CFLAGS += ' --no_unroll'
- CFLAGS += ' --no_inline'
- CFLAGS += ' --no_code_motion'
- CFLAGS += ' --no_tbaa'
- CFLAGS += ' --no_clustering'
- CFLAGS += ' --no_scheduling'
- CFLAGS += ' --debug'
- CFLAGS += ' --endian=little'
- CFLAGS += ' --cpu=Cortex-M3'
- CFLAGS += ' -e'
- CFLAGS += ' --fpu=None'
- CFLAGS += ' --dlib_config "' + IAR_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
- CFLAGS += ' -Ol'
- CFLAGS += ' --use_c++_inline'
-
- AFLAGS = ''
- AFLAGS += ' -s+'
- AFLAGS += ' -w+'
- AFLAGS += ' -r'
- AFLAGS += ' --cpu Cortex-M3'
- AFLAGS += ' --fpu None'
-
- LFLAGS = ' --config stm32f10x_flash.icf'
- LFLAGS += ' --redirect _Printf=_PrintfTiny'
- LFLAGS += ' --redirect _Scanf=_ScanfSmall'
- LFLAGS += ' --entry __iar_program_start'
- EXEC_PATH = IAR_PATH + '/arm/bin/'
- POST_ACTION = ''