.syntax unified
.thumb
.global vectors
.global defaultHandler
.section .isr_vector, "a"
// Lista wektorow przerywan
vectors:
.word _end_stack
.word resetHandler
.word NMI_Handler
.word HardFault_Handler
.word MemManage_Handler
.word BusFault_Handler
.word UsageFault_Handler
.word 0
.word 0
.word 0
.word 0
.word SVC_Handler
.word DebugMon_Handler
.word 0
.word PendSV_Handler
.word SysTick_Handler
.word WWDG_IRQHandler
.word PVD_IRQHandler
.word TAMP_STAMP_IRQHandler
.word RTC_WKUP_IRQHandler
.word FLASH_IRQHandler
.word RCC_IRQHandler
.word EXTI0_IRQHandler
.word EXTI1_IRQHandler
.word EXTI2_IRQHandler
.word EXTI3_IRQHandler
.word EXTI4_IRQHandler
.word DMA1_Stream0_IRQHandler
.word DMA1_Stream1_IRQHandler
.word DMA1_Stream2_IRQHandler
.word DMA1_Stream3_IRQHandler
.word DMA1_Stream4_IRQHandler
.word DMA1_Stream5_IRQHandler
.word DMA1_Stream6_IRQHandler
.word ADC_IRQHandler
.word CAN1_TX_IRQHandler
.word CAN1_RX0_IRQHandler
.word CAN1_RX1_IRQHandler
.word CAN1_SCE_IRQHandler
.word EXTI9_5_IRQHandler
.word TIM1_BRK_TIM9_IRQHandler
.word TIM1_UP_TIM10_IRQHandler
.word TIM1_TRG_COM_TIM11_IRQHandler
.word TIM1_CC_IRQHandler
.word TIM2_IRQHandler
.word TIM3_IRQHandler
.word TIM4_IRQHandler
.word I2C1_EV_IRQHandler
.word I2C1_ER_IRQHandler
.word I2C2_EV_IRQHandler
.word I2C2_ER_IRQHandler
.word SPI1_IRQHandler
.word SPI2_IRQHandler
.word USART1_IRQHandler
.word USART2_IRQHandler
.word USART3_IRQHandler
.word EXTI15_10_IRQHandler
.word RTC_Alarm_IRQHandler
.word OTG_FS_WKUP_IRQHandler
.word TIM8_BRK_TIM12_IRQHandler
.word TIM8_UP_TIM13_IRQHandler
.word TIM8_TRG_COM_TIM14_IRQHandler
.word TIM8_CC_IRQHandler
.word DMA1_Stream7_IRQHandler
.word FSMC_IRQHandler
.word SDIO_IRQHandler
.word TIM5_IRQHandler
.word SPI3_IRQHandler
.word UART4_IRQHandler
.word UART5_IRQHandler
.word TIM6_DAC_IRQHandler
.word TIM7_IRQHandler
.word DMA2_Stream0_IRQHandler
.word DMA2_Stream1_IRQHandler
.word DMA2_Stream2_IRQHandler
.word DMA2_Stream3_IRQHandler
.word DMA2_Stream4_IRQHandler
.word ETH_IRQHandler
.word ETH_WKUP_IRQHandler
.word CAN2_TX_IRQHandler
.word CAN2_RX0_IRQHandler
.word CAN2_RX1_IRQHandler
.word CAN2_SCE_IRQHandler
.word OTG_FS_IRQHandler
.word DMA2_Stream5_IRQHandler
.word DMA2_Stream6_IRQHandler
.word DMA2_Stream7_IRQHandler
.word USART6_IRQHandler
.word I2C3_EV_IRQHandler
.word I2C3_ER_IRQHandler
.word OTG_HS_EP1_OUT_IRQHandler
.word OTG_HS_EP1_IN_IRQHandler
.word OTG_HS_WKUP_IRQHandler
.word OTG_HS_IRQHandler
.word DCMI_IRQHandler
.word CRYP_IRQHandler
.word HASH_RNG_IRQHandler
.word FPU_IRQHandler
.weak NMI_Handler
.thumb_set NMI_Handler, defaultHandler
.weak HardFault_Handler
.thumb_set HardFault_Handler, defaultHandler
.weak MemManage_Handler
.thumb_set MemManage_Handler, defaultHandler
.weak BusFault_Handler
.thumb_set BusFault_Handler, defaultHandler
.weak UsageFault_Handler
.thumb_set UsageFault_Handler, defaultHandler
.weak SVC_Handler
.thumb_set SVC_Handler, defaultHandler
.weak DebugMon_Handler
.thumb_set DebugMon_Handler, defaultHandler
.weak PendSV_Handler
.thumb_set PendSV_Handler, defaultHandler
.weak SysTick_Handler
.thumb_set SysTick_Handler, defaultHandler
.weak WWDG_IRQHandler
.thumb_set WWDG_IRQHandler, defaultHandler
.weak PVD_IRQHandler
.thumb_set PVD_IRQHandler, defaultHandler
.weak TAMP_STAMP_IRQHandler
.thumb_set TAMP_STAMP_IRQHandler, defaultHandler
.weak RTC_WKUP_IRQHandler
.thumb_set RTC_WKUP_IRQHandler, defaultHandler
.weak FLASH_IRQHandler
.thumb_set FLASH_IRQHandler, defaultHandler
.weak RCC_IRQHandler
.thumb_set RCC_IRQHandler, defaultHandler
.weak EXTI0_IRQHandler
.thumb_set EXTI0_IRQHandler, defaultHandler
.weak EXTI1_IRQHandler
.thumb_set EXTI1_IRQHandler, defaultHandler
.weak EXTI2_IRQHandler
.thumb_set EXTI2_IRQHandler, defaultHandler
.weak EXTI3_IRQHandler
.thumb_set EXTI3_IRQHandler, defaultHandler
.weak EXTI4_IRQHandler
.thumb_set EXTI4_IRQHandler, defaultHandler
.weak DMA1_Stream0_IRQHandler
.thumb_set DMA1_Stream0_IRQHandler, defaultHandler
.weak DMA1_Stream1_IRQHandler
.thumb_set DMA1_Stream1_IRQHandler, defaultHandler
.weak DMA1_Stream2_IRQHandler
.thumb_set DMA1_Stream2_IRQHandler, defaultHandler
.weak DMA1_Stream3_IRQHandler
.thumb_set DMA1_Stream3_IRQHandler, defaultHandler
.weak DMA1_Stream4_IRQHandler
.thumb_set DMA1_Stream4_IRQHandler, defaultHandler
.weak DMA1_Stream5_IRQHandler
.thumb_set DMA1_Stream5_IRQHandler, defaultHandler
.weak DMA1_Stream6_IRQHandler
.thumb_set DMA1_Stream6_IRQHandler, defaultHandler
.weak ADC_IRQHandler
.thumb_set ADC_IRQHandler, defaultHandler
.weak CAN1_TX_IRQHandler
.thumb_set CAN1_TX_IRQHandler, defaultHandler
.weak CAN1_RX0_IRQHandler
.thumb_set CAN1_RX0_IRQHandler, defaultHandler
.weak CAN1_RX1_IRQHandler
.thumb_set CAN1_RX1_IRQHandler, defaultHandler
.weak CAN1_SCE_IRQHandler
.thumb_set CAN1_SCE_IRQHandler, defaultHandler
.weak EXTI9_5_IRQHandler
.thumb_set EXTI9_5_IRQHandler, defaultHandler
.weak TIM1_BRK_TIM9_IRQHandler
.thumb_set TIM1_BRK_TIM9_IRQHandler, defaultHandler
.weak TIM1_UP_TIM10_IRQHandler
.thumb_set TIM1_UP_TIM10_IRQHandler, defaultHandler
.weak TIM1_TRG_COM_TIM11_IRQHandler
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler, defaultHandler
.weak TIM1_CC_IRQHandler
.thumb_set TIM1_CC_IRQHandler, defaultHandler
.weak TIM2_IRQHandler
.thumb_set TIM2_IRQHandler, defaultHandler
.weak TIM3_IRQHandler
.thumb_set TIM3_IRQHandler, defaultHandler
.weak TIM4_IRQHandler
.thumb_set TIM4_IRQHandler, defaultHandler
.weak I2C1_EV_IRQHandler
.thumb_set I2C1_EV_IRQHandler, defaultHandler
.weak I2C1_ER_IRQHandler
.thumb_set I2C1_ER_IRQHandler, defaultHandler
.weak I2C2_EV_IRQHandler
.thumb_set I2C2_EV_IRQHandler, defaultHandler
.weak I2C2_ER_IRQHandler
.thumb_set I2C2_ER_IRQHandler, defaultHandler
.weak SPI1_IRQHandler
.thumb_set SPI1_IRQHandler, defaultHandler
.weak SPI2_IRQHandler
.thumb_set SPI2_IRQHandler, defaultHandler
.weak USART1_IRQHandler
.thumb_set USART1_IRQHandler, defaultHandler
.weak USART2_IRQHandler
.thumb_set USART2_IRQHandler, defaultHandler
.weak USART3_IRQHandler
.thumb_set USART3_IRQHandler, defaultHandler
.weak EXTI15_10_IRQHandler
.thumb_set EXTI15_10_IRQHandler, defaultHandler
.weak RTC_Alarm_IRQHandler
.thumb_set RTC_Alarm_IRQHandler, defaultHandler
.weak OTG_FS_WKUP_IRQHandler
.thumb_set OTG_FS_WKUP_IRQHandler, defaultHandler
.weak TIM8_BRK_TIM12_IRQHandler
.thumb_set TIM8_BRK_TIM12_IRQHandler, defaultHandler
.weak TIM8_UP_TIM13_IRQHandler
.thumb_set TIM8_UP_TIM13_IRQHandler, defaultHandler
.weak TIM8_TRG_COM_TIM14_IRQHandler
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler, defaultHandler
.weak TIM8_CC_IRQHandler
.thumb_set TIM8_CC_IRQHandler, defaultHandler
.weak DMA1_Stream7_IRQHandler
.thumb_set DMA1_Stream7_IRQHandler, defaultHandler
.weak FSMC_IRQHandler
.thumb_set FSMC_IRQHandler, defaultHandler
.weak SDIO_IRQHandler
.thumb_set SDIO_IRQHandler, defaultHandler
.weak TIM5_IRQHandler
.thumb_set TIM5_IRQHandler, defaultHandler
.weak SPI3_IRQHandler
.thumb_set SPI3_IRQHandler, defaultHandler
.weak UART4_IRQHandler
.thumb_set UART4_IRQHandler, defaultHandler
.weak UART5_IRQHandler
.thumb_set UART5_IRQHandler, defaultHandler
.weak TIM6_DAC_IRQHandler
.thumb_set TIM6_DAC_IRQHandler, defaultHandler
.weak TIM7_IRQHandler
.thumb_set TIM7_IRQHandler, defaultHandler
.weak DMA2_Stream0_IRQHandler
.thumb_set DMA2_Stream0_IRQHandler, defaultHandler
.weak DMA2_Stream1_IRQHandler
.thumb_set DMA2_Stream1_IRQHandler, defaultHandler
.weak DMA2_Stream2_IRQHandler
.thumb_set DMA2_Stream2_IRQHandler, defaultHandler
.weak DMA2_Stream3_IRQHandler
.thumb_set DMA2_Stream3_IRQHandler, defaultHandler
.weak DMA2_Stream4_IRQHandler
.thumb_set DMA2_Stream4_IRQHandler, defaultHandler
.weak ETH_IRQHandler
.thumb_set ETH_IRQHandler, defaultHandler
.weak ETH_WKUP_IRQHandler
.thumb_set ETH_WKUP_IRQHandler, defaultHandler
.weak CAN2_TX_IRQHandler
.thumb_set CAN2_TX_IRQHandler, defaultHandler
.weak CAN2_RX0_IRQHandler
.thumb_set CAN2_RX0_IRQHandler, defaultHandler
.weak CAN2_RX1_IRQHandler
.thumb_set CAN2_RX1_IRQHandler, defaultHandler
.weak CAN2_SCE_IRQHandler
.thumb_set CAN2_SCE_IRQHandler, defaultHandler
.weak OTG_FS_IRQHandler
.thumb_set OTG_FS_IRQHandler, defaultHandler
.weak DMA2_Stream5_IRQHandler
.thumb_set DMA2_Stream5_IRQHandler, defaultHandler
.weak DMA2_Stream6_IRQHandler
.thumb_set DMA2_Stream6_IRQHandler, defaultHandler
.weak DMA2_Stream7_IRQHandler
.thumb_set DMA2_Stream7_IRQHandler, defaultHandler
.weak USART6_IRQHandler
.thumb_set USART6_IRQHandler, defaultHandler
.weak I2C3_EV_IRQHandler
.thumb_set I2C3_EV_IRQHandler, defaultHandler
.weak I2C3_ER_IRQHandler
.thumb_set I2C3_ER_IRQHandler, defaultHandler
.weak OTG_HS_EP1_OUT_IRQHandler
.thumb_set OTG_HS_EP1_OUT_IRQHandler, defaultHandler
.weak OTG_HS_EP1_IN_IRQHandler
.thumb_set OTG_HS_EP1_IN_IRQHandler, defaultHandler
.weak OTG_HS_WKUP_IRQHandler
.thumb_set OTG_HS_WKUP_IRQHandler, defaultHandler
.weak OTG_HS_IRQHandler
.thumb_set OTG_HS_IRQHandler, defaultHandler
.weak DCMI_IRQHandler
.thumb_set DCMI_IRQHandler, defaultHandler
.weak CRYP_IRQHandler
.thumb_set CRYP_IRQHandler, defaultHandler
.weak HASH_RNG_IRQHandler
.thumb_set HASH_RNG_IRQHandler, defaultHandler
.weak FPU_IRQHandler
.thumb_set FPU_IRQHandler, defaultHandler
.section .text.resetHandler, "ax"
// Ustawiamy stos
resetHandler:
ldr r0, =_end_stack
msr PSP, r0
// Sprawdzamy ile bajtow skopiowac do sekcji data w ram
copyData:
ldr r1, =_start_data
ldr r2, =_end_text
ldr r3, =_end_data
subs r3, r3, r1
beq zeroBSS
// Kopiujemy dane z flash do sekcji data w ram
copyDataLoop:
ldrb r4, [r2], #1
strb r4, [r1], #1
subs r3, r3, #1
bgt copyDataLoop
// Sprawdzamy ile bajtow wyzerowac w sekcji bss w ram
zeroBSS:
ldr r1, =_start_bss
ldr r3, =_end_bss
subs r3, r3, r1
beq callStart
mov r2, #0
// Zerujemy sekcje bss w ram
zeroBSSLoop:
strb r2, [r1], #1
subs r3, r3, #1
bgt zeroBSSLoop
// Wywolujemy funkcje odpowiedzialna za ustawienie zegara i peryferiow
callStart:
mov r0, #0
bl start
// Nieskonczona petla zabezpieczajaca po wyjsci z glownego programu
infiniteLoop:
b .
.section .text.DefaultHandler, "ax"
// Nieskonczona petla obslugujaca uruchomione a nie podpiete przerywania
defaultHandler:
b .