LINUX.ORG.RU

внешние прерывания

 


0

1

здрасьте здрасьте люди добрые. нужен пример внешнего прерывания для 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



Последнее исправление: Assembler (всего исправлений: 1)

Ответ на: комментарий от apt_install_lrzsz
.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

Это прям в теме ТСа. Тут ему все понятно и он просит немного модефицировать код для внешнего прерывания. Вроде несложно понять что хочет ТС даже для меня. Но я не смог освоить микроконтроллеры. Поэтому тусую в его темах и также жду примеров. Он сам меня позвал и сказал смотри в моих темах. Если проще то я ничего не понимаю но понимаю что хочет ТС.

Stierlitz_
()
Последнее исправление: Stierlitz_ (всего исправлений: 2)
Ответ на: комментарий от Assembler

Теперь я понимаю о чем ты говорил. Даже не знаю нужна ли мне помощь такая форумчан какую они оказывают тебе. Но за приглашение спасибо.

Stierlitz_
()
Последнее исправление: Stierlitz_ (всего исправлений: 1)
Ответ на: комментарий от Stierlitz_

Пойми одну простую вещь, которую ТС понять вообще не способен. На этом форуме вообще и близко нет ни одного человека, который бы мог сходу с нуля написать прошивку МК на языке ассемблера. Никому это не нужно, и никогда нужно не будет. В таких простых вопросах, как настроить таймер или GPIO никто вообще сейчас не полагается на ассемблер. Все местные «крутые спецы» это делают с использованием си по той простой причине, что ассемблер не нужен. Это как ходить в магазин за продуктами на четвереньках будучи одетым в шкуру. Можно, но никому не упало. Поэтому простых примеров, которые ТС хочет, тут никогда не будет.

Если хочешь получить знания по МК, то не ходи в темы ТСа. Полезные знания тут сильно разбавлены всяким тупняком. Лучше создавай собственные темы с конкретными вопросами. И лучше не тут, а на профильных форумах. Типа изиэлектрониксов всяких.

ТС же всей своей деятельностью полностью избавил свои темы от хоть сколь-нибудь полезных новичку ответов.

apt_install_lrzsz ★★★
()

нужно просто чтобы при замыкании PA9 с GND загорался, к примеру, светодиод на PC13

Так подойдёт ?

.syntax unified
.cpu cortex-m3
.thumb

RCC_APB2ENR = 0x40021018
RCC_APB2ENR_AFIOEN = (1 << 0)
RCC_APB2ENR_IOPAEN = (1 << 2)
RCC_APB2ENR_IOPCEN = (1 << 4)

GPIOA_CRH = 0x40010804
GPIOA_BSRR = 0x40010810

GPIOC_CRH = 0x40011004
GPIOC_ODR = 0x4001100c

AFIO_EXTICR3 = 0x40010010

EXTI_IMR = 0x40010400
EXTI_FTSR = 0x4001040c
EXTI_PR = 0x40010414

NVIC_ISER0 = 0xe000e100

.text
	.word   0x20002000
	.word   _start + 1
	.space  0x94
	.word   EXTI9_5_isr + 1

.global _start
_start:
	ldr    r0, =RCC_APB2ENR
	ldr    r1, [r0]
	orr    r1, #(RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN)
	str    r1, [r0]

	ldr    r0, =GPIOA_CRH
	ldr    r1, [r0]
	and    r1, #0xFFFFFF0F
	orr    r1, #0x00000080
	str    r1, [r0]

	ldr    r0, =GPIOA_BSRR
	ldr    r1, =(1 << 9)
	str    r1, [r0]

	ldr    r0, =GPIOC_CRH
	ldr    r1, [r0]
	and    r1, #0xFF0FFFFF
	orr    r1, #0x00100000
	str    r1, [r0]

	ldr    r0, =GPIOC_ODR
	ldr    r1, [r0]
	orr    r1, #(1 << 13)
	str    r1, [r0]

	ldr    r0, =AFIO_EXTICR3
	ldr    r1, [r0]
	and    r1, #0xFFfFFF0F
	str    r1, [r0]

	ldr    r0, =EXTI_FTSR
	ldr    r1, [r0]
	orr    r1, #(1 << 9)
	str    r1, [r0]

	ldr    r0, =EXTI_PR
	ldr    r1, =0xFFFFF
	str    r1, [r0]

	ldr    r0, =EXTI_IMR
	ldr    r1, =(1 << 9)
	str    r1, [r0]

	ldr    r0, =NVIC_ISER0
	ldr    r1, =(1 << 23)
	str    r1, [r0]

	dsb

