здрасьте здрасьте люди добрые. нужен пример внешнего прерывания для stm32f103c8. денег немного, но 300р смогу скинуть. если у кого-то есть время, то напишите пожалуйста пример на ассемблере. нужно просто чтобы при замыкании PA9 с GND загорался, к примеру, светодиод на PC13. пожалуйста понимайте, что я даже не программист, и пример мне нужен чтобы разобраться. поэтому код хотелось бы простой с акцентом на понятность, а не на красоту(это я написал чтобы вы даже не стеснялись написать фигню, главное чтобы работало). если планируете использовать TIM то пожалуйста TIM1. PA9 не принципиально. Можно PA8 или PA7. что вспомнил из пинов то и написал вобщем. огромное мерси кто откликнется можно преобразовать этот код
.syntax unified
.cpu cortex-m3
.thumb
RCC_APB2ENR = 0x40021018
GPIOC_CRH =0x40010804
TIM1_CR1 = 0x40012c00
TIM_CR1_URS = (1 << 2)
TIM_CR1_CEN = (1 << 0)
TIM1_PSC = 0x40012c28
TIM1_ARR = 0x40012c2c
TIM1_DIER = 0x40012c0c
TIM_DIER_UIE = (1 << 0)
TIM1_EGR = 0x40012c14
TIM_EGR_UG = (1 << 0)
NVIC_ISER0 = 0xe000e100
TIM1_UP = (1 << 25)
TIM1_SR = 0x40012c10
TIM_SR_UIF = (1 << 0)
GPIOC_ODR =0x4001080C
.text
.word 0x20005000
.word _start + 1
.space 0x9c
.word TIM1_UP_isr + 1
.global _start
_start:
//ldr r0, =RCC_APB2ENR
ldr r0, =0x40021018
ldr r1, =0b00000000000000000000100000000101 //enable TIM1, AFIOEN, IOPAEN
str r1, [r0]
ldr r0, =GPIOC_CRH
ldr r1, =0b00000000000000000000000000001001 //eanble Alternate function output Push-pull 10 MHZ
str r1, [r0]
ldr r0, =TIM1_CR1
ldr r1, =TIM_CR1_URS
str r1, [r0]
ldr r0, =TIM1_PSC
ldr r1, =1000
str r1, [r0]
ldr r0, =TIM1_ARR
ldr r1, =1000
str r1, [r0]
ldr r0, =TIM1_DIER
ldr r1, =TIM_DIER_UIE
str r1, [r0]
ldr r0, =TIM1_EGR
ldr r1, =TIM_EGR_UG
str r1, [r0]
ldr r0, =0x40012C44
ldr r1, =0b00000000000000001100000000000000 //eanble MOE and AOE
str r1, [r0]
ldr r0, =0x40012C20
ldr r1, =0b00000000000000000000000000000001 //enable CC1E
str r1, [r0]
ldr r0, =0x40012C18
ldr r1, =0b0000000000000000000000000111000
str r1, [r0]
ldr r0, =TIM1_CR1
ldr r1, =TIM_CR1_CEN
str r1, [r0]
ldr r0, =NVIC_ISER0
ldr r1, =0b00000010000000000000000000000000 //установил 25Бит в единицу.
str r1, [r0]
loop:
b loop
TIM1_UP_isr:
ldr r0, =TIM1_SR
ldr r1, [r0]
bic r1, #TIM_SR_UIF
str r1, [r0]
ldr r0, =GPIOC_ODR
ldr r1, [r0]
eor r1, #(1 << 8)
str r1, [r0]
bx lr