mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
modify for STM32 FW library 3.1.0.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@52 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
1 parent
60e88011e8
commit
6a26038b16
8 files changed
+1224
-930
No files matched your search
@@ -10,6 +10,7 @@
|
||||
; * Change Logs:
|
||||
; * Date Author Notes
|
||||
; * 2009-01-17 Bernard first version
|
||||
; * 2009-09-27 Bernard add protect when contex switch occurs
|
||||
; */
|
||||
|
||||
;/**
|
||||
@@ -53,18 +54,28 @@ rt_hw_interrupt_enable:
|
||||
; * r0 --> from
|
||||
; * r1 --> to
|
||||
; */
|
||||
EXPORT rt_hw_context_switch_interrupt
|
||||
EXPORT rt_hw_context_switch
|
||||
rt_hw_context_switch_interrupt:
|
||||
rt_hw_context_switch:
|
||||
LDR r2, =rt_interrupt_from_thread
|
||||
STR r0, [r2]
|
||||
|
||||
LDR r2, =rt_interrupt_to_thread
|
||||
STR r1, [r2]
|
||||
; set rt_thread_switch_interrput_flag to 1
|
||||
LDR r2, =rt_thread_switch_interrput_flag
|
||||
LDR r3, [r2]
|
||||
CMP r3, #1
|
||||
BEQ _reswitch
|
||||
MOV r3, #1
|
||||
STR r3, [r2]
|
||||
|
||||
LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch)
|
||||
LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread
|
||||
STR r0, [r2]
|
||||
|
||||
_reswitch
|
||||
LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread
|
||||
STR r1, [r2]
|
||||
|
||||
LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch)
|
||||
LDR r1, =NVIC_PENDSVSET
|
||||
STR r1, [r0]
|
||||
CPSIE I ; enable interrupts at processor level
|
||||
BX LR
|
||||
|
||||
; r0 --> swith from thread stack
|
||||
@@ -72,6 +83,16 @@ rt_hw_context_switch:
|
||||
; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack
|
||||
EXPORT rt_hw_pend_sv
|
||||
rt_hw_pend_sv:
|
||||
|
||||
; disable interrupt to protect context switch
|
||||
MRS r2, PRIMASK
|
||||
CPSID I
|
||||
|
||||
; clear rt_thread_switch_interrput_flag to 0
|
||||
LDR r0, =rt_thread_switch_interrput_flag
|
||||
MOV r1, #0x00
|
||||
STR r1, [r0]
|
||||
|
||||
LDR r0, =rt_interrupt_from_thread
|
||||
LDR r1, [r0]
|
||||
CBZ r1, swtich_to_thread ; skip register save at the first time
|
||||
@@ -89,6 +110,9 @@ swtich_to_thread
|
||||
LDMFD r1!, {r4 - r11} ; pop r4 - r11 register
|
||||
MSR psp, r1 ; update stack pointer
|
||||
|
||||
; restore interrupt
|
||||
MSR PRIMASK, r2
|
||||
|
||||
ORR lr, lr, #0x04
|
||||
BX lr
|
||||
|
||||
@@ -119,52 +143,9 @@ rt_hw_context_switch_to:
|
||||
|
||||
; never reach here!
|
||||
|
||||
;/*
|
||||
; * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to)
|
||||
; * {
|
||||
; * if (rt_thread_switch_interrput_flag == 1)
|
||||
; * {
|
||||
; * rt_interrupt_to_thread = to;
|
||||
; * }
|
||||
; * else
|
||||
; * {
|
||||
; * rt_thread_switch_interrput_flag = 1;
|
||||
; * rt_interrupt_from_thread = from;
|
||||
; * rt_interrupt_to_thread = to;
|
||||
; * }
|
||||
; * }
|
||||
; */
|
||||
EXPORT rt_hw_context_switch_interrupt
|
||||
rt_hw_context_switch_interrupt:
|
||||
LDR r2, =rt_thread_switch_interrput_flag
|
||||
LDR r3, [r2]
|
||||
CMP r3, #1
|
||||
BEQ _reswitch
|
||||
MOV r3, #1 ; set rt_thread_switch_interrput_flag to 1
|
||||
STR r3, [r2]
|
||||
LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread
|
||||
STR r0, [r2]
|
||||
_reswitch:
|
||||
LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread
|
||||
STR r1, [r2]
|
||||
BX lr
|
||||
|
||||
; compatible with old version
|
||||
EXPORT rt_hw_interrupt_thread_switch
|
||||
rt_hw_interrupt_thread_switch:
|
||||
LDR r0, =rt_thread_switch_interrput_flag
|
||||
LDR r1, [r0]
|
||||
CBZ r1, _no_switch
|
||||
|
||||
; clear rt_thread_switch_interrput_flag to 0
|
||||
MOV r1, #0x00
|
||||
STR r1, [r0]
|
||||
|
||||
; trigger context switch
|
||||
LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch)
|
||||
LDR r1, =NVIC_PENDSVSET
|
||||
STR r1, [r0]
|
||||
|
||||
_no_switch:
|
||||
BX lr
|
||||
|
||||
END
|
||||
END
|
||||
@@ -0,0 +1,34 @@
|
||||
;/*
|
||||
; * File : context.S
|
||||
; * This file is part of RT-Thread RTOS
|
||||
; * COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||
; *
|
||||
; * The license and distribution terms for this file may be
|
||||
; * found in the file LICENSE in this distribution or at
|
||||
; * http://www.rt-thread.org/license/LICENSE
|
||||
; *
|
||||
; * Change Logs:
|
||||
; * Date Author Notes
|
||||
; * 2009-01-17 Bernard first version
|
||||
; */
|
||||
|
||||
SECTION .text:CODE(2)
|
||||
THUMB
|
||||
REQUIRE8
|
||||
PRESERVE8
|
||||
|
||||
IMPORT rt_hw_hard_fault_exception
|
||||
|
||||
EXPORT rt_hw_hard_fault
|
||||
rt_hw_hard_fault:
|
||||
|
||||
; get current context
|
||||
MRS r0, psp ; get fault thread stack pointer
|
||||
PUSH {lr}
|
||||
BL rt_hw_hard_fault_exception
|
||||
POP {lr}
|
||||
|
||||
ORR lr, lr, #0x04
|
||||
BX lr
|
||||
|
||||
END
|
||||
@@ -12,22 +12,24 @@
|
||||
; * 2009-01-17 Bernard first version
|
||||
; */
|
||||
|
||||
AREA |.text|, CODE, READONLY, ALIGN=2
|
||||
THUMB
|
||||
REQUIRE8
|
||||
PRESERVE8
|
||||
AREA |.text|, CODE, READONLY, ALIGN=2
|
||||
THUMB
|
||||
REQUIRE8
|
||||
PRESERVE8
|
||||
|
||||
IMPORT rt_hw_hard_fault_exception
|
||||
IMPORT rt_hw_hard_fault_exception
|
||||
|
||||
rt_hw_hard_fault PROC
|
||||
EXPORT rt_hw_hard_fault
|
||||
rt_hw_hard_fault PROC
|
||||
EXPORT rt_hw_hard_fault
|
||||
|
||||
; get current context
|
||||
MRS r0, psp ; get fault thread stack pointer
|
||||
BL rt_hw_hard_fault_exception
|
||||
; get current context
|
||||
MRS r0, psp ; get fault thread stack pointer
|
||||
PUSH {lr}
|
||||
BL rt_hw_hard_fault_exception
|
||||
POP {lr}
|
||||
|
||||
ORR lr, lr, #0x04
|
||||
BX lr
|
||||
ORR lr, lr, #0x04
|
||||
BX lr
|
||||
ENDP
|
||||
|
||||
END
|
||||
+587
-586
File diff suppressed because it is too large.
Load diff
@@ -5,7 +5,7 @@
|
||||
#include <rtthread.h>
|
||||
|
||||
/* STM32F10x library definitions */
|
||||
#include <stm32f10x_lib.h>
|
||||
#include <stm32f10x.h>
|
||||
|
||||
#define UART_DMA_RX_DESCRIPTOR 2
|
||||
#define UART_DMA_RX_BUFFER_SIZE 16
|
||||
|
||||
@@ -1,176 +0,0 @@
|
||||
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
|
||||
* File Name : stm32f10x_vector.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V2.0.3
|
||||
* Date : 09/22/2008
|
||||
* Description : STM32F10x vector table for EWARM5.x toolchain.
|
||||
* This module performs:
|
||||
* - Set the initial SP
|
||||
* - Set the initial PC == __iar_program_start,
|
||||
* - Set the vector table entries with the exceptions ISR address,
|
||||
* - Configure external SRAM mounted on STM3210E-EVAL board
|
||||
* to be used as data memory (optional, to be enabled by user)
|
||||
* After Reset the Cortex-M3 processor is in Thread mode,
|
||||
* priority is Privileged, and the Stack is set to Main.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x_lib.h"
|
||||
#include "stm32f10x_it.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
typedef void( *intfunc )( void );
|
||||
typedef union { intfunc __fun; void * __ptr; } intvec_elem;
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Uncomment the following line if you need to use external SRAM mounted on
|
||||
STM3210E-EVAL board as data memory */
|
||||
/* #define DATA_IN_ExtSRAM */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
|
||||
#pragma language=extended
|
||||
#pragma segment="CSTACK"
|
||||
|
||||
void __iar_program_start( void );
|
||||
|
||||
#pragma location = ".intvec"
|
||||
/* STM32F10x Vector Table entries */
|
||||
const intvec_elem __vector_table[] =
|
||||
{
|
||||
{ .__ptr = __sfe( "CSTACK" ) },
|
||||
__iar_program_start,
|
||||
NMIException,
|
||||
HardFaultException,
|
||||
MemManageException,
|
||||
BusFaultException,
|
||||
UsageFaultException,
|
||||
0, 0, 0, 0, /* Reserved */
|
||||
SVCHandler,
|
||||
DebugMonitor,
|
||||
0, /* Reserved */
|
||||
rt_hw_pend_sv,
|
||||
SysTickHandler,
|
||||
WWDG_IRQHandler,
|
||||
PVD_IRQHandler,
|
||||
TAMPER_IRQHandler,
|
||||
RTC_IRQHandler,
|
||||
FLASH_IRQHandler,
|
||||
RCC_IRQHandler,
|
||||
EXTI0_IRQHandler,
|
||||
EXTI1_IRQHandler,
|
||||
EXTI2_IRQHandler,
|
||||
EXTI3_IRQHandler,
|
||||
EXTI4_IRQHandler,
|
||||
DMA1_Channel1_IRQHandler,
|
||||
DMA1_Channel2_IRQHandler,
|
||||
DMA1_Channel3_IRQHandler,
|
||||
DMA1_Channel4_IRQHandler,
|
||||
DMA1_Channel5_IRQHandler,
|
||||
DMA1_Channel6_IRQHandler,
|
||||
DMA1_Channel7_IRQHandler,
|
||||
ADC1_2_IRQHandler,
|
||||
USB_HP_CAN_TX_IRQHandler,
|
||||
USB_LP_CAN_RX0_IRQHandler,
|
||||
CAN_RX1_IRQHandler,
|
||||
CAN_SCE_IRQHandler,
|
||||
EXTI9_5_IRQHandler,
|
||||
TIM1_BRK_IRQHandler,
|
||||
TIM1_UP_IRQHandler,
|
||||
TIM1_TRG_COM_IRQHandler,
|
||||
TIM1_CC_IRQHandler,
|
||||
TIM2_IRQHandler,
|
||||
TIM3_IRQHandler,
|
||||
TIM4_IRQHandler,
|
||||
I2C1_EV_IRQHandler,
|
||||
I2C1_ER_IRQHandler,
|
||||
I2C2_EV_IRQHandler,
|
||||
I2C2_ER_IRQHandler,
|
||||
SPI1_IRQHandler,
|
||||
SPI2_IRQHandler,
|
||||
USART1_IRQHandler,
|
||||
USART2_IRQHandler,
|
||||
USART3_IRQHandler,
|
||||
EXTI15_10_IRQHandler,
|
||||
RTCAlarm_IRQHandler,
|
||||
USBWakeUp_IRQHandler,
|
||||
TIM8_BRK_IRQHandler,
|
||||
TIM8_UP_IRQHandler,
|
||||
TIM8_TRG_COM_IRQHandler,
|
||||
TIM8_CC_IRQHandler,
|
||||
ADC3_IRQHandler,
|
||||
FSMC_IRQHandler,
|
||||
SDIO_IRQHandler,
|
||||
TIM5_IRQHandler,
|
||||
SPI3_IRQHandler,
|
||||
UART4_IRQHandler,
|
||||
UART5_IRQHandler,
|
||||
TIM6_IRQHandler,
|
||||
TIM7_IRQHandler,
|
||||
DMA2_Channel1_IRQHandler,
|
||||
DMA2_Channel2_IRQHandler,
|
||||
DMA2_Channel3_IRQHandler,
|
||||
DMA2_Channel4_5_IRQHandler,
|
||||
};
|
||||
|
||||
#ifdef DATA_IN_ExtSRAM
|
||||
#pragma language=extended
|
||||
|
||||
__interwork int __low_level_init(void);
|
||||
|
||||
#pragma location="ICODE"
|
||||
__interwork int __low_level_init(void)
|
||||
{
|
||||
|
||||
/* FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is
|
||||
required, then adjust the Register Addresses*/
|
||||
|
||||
/* Enable FSMC clock */
|
||||
*(vu32 *)0x40021014 = 0x00000114;
|
||||
|
||||
/* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */
|
||||
*(vu32 *)0x40021018 = 0x000001E0;
|
||||
|
||||
/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/
|
||||
/*---------------- SRAM Address lines configuration -------------------------*/
|
||||
/*---------------- NOE and NWE configuration --------------------------------*/
|
||||
/*---------------- NE3 configuration ----------------------------------------*/
|
||||
/*---------------- NBL0, NBL1 configuration ---------------------------------*/
|
||||
|
||||
*(vu32 *)0x40011400 = 0x44BB44BB;
|
||||
*(vu32 *)0x40011404 = 0xBBBBBBBB;
|
||||
|
||||
*(vu32 *)0x40011800 = 0xB44444BB;
|
||||
*(vu32 *)0x40011804 = 0xBBBBBBBB;
|
||||
|
||||
*(vu32 *)0x40011C00 = 0x44BBBBBB;
|
||||
*(vu32 *)0x40011C04 = 0xBBBB4444;
|
||||
|
||||
*(vu32 *)0x40012000 = 0x44BBBBBB;
|
||||
*(vu32 *)0x40012004 = 0x44444B44;
|
||||
|
||||
/*---------------- FSMC Configuration ---------------------------------------*/
|
||||
/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/
|
||||
|
||||
*(vu32 *)0xA0000010 = 0x00001011;
|
||||
*(vu32 *)0xA0000014 = 0x00000200;
|
||||
|
||||
|
||||
return (1);
|
||||
}
|
||||
#endif /*DATA_IN_ExtSRAM*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
+120
-103
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user