loop:
	wfi
	b loop

.global EXTI9_5_isr
EXTI9_5_isr:
	ldr    r0, =EXTI_PR
	ldr    r1, =(1 << 9)
	str    r1, [r0]

	ldr    r0, =GPIOC_ODR
	ldr    r1, [r0]
	eor    r1, #(1 << 13)
	str    r1, [r0]

	bx lr
anonymous
()
Ответ на: комментарий от Stierlitz_

Даже не знаю нужна ли мне помощь такая форумчан какую они оказывают тебе.

Разумеется, нет. Но ТС сам заслужил такую «помощь» воинственным нежеланием учиться.

Если вы не являетесь его собратом по разуму и действительно хотите научиться программировать контроллеры, то не полагайтесь на форум. Читайте datasheet, reference manual и статьи в интернете. Если что-то не получается, не побирайтесь как ТС (и его одногруппник) по форумам, а сначала поищите самостоятельно.

Готового кода по основам STM уже полно, нет объективной причины создавать подобные темы на форумах. Создавать темы стоит по чему-то менее очевидному… по которому уже не найдется людей, с этим сталкивавшемся.

Но при наличии способности учиться (именно то, чего не хватает ТСу) такие проблемы удается решить и без посторонней помощи, руководствуясь туманными намеками и предположениями.

COKPOWEHEU
()
Ответ на: комментарий от anonymous

Если это сработает (а мне, увы, проверить не на чем - у меня нет F103), то признаю, что был глубоко не прав, мимопроходящий анонимус - самый полезный участник этого ресурса, а ЛОР мёртв.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от COKPOWEHEU

Хорошо. Тогда справедливости ради вот есть я. Изучал Си сам. Ни о чем не спрашивал. Смотрел ролики на ютуб. И вот случилось что застрял тогда когда не знал с чего начать. Задал вопрос на форуме. И что? Тонна бреда и не одного совета по делу. Зайди почитай. Пытался настроить куб для Си. Ему вы кричите ставь куб! Мне кричали сноси куб пиши так. Это я уже увидел когда прошелся по темам этого ТСа. Я выкинул к херам микроконтроллер и понял что вы за люди. И кстати где этот клоун побирается? Он просит за имеющиеся копейки. Я не такой как он поэтому скажу тебе прямо что не желаю ни просить ни беседовать с тобой. Будешь надоедать последую примеру местных стукачей.

Stierlitz_
()
Ответ на: комментарий от anonymous

щас не могу проверить. но пожалуйста напишите номер карты. только давайте без гусарства. просто напишите и все. если код вдруг не будет работать то попрошу вас пожалуйста помочь после разобраться почему. вот и все) так что пишите и спасибо что откликнулись

Assembler
() автор топика
Ответ на: комментарий от Stierlitz_

Я вроде как видел ту тему. Нагадили там знатно. Микроконтроллер зря выкинул. На профильном форуме тебе бы нормально пояснили, с чего начинать. Если что-то интересно по этому направлению, напиши. Я поясню, что знаю, без троллинга и тупняка.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от Assembler

Посмотрел почти все твои темы про микроконтроллеры. Если прям поверхностно то все вроде понятно. Поэтому если ты непротив то я отдам автору кода за тебя 300р. Потому что чувствую что воспользуюсь всеми этими подсказками. Как раз у меня от жены была небольшая заначка ее хватит на программатор и контроллер и остается почти нужная сумма.

Stierlitz_
()
Ответ на: комментарий от Stierlitz_

Штырлиц не тупи. Создай отдельую тему, где будут флудить.

anonymous
()
Ответ на: комментарий от Stierlitz_

И вот случилось что застрял тогда когда не знал с чего начать. Задал вопрос на форуме. И что? Тонна бреда и не одного совета по делу.

Совершенно логичная реакция. Нет конкретного вопроса - нет конкретного ответа.

