LINUX.ORG.RU

Tim1

 ,


0

1

stm32f103c8 здрасьте здрасьте люди добрые) поправьте пожалуйста код, чтобы работало. Смысл такой, что надо сделать для понимание мигание светодиода с итревалом 3 сек с помощью таймера TIM1. пожалуйста обратите внимание на теги. в них нет СИ. не пишите пожалуйста примеры, которые не будут работать без библиотек, или которые вобще не будут работать.

.cpu cortex-m3
.thumb
.section .text
TIM1_PSC_zero_bit:  .word 0x42258500
TIM_CR1_CEN:        .word 0x42258000
TIM_CR1:            .word 0x40012c00
TIM_BDTR_MOE:       .word 0x422588BC
TIM1_PSC:           .word 0x40012c28

RCC_APB2ENR_TIM1EN: .word 0x4242032C//адрес рассчитан по формуле(смещение*32)+(4*Numbit)+0x42000000
//так как таймер будет работать у меня от частоты шины, то подключаю его.

.global _start
_start:
mov r5, #1
ldr r0, =RCC_APB2ENR_TIM1EN
str r5, [r0]

//TIM1_CNT оставлю по умолчанию.
mov r1, #1
ldr r0, =TIM_CR1_CEN
str r1, [x0]// разрешает счет.

//настраиваю счетчик на дикремент. 
ldr r0, =TIM_CR1_CEN
mov r1, #1
str r1, [r0, #16]// поместил единицу в бит DIR
mov r1, #0
str r1, [r0, #20]  поместил ноль в бит CMS
str r1, [r0, #24] поместил ноль в бит СМS
//помещаю 7999 в TIM_PSC
mov r1, #1
mov r2, #0
ldr r0, =TIM1_PSC_zero_bit
str r1, [r0]
str r1, [r0, #4]
str r1, [r0, #8]
str r1, [r0, #12]
str r1, [r0, #16]
str r1, [r0, #20]
str r2, [r0, #24]
str r2, [r0, #28]
str r1, [r0, #32]
str r1, [r0, #36]
str r1, [r0, #40]
str r1, [r0, #44]
str r1, [r0, #48]
// в TIM_PSC лежит #1111100111111
up:


bl up
чтобы светодиод мигал что нужно сделать? как связать ногу PC13 c TIM1?

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

Обезьяны поумнее тварей-филантропов будут. «Благотворитель» = психопат.

Душа - очередной вымысел людоедских тварей. (которые «помогают» собачкам, а вот другого человека готовы в ложке воды утопить)

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

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

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

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

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

Кого на ЛОР не назвали дураком 52357 раз, тот не форумчанин …

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

Инвертировать бит нельзя, к сожалению. Только через read-modify-write.

if( GPIOx->ODR & (1<<bit) )BSRR = (1<<bit); else BSRR = (0x0100<<bit);

Не совсем атомарно, но для практического применения достаточно. Если один и тот же вывод меняется из разных потоков, тут уже ССЗБ во все поля.

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

Какие, нафиг, потоки на микроконтроллере? Только в прерывании разве что…

Может быть прерывания. Может быть именно потоки в какой-нибудь RTOS, суть ведь не в названии.

А кроме как для многопоточных сред чем опасна неатомарность?

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

Я немного отвлёкся от срача, с таймером-то разобрались?

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

Потом ТС и его собрат по разуму не могли понять почему указание другого значения SP, отсутствие метки .text и некоторые другие декоративные вещи ломают им компиляцию. Не знаю. У меня не ломают. А то, что эти полтора мракобеса не понимают как работает контроллер, из-за чего могут с ним накосячить тысячей и одним способом, ни для кого не секрет.

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

RTOS

Попробую воздержаться от матерщины!

чем опасна неатомарность?

Исключительно для прерываний. Но да, если с умом подойти к разработке, то в прерывании будешь лишь флаг выставлять, а менять состояния ног — в основном цикле. И можно наплевать на неатомарность. Все будет шикарно. Все равно трудно себе представить ситуацию, чтобы, скажем, нужно было по определенному прерыванию с минимальной задержкой какую-нибудь ногу дрыгнуть. Для этих целей есть таймеры с DMA, I2C, SPI, USART и т.д., и т.п.

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

Попробую воздержаться от матерщины!

Я его тоже не осилил, но это не значит, что не попытаюсь написать свой велосипед когда бы то ни было. Когда-то я писал модель ОС с вытесняющей многозадачностью для AVR, а для ARM/RISCV это должно быть проще или по крайней мере полезнее.

Исключительно для прерываний.

Прерывания это частный случай потока. Или наоборот - многопоточность почти не реализуема без прерываний.

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

Легко. Управление яркостью матрицы светодиодов через PWM/BAM. Можно, конечно, DMA попробовать припахать, но выводы не всегда удобно расположены.

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

скажите, а зачем мы используем

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

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

поправлю

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

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

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

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

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

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

здрасьте) мой одногруппник ярый фанат вашего творчества. Он утверждаает, что нельзя подключить PWM(настроить ШИМ) на PC13. видимо это ваше влияние или школа. хотя зная своего одногруппника, могу предположить что он гонит. разрешите спросить вас от себя: можно ли подключить ШИМ на PC13?

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

Он утверждаает, что нельзя подключить PWM(настроить ШИМ) на PC13

Насколько мне известно, аппаратный нельзя. Программный, естественно, можно на любую ногу.

Если нужен аппаратный ШИМ, просто подключите светодиод к той ноге, где согласно даташиту выход таймера есть. У F103 это примерно половина ног.

А ещё она не потянет больше пары мА, т.е. даже для светодиода не годится.

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

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

проверить не хотите?

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

светодиод мегает на pc13.

Программно в прерывании таймера, как я понимаю?

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

Не перебирать

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

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

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

Это совсем другой компот.
За такие слова иронизировать в постах не буду.
А ранее было все было похоже на ПТУ-шника, который ленится читать документацию.

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

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

Что началось то?
Поддержал ваше начинание …

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

почему нет?

Потому что поиск недокументированных возможностей лично меня сейчас не интересует. Есть занятия поинтереснее. Например, я сейчас пилю программатор для RISCV, который выглядит как переходник USB в 2*UART + Audio + HID

Впрочем, если интересно вам - тестируйте.

COKPOWEHEU ()