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

Имей ввиду, что в примере используются такие ноги: A0 - на вход (с прерыванием), C12 - на выход. Замени на те, которые удобнее.

apt_install_lrzsz ★★★
()

Здрасьте здрасьтте люди добрые я не программист поэтому полтора года создаю темы о программировании микроконтроллеров и ник у меня assembler помогите байтами кто сколько может.

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

Он еще пытается сообщения писать в календаре светодиодами. Может он и ЛОР считает микроконтроллером?!

А так, да, звезду получил, чтобы флудить вполне осмысленными сообщениями, а тупостью.

anonymous
()

Может ты на сишку перейдешь, вставить в си на ассемблере не проблема, а ассемблер в 21 веке это тупиковый путь. Что касается прерывания то см. любой пример на си, там кроме инициализации регистров и не надо ничего, типа PA_CR2_bit.C29=1;

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

А так, да, звезду получил, чтобы флудить вполне осмысленными сообщениями, а тупостью.

Дадут и *****

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

Может ты на сишку перейдешь, вставить в си на ассемблере не проблема, а ассемблер в 21 веке это тупиковый путь.

У каждого свой …

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

я дофига писал на ассемблере и никогда не поверю что он легче си

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

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

COKPOWEHEU
()

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

А вы можете это сделать простым опросом, без прерываний? Примеров из предыдущих тем для этого достаточно.

А на счет программиста - тут далеко не все учились на программистов или работают ими. Это не мешает нам учиться и находить решения своих задач самостоятельно.

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

Иными словами, всё за пределами startup.S. Да и его некоторые переписывают на сях. Но так да, согласен.

А интереса ради можешь привести примеры, когда тебе в arm приходилось использовать именно ассемблер, так как gcc делал не то?

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

Поддерживаю. @Assembler, у тебя вообще хоть один пример рабочей прошивки, который ты сам написал, есть.

(Да-да, я понимаю, что ТС тролль, но может беседа в какое интнресное русло повернётся)

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

Гцц при каждом вызове подпрограммы генерит неведомую дичь. А уж как он фрагментирует память…

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

Сомневаюсь. Да и вообще начинать изучение ассемблера с СТМ32 - не самая лучшая идея. Есть (был) 8048 (банки регистров были хороши), АВР (неоправданно дорог, для обучения сойдёт) или что-нибудь с системой команд з80. Но не СТМ. От этого г*вна спиваются и страдают от навязчивых идей преследования (привет, Эдик).

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

51 это развитие 48 (дополнительные команды и периферия).

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

По опыту моих коллег процесс установки плисовых сред разработки на онтопик несколько нетривиален. А поскольку ТС винду отвергает, шансов у него вообще ноль.

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

Не надо путать троллей и скудоумных. Первые хоть и тоже дауны, но в основном набрасывают целенаправленно. Данное же существо вещает вполне серьезно.

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

Не надо путать троллей и скудоумных.

Тем временем он создал тему в техническом разделе, и за каждое сообщение в теме ему капает в карму.

Данное же существо вещает вполне серьезно.

Серьезнее некуда.

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

Был бы в форуме раздел для начинающих, то и претензий бы не было.
А так в разделе Development выясняют, что означает

int value() const { m_value = 0; }

Так ведь и настырные же, да еще обижаются когда им скажешь

Погугли "int value() const { m_value = 0; }" 

Ответов полно.
Зачем свою ЛЕНЬ постить в Development?

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

Это да. Без виртуалок было бы тяжело.

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

в разделе Development

боты зарабатывают рейтинг, чтобы флудить в talks. Всего-то надо создать тупую тему, где ему нафлудят рейтинг

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

боты зарабатывают рейтинг, чтобы флудить в talks. Всего-то надо создать тупую тему, где ему нафлудят рейтинг

Лучше бы для ботов talks был сразу доступен, а для постинга в другие разделы пусть скор набирают …

anonymous
()

Что, новый удачный день, чтобы продолжить рисовать очередной зелененький квадратик в профиле?))

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

Всегда приятно познавать языки и фреймворки с друзьями, а также ребятами.

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

А дурак-то с выдумкой.

То что человек говорит глупости на публику, не означает что он дурак.

Тут проблема в другом: нужен ли такой человек для форума, публики?

Если некий «университет» проводит эксперимент и рассматривает некий «публичный проект» как микроконтроллер, в котором можно мигать зелеными лампочками, то тут обычно говорят о диверсии, а не о дураках.

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

То что человек говорит глупости на публику, не означает что он дурак.

Чаще означает, чем нет. А если еще и делает глупости, а если еще и не имеет с этого выгоды...

В общем, Оккам не велит мне долго размышлять по этому поводу.

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

А дурак-то с выдумкой.
нужен ли такой для форума, публики?

когда своих хватает.

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

не имеет с этого выгоды

Все делается ради награды «выгода», пока действует адреналин «ожидание выгоды».

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

Схема работает. Почему бы нет, если правила разрешают.

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

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

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

Награду он получил - флудит вполне осмысленными сообщениями в толксах

Отличный аргумент в пользу того, что он дурак.

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

Сообщения в теме пишутся, карма тебе капает, лампочки мигают. Зачем делать больше, чем требуется?

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

он дурак.

Не поспоришь, термин «дурак» неопределен. Каждый субъект понимает, что захочет. Главное - чтобы это на касалось самого субъекта.

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

Это самый полный и подробный пример по этой теме на asm, какой только может быть. Хочешь сказать, что даже это для тебя слишком сложно?

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

А интереса ради можешь привести примеры, когда тебе в arm приходилось использовать именно ассемблер, так как gcc делал не то?

Нет, не могу. Я вообще не умею на ARM’овом ассемблере писать. Умения читать хватает. Соответственно и использовал чтобы проверить во что разворачиваются макросы.

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

Сомневаюсь. Да и вообще начинать изучение ассемблера с СТМ32 - не самая лучшая идея.

По сравнению с тем, что в институтах учат x86-му ассемблеру - даже ARM лучше. Хотя с 8-битками не сравнится, конечно.

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

мне не надо полный и подробный. я даже не стал листать километры кода что там. мне надо понятный. включить внешние прерывания, это строк десять команд. вы что не можете написать? для вас это сложно? выше есть пример что написал Anonymous. он простой. можете немного его подкорректировать чтобы прерывание случалось от замыкания PA9 с GND?

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

Ты прав. Там просто раскомпилиная каша. Я не понимаю этих придурков! Типа интеллектуально они так шутят. Он просит за последние копейки пример стобы разобраться эти же дебилоиды типа блещут остроумием хотя на деле они лишь выказывают свою пидарастическую натуру. Он не пропил не прокурил и зашел и просит за то что у него есть а это 300р, пример, как он выразился, понятного, рабочего кода. Что тут такого?

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

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

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

мне не надо полный и подробный. … мне надо понятный.

Для всех вменяемых людей «полный и подробный» является синонимом «понятный». Что ты ещё хочешь? В цветных картинках в виде комиксов тебе исходник изобразить?

я даже не стал листать километры кода что там.

Вот в этом одна из твоих проблем. Ты даже не пытаешься прочитать, что тебе пишут. Просто болт кладёшь и требуешь ещё примеров.

выше есть пример что написал Anonymous.

Анонимус выше не приводил примеры, а рассуждал что-то про дураков. Подкорректировать дураков я не могу.

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