초보의 아웅다웅 설계하기/STM32

APP 에서 BOOT로

로망와니 2025. 2. 13. 22:22

__attribute__( ( naked, noreturn ) ) void BootJumpASM( uint32_t SP, uint32_t RH )
{
  __asm("MSR      MSP,r0");
  __asm("BX       r1");
}

void BootJump(uint32_t *Address)
{
DEBUGPRINT("Boot Jump\r\n");

if( CONTROL_nPRIV_Msk & __get_CONTROL( ) ){  /* not in privileged mode */
}
// 2. NVIC 인터럽트 초기화
for (int i = 0; i < 8; i++) {
NVIC->ICER[i] = 0xFFFFFFFF;
NVIC->ICPR[i] = 0xFFFFFFFF;
}

SysTick->CTRL = 0 ;
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk ;

SCB->SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk | \
 SCB_SHCSR_BUSFAULTENA_Msk | \
 SCB_SHCSR_MEMFAULTENA_Msk ) ;

if( CONTROL_SPSEL_Msk & __get_CONTROL( ) ){  /* MSP is not active */
__set_MSP( __get_PSP( ) ) ;
__set_CONTROL( __get_CONTROL( ) & ~CONTROL_SPSEL_Msk ) ;
}

SCB->VTOR = ( uint32_t )Address ;
BootJumpASM( Address[ 0 ], Address[ 1 ] ) ;
}

 

void main(void)

{

BootJump( ( uint32_t * )IAP_ADDRESS ) ;

}

'초보의 아웅다웅 설계하기 > STM32' 카테고리의 다른 글

[STM32H5]GENERAL TIMER VS ADVANCED TIMER  (0) 2025.02.19
[STM32L031]FLASH 라이팅 문제  (0) 2024.12.20
CRC 8-MAXIM, 16-ARC  (0) 2024.11.21
[STM32L031] RNG 없음  (0) 2024.09.27
[STM32]H5xx 핀 정의  (0) 2024.09.05