Зайди почитай.

Киньте ссылку. Лопатить ваш профиль в попытках угадать что же вы имели в виду желания нет.

Пытался настроить куб для Си. Ему вы кричите ставь куб!

Не надо врать! Я никогда и никому не советовал ставить Куб - для обучения он вреден, для использования почти бесполезен. Единственное для чего годится - проверить какую-то конкретную периферию из скромного набора.

И кстати где этот клоун побирается?

Здесь, на ЛОРе, очевидно же. Думать самостоятельно он отказывается, читать документацию тоже. Что никто не хочет работать клоуном за 100р и выполнять его дурацкие фантазии - не удивительно. Хочет учиться - пусть учится. Хочет страдать ерундой… ну, пока это терпят.

Я не такой как он поэтому скажу тебе прямо что не желаю ни просить ни беседовать с тобой.

Да на здоровье. Готового кода по элементарным вопросам ни вы, ни ТС, ни его одногруппник от меня все равно не получите. По крайней мере пока не докажете, что действительно пытаетесь учиться.

А посылать его в документацию (в котор6ой его вопросы действительно описаны) правила не запрещают. Как и пытаться его научить вместо вредительства вроде выдачи готового кода.

COKPOWEHEU
()
Ответ на: комментарий от Stierlitz_

Теперь я понимаю о чем ты говорил. Даже не знаю нужна ли мне помощь такая форумчан какую они оказывают тебе.

Ответы на глупые вопросы ТСа есть в даташите (да, готовый код). Не вижу смысла заниматься копипастой.

anonymous
()
Ответ на: комментарий от ilovewindows

ТС странный троль, я дофига писал на ассемблере и никогда не поверю что он легче си

Это как @metaprog, только @Assembler)

goingUp ★★★★★
()
Ответ на: комментарий от Stierlitz_

Смотрел ролики на ютуб.

Записанных дебилами для дебилов. Либо ты начнёшь читать книги (список я тебе дал), либо пойдешь работать дворником.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Я никогда и никому не советовал ставить Куб - для обучения

Под «Вы» я подразумеваю многих. Думаю что ты еще не так стар чтобы с тобою на «Вы» общаться. Да и судя по тому усердию с каким ты пытаешься заставить перестать всех помогать клоуну общения на «Вы» ты не заслуживаешь.

Stierlitz_
()
Ответ на: комментарий от anonymous

либо пойдешь работать дворником.

Спасибо но у меня уже есть профессия. Да и мне кажется что скоро в силу развития ИИ как раз имено эта должность многим и светит а конкурировать с такими профессионалами как вы я не рискну в любой сфере.

Stierlitz_
()
Ответ на: комментарий от anonymous

Записанных дебилами для дебилов

У вас кстати нет канала с такими роликами?

Stierlitz_
()
Ответ на: комментарий от Assembler

Хоть я тебя и не очень но сделаю тебе повышение до главного клоуна.

Stierlitz_
()
Ответ на: комментарий от Stierlitz_

у меня уже есть профессия

Школьник - это не профессия.

anonymous
()
Ответ на: комментарий от anonymous

«забаньсяд*бил» приди, правильный путь укажи

anonymous
()
Ответ на: комментарий от Stierlitz_

Под «Вы» я подразумеваю многих.

Как видите, обобщение было не просто неверным, оно было откровенно ложным.

судя по тому усердию с каким ты пытаешься заставить перестать всех помогать клоуну

Интересная формулировка. Но нет, помешать засорению форума я не в силах.

общения на «Вы» ты не заслуживаешь.

Ну а я не буду опускаться до вашего уровня.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Если не помогаешь то хоть посиди тихонько. Шумите сильно.

anonymous
()
Ответ на: комментарий от anonymous

Ну шизик косящий под студента не так стремен как yeбок косящий под декана.

anonymous
()

замыкании PA9 с GND через резистор

anonymous
()
Ответ на: комментарий от anonymous

Cast@COKPOWEHEU

А акула-каракула светодиодом подмигнула!

anonymous
()
Ответ на: комментарий от anonymous

а что текст програмки изменили модераторы чтобы штирлиц не не мог скопировать? он написал что учится в его темах.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.