Как проверить, нажата ли пользовательская кнопка на дискотеке STM32F в сборке - PullRequest
0 голосов
/ 19 сентября 2018

Я новичок в программировании сборки на плате обнаружения stm32f.Я пытаюсь написать программу (файл .S) в сборке, которую я могу вызвать на C. Я хочу, чтобы программа сборки проверила, нажата ли пользовательская кнопка.

Я провел некоторое исследование и обнаружил, чтокнопка пользователя находится в порту GPIOA, и к ее данным можно получить доступ из пространства IDR.В частности, я считаю, что первый бит GPIOA-> IDR переключается на 1 при нажатии кнопки пользователя.

Вот код, который я написал:

.global checkB1
.thumb_func
checkB1: 

@; accessing B1
ldr r3,=GPIOA_BASE

ldr r2, [r3,#IDR]
and r0, r2, #GPIO_IDR_IDR_0     @; check if 1 and put in r0

bx lr

У меня нет проблемвызывает функцию в C, но r0 никогда не меняется на 1, когда пользовательская кнопка нажата?

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

РЕДАКТИРОВАТЬ:

Я также хотел бы включить мой код инициализации, который настраивает GPIOA:

.global initB1
.thumb_func
initB1: @;configure B1 as an input

@; make sure GPIOA is enabled
ldr r3,=RCC_BASE
ldr r2,[r3,#RCC_AHB1ENR]
orr r2,#1   @; set enable bit
str r2,[r3,#RCC_AHB1ENR]

@; configuring B1
ldr r3,=GPIOA_BASE

@; configure B1 as an input
ldr r2,[r3,#MODER]
bic r2,#3   @;clear current value if any of A0 mode
            @; new value of A0 mode is general purpose input
str r2,[r3,#MODER]  @; ..

@; configure input of B1 as pulldown
ldr r2,[r3,#OPUPDR]
bic r2,#3   @;clear current value if any of control bits
orr r2,#2   @; pulldown mode (bit value: 10)
str r2,[r3,#OPUPDR] @; ..

bx lr

1 Ответ

0 голосов
/ 19 сентября 2018

Проблема с моим кодом заключалась в том, что я не включил правильный порт в моих инициализациях!

@; make sure GPIOA is enabled
ldr r3,=RCC_BASE
ldr r2,[r3,#RCC_AHB1ENR]
orr r2,#1   @; set enable bit <--------------
str r2,[r3,#RCC_AHB1ENR]

Порт A, соответствующий # 1, до порта F, соответствующего # (1 << 7) </p>

Изучение нового синтаксиса может разочаровать.Код в моем вопросе был отредактирован и работает для определения пользовательской кнопки.Я уверен, что моя борьба с этим может кому-нибудь пригодиться!

...