LINUX.ORG.RU

Помогите разобраться

 


0

1

Assembler посоветовал мне купить такой же контроллер как у него и воспользоваться уже готовыми примерами из его тем чтобы на создавать новых и не беспокоить зря форум. Я купил контроллер точ в точ как у него. зашел в его тему и скопировал код. stm32f103c8t

.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
ничего не работает. мне кажется ошибка в коде. наверное кто-то пошутил так. Тута много тех кто любит шутить. Но если серьезно то скажите где ошибка? почему код не работает? при замыкании ноги PA9 с Gnd должен был загораться светодиод PC13 как я понял из темы.

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

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

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

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

понимаешь ли…

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

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

те, кто биты придумывали, скорее всего уже умерли, или на пенсии, или нашли более высокоплачиваемую работу, таксистами например.

и ты приходишь сюда с вопросом - что не так???

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

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

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

anonymous ()

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

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

та не… тут момент истины. давайте покричим калакуберов которые кричат новичкам чтобы они забанились. пусть придут и объяснят. только не объяснят потому что сами незнают. тогда бы просто закрыли рты и шли бы в General срать там. вопрос нормальный! почему код который дали для примера не работает? специально дали такой? это нормально?

anonymous ()

при замыкании ноги PA9 с Gnd должен был загораться светодиод PC13 как я понял из темы.

ты счас все ноги попалишь ему своими замыканиями…

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

alysnix ()
Ответ на: комментарий от ya-betmen

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

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

что специально они ему такой пример написали чтобы он сжег МК?

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

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

а в реальных онлайн курсах и типа того - там все наверняка проверено и не раз, юзерами.

alysnix ()

при замыкании ноги PA9 с Gnd должен был загораться светодиод PC13 как я понял из темы

при замыкании должен загораться/гаснуть светодиод - переключается состояние ноги PC13 (D1 на схеме симулятора)

начальное состояние

https://ibb.co/fqtDG5j

после нажатия

https://ibb.co/VTQ61VW

следующее нажатие погасит и т.д.

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

Вообще нормальные люди для начала учатся моргать диодом, сразу видно что контроллер жив и можно какую-то обратную связь получить. А так непонятно - программа не запустилась, не работает вход, не работает выход. Самое то для новичка, тем более с уровнем ctrl-c ctrl-v не работает хелп

ilovewindows ★★★★★ ()

Ну вот теперь ты понял почему никто не пишет на асме.
Написать на нем моргалку диодом не сложнее чем на хале (если ты ещё не обустроил себе рабочее окружение но при этом не ленив смотреть в даташите регистры).
Другое дело что ее в 100500 раз сложнее прочитать:

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

И это ты только ногу дёргаешь, прикинь что будет когда ты ойпи стек начнёшь поднимать ;-)

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

rukez ★★ ()

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

Ты еще и сам с собой разговариваешь. Не, ну забавно, чо…

Oberstserj ★★ ()
Ответ на: удаленный комментарий

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

23 30 settable EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C
это? господа, ну собиритесь.

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

ну почти… он код взял с этого форума. ему сказали купи МК такой-то и учись. тут примеров много. он уже второй МК покупает. превый раз ему все засрали. и щас та же песня. он спрашивет, вы полчите. он тыкает что попало и толи МК навернулся толи программатор. так нельзя делать. это свинство.

anonymous ()

Мне кажется, лучше начать с ардуино и ардуино иде. Я так и сделал например. Там как-то понятней всё. Главное — покупай официальный, а не копию.

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

в симуляторе работает правильно

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

anonymous ()

У тебя 32битный арм камень, нафига тебе ассемблер? К тому же ты его не знаешь поэтому он тебе в двойне не нужен. К нему приходят в 3х случаях.

  • Нужда ибо упёрся и знаешь как выкрутится на нём зная его (не твой вариант)
  • Интерес ибо изучаешь (не твой вариант)
  • Пишешь на нём десятипальцевым методом как книжку потому что просто можешь и всё. (ъ хардкодер lvl900050050 c бородой до пяток)

Напиши на простом Си простую человекочитаемую мигалку. А уже когда заработает ты можешь сделать gcc -S и увидеть её в виде ассемблера и если есть интерес попробовать уже модифицировать его.

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

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

ну советы раздавать мы мастера. какой ему вектор выбрать из таблицы NVIC?

[code]EXTI Line[9:5] interrupts 0x0000_009C[/code] я вот тоже затрудняюсь. вы знаете?

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

вроде припоял

если правильно припаял, по схеме

https://ibb.co/VTQ61VW

низкий уровень на PC13 должен зажигать светодиод, с этим должен моргать

.syntax unified
.cpu cortex-m3
.thumb

RCC_APB2ENR = 0x40021018
RCC_APB2ENR_IOPCEN = (1 << 4)
RCC_APB2ENR_TIM1EN = (1 << 11)

GPIOC_CRH = 0x40011004

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 = 0x4001100c

.text
	.word   0x20002000
	.word   _start + 1
	.space  0x9c
	.word   TIM1_UP_isr + 1

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

	ldr    r0, =GPIOC_CRH
	ldr    r1, [r0]
	and    r1, #0xFF0FFFFF
	orr    r1, #0x00100000
	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, =2000
	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, =TIM1_CR1
	ldr    r1, =TIM_CR1_CEN
	str    r1, [r0]

	ldr    r0, =NVIC_ISER0
	ldr    r1, =TIM1_UP
	str    r1, [r0]

	dsb

loop:
	wfi
	b loop

.global TIM1_UP_isr
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 << 13)
	str    r1, [r0]

	bx lr
anonymous ()

В прошлых темах предлагали взять регистры из *.h, только дефайны а не писать поштучно из мануала.
Еще если хочешь писать на асме понятнее то начни использовать макросы. Без понятия как это в инопланетянском gas но результат должен быть близким к си

.setBit(GPIOC_ODR, LED_BIT_INDEX)

bga_ ★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Тебе нужно было позвать эдика и попросить у него снипет мигалки светодиодом.

Я не пишу на асме. Тем более под STM32 (там вообще нет никакого смысла на асме писать, т.к. gcc все равно более вменяемый код сгенерирует).

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

я захожу на этот форум только из-за тебя аnonymous. вот ходят же в музеи и в картинные галереи а мне твои куски кода на ассемблере заменяют все это.

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

как показывает практика с местным обитателем под ником Assembler, научить программированию можно хоть кого. программисты это не боги и даже не особая категория людей. есть врачи, есть музыканты и быть ими нисколько не легче чем быть программистами. я вот думал, а что если вдруг я бы стал программистом? ходил бы я с гордым видом? нет. щас любая домохозяйка может создать сайт. любой школьник сегодня по уровню развития выше чем программист из 90x. поэтому давайте быть проще. и давайте оставим эти сопры которые ниочем. там вопрос кто-то выше задал. ответа на него так и нет.

anonymous ()

Зачем тебе брать готовый код от всяких неучей, и зачем тебе вообще код в котором ты не разбираешься? Изменить уровень на ноге - это одна ассемблерная команда, напиши её сам, убедись что она работает (т.е. без неё светодиод на этой ноге не горит, с ней горит), дальше добавь вторую, цикл и паузу, пропрись с того что светодиод мигает, дальше уже спокойно пиши всё что в голову придёт.

slovazap ★★★★★ ()