Browse Source

update lm4f232 startup files for PDL r8246.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1874 bbd45198-f89e-11dd-88c7-29a3b14d5316
fengzi.rtt 13 years ago
parent
commit
f8afab609a

+ 20 - 3
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
@@ -250,6 +250,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

+ 28 - 6
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
@@ -268,6 +276,20 @@ ResetISR(void)
           "        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.
     //

+ 4 - 10
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

+ 1 - 45
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 = ''