"startup_stm32f429xx.s"파일, 시스템 리셋 기능은 첫째 SystemInit를 호출합니다
1 ; 리셋 핸들러 2 Reset_Handler PROC 3 EXPORT Reset_Handler [WEAK] 4 수입 SystemInit 5 IMPORT __main 6 7 LDR R0 = SystemInit 8 BLX R0 9 LDR R0 = __main 10 BX R0 11 ENDP
SystemInit 함수 정의 :
1 공극 SystemInit은 ( 공극 ) 이 { 3 / * FPU 설정 ------------------------------------- ----------------------- * / 4 의 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) 5 SCB-> CPACR | = (( 3UL << 10 * 2 ) | ( 3UL << 11 * 2 )); / * 설정 CP10와 CP11 전체 액세스 * / 6 #endif 다음 7 / * 기본 리셋 상태 ------------에 RCC 시계 구성 재설정 *를 / 8 / *HSION 비트 설정 * / 9 RCC->를 CR | = (uint32_t) 0x00000001 ; 10 (11) / * 초기화 CFGR 등록 * / 12 RCC-> CFGR = 0x00000000의 ; 13 (14) / * 초기화 HSEON, CSSON 및 PLLON 비트 * / 15 RCC-> 및 CR = (uint32_t) 0xFEF6FFFF ; 16 (17) / * 초기화 PLLCFGR 등록 * / 18 RCC-> PLLCFGR = 0x24003010 ; 19 (20) / * 초기화 HSEBYP 비트 * / 21 RCC-> 및 CR = (uint32_t) 0xFFFBFFFF; 22 (23) / * 모두 해제 인터럽트 * / 24 RCC-> CIR = 0x00000000의 ; 25 26 / * 벡터 테이블 위치를 구성 오프셋 추가 주소 ------------------ * / 27 #ifdef와 VECT_TAB_SRAM 28 SCB-> VTOR = SRAM_BASE | VECT_TAB_OFFSET; / * 내부 SRAM 벡터 표 재배치 * / 29 #else 30 SCB-> VTOR = FLASH_BASE | VECT_TAB_OFFSET; / * 내부 FLASH 벡터 표 재배치 * / 31 #endif 다음 32 }
1. FPU 세트
1 / * FPU 설정 --------------------------------------------- --------------- * / 2 의 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) 3 SCB-> CPACR | = (( 3UL << 10 * 2 ) | ( 3UL << 11 * 2 )); / * 세트 CP10와 CP11 전체 액세스 * / 4 #endif 다음
__FPU_PRESENT가 갖는 프로세서의 여부를 결정하는 데 사용 FPU의 함수
__FPU_USED 사용은 사용 여부를 결정하는 FPU의 함수를
상기 프로세서는 FPU 함수를 결정하고 기능이, FPU 온으로 설정된 경우 "SCB-> CPACR"(코 프로세서 액세스 제어) 레지스터 이다 ~ 20 23 비트는 1이다.
CPACR 사용 레지스터는 활성화 또는 비활성화 FPU 할 수있다. 당신은> CPACR은 SCB-를 통해 액세스 할 수 있습니다. 0의 비트 19-24 31 초 미구현 비트, 예약 비트와 같이
외피 M4 프로세서, 코 프로세서는 FPU (11) 및 (10)로 정의된다. 다른 보조 프로세서가 아니며, 이후에만 CP10와 CP11은 FPU 사용할 수 있습니다. 이 레지스터를 설정할 때, CP10 및 CP11은 동일하게 설정해야합니다.
제로 리셋 후 CP10와 CP11. FPU에이 구성, 낮은 소비 전력 및 허용 사용 전에, FPU를 활성화 할 필요가 금지되고, 본 공정은 일반적 SystemInit 함수 내에서 수행된다.
2. RCC 시계 구성 재설정
1 / * 디폴트 리셋 상태로 ------------ RCC 클럭 구성 초기화 * / 2 / * 설정 HSION 비트 * / 3 RCC->를 CR | = (uint32_t) 0x00000001 ; 4 5 / * 초기화 CFGR 레지스터 * / 6 RCC-> CFGR = 0x00000000의 ; 7 8 / * HSEON, CSSON 재설정 및 PLLON 비트 * / 9 RCC-> 및 CR = (uint32_t) 0xFEF6FFFF ; 10 (11) / * 초기화 PLLCFGR 등록 * / 12 RCC-> PLLCFGR = 0x24003010 ; 13 (14) / * 초기화 HSEBYP 비트 * / 15 RCC-> 및 CR = (uint32_t) 0xFFFBFFFF ; 16 (17) / * 모두 해제 인터럽트 * / 18 RCC-> CIR = 0x00000000의 ;
2.1 RCC-> CR (RCC의 클럭 제어 레지스터) HSION 내부 고속 클럭 설정
2.2 RCC-> CFGR ( RCC의 클록 구성 레지스터)를 클리어
2.3 리셋 RCC-는> CR (RCC 클럭 제어 레지스터) HSEON, CSSON PLLON 비트이고
2.4 리셋 RCC-> PLLCFGR ( RCC를는 PLL의 구성 레지스터 )
2.5> CR (RCC RCC- 클럭 제어 레지스터)이며 HSEBYP 재설정
2.6 모든 인터럽트를 사용하지 않도록 설정
3. 인터럽트 벡터 테이블 주소를 구성
1 / * 오프셋을 추가 벡터 테이블 위치를 구성 ------------------ 어드레스 * / 2 #ifdef와의 VECT_TAB_SRAM 3 SCB-> VTOR SRAM_BASE = | VECT_TAB_OFFSET; / * 내부 SRAM 벡터 표 재배치 * / 4 #else 5 SCB-> VTOR = FLASH_BASE | VECT_TAB_OFFSET; / * 내부 플래시 벡터 표 재배치 * / 6 #endif 다음