реклама на сайте
подробности

 
 
> Чтение состояния порта в массив, inline assembler gcc stm32f4xx
artkam
сообщение Jun 27 2016, 11:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479



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

CODE

void f(unsigned int* peg)
{
__ASM volatile
(

".equ PERIPH_BASE, 0x40000000 \n \t"
".equ AHB1PERIPH_BASE, 0x00020000 \n \t"
".equ GPIOD_BASE, 0x0C00 \n \t"
".equ GPIOB_BASE, 0x0400 \n \t"
".equ GPIO_IDR, 0x10 \n \t"
".equ GPIO_BSRRL, 0x18 \n \t"
".equ GPIO_BSRRH, 0x1A \n \t"

".equ GPIO_BSRR_BS_5, 0x20 \n \t"


"LDR r0, =(GPIO_BSRR_BS_5) \n \t"
"LDR r1, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRH) \n\t"
"LDR r2, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRL) \n\t"
"LDR r3, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOD_BASE + GPIO_IDR) \n\t"

"LDR r4, [%[data_ptr], 0x00] \n \t"

//0
"STRH r0, [r2, 0x00] \n \t" // set clock
"LDR r5, [r3, 0x00] \n \t" // считываем GPIOD->IDR
"STRH r0, [r1, 0x00] \n \t" // reset clock
"STR r5, [r4, 0] \n \t" // записываем то, что было в GPIOD->IDR, в память со смещением

//1
"STRH r0, [r2, 0x00] \n \t"
"LDR r5, [r3, 0x00] \n \t"
"STRH r0, [r1, 0x00] \n \t"
"STR r5, [r4, 4] \n \t"

//2
"STRH r0, [r2, 0x00] \n \t"
"LDR r5, [r3, 0x00] \n \t"
"STRH r0, [r1, 0x00] \n \t"
"STR r5, [r4, 8] \n \t"

/* Множество раз повторяется. */

//681
"STRH r0, [r2, 0x00] \n \t"
"LDR r5, [r3, 0x00] \n \t"
"STRH r0, [r1, 0x00] \n \t"
"STR r5, [r4, #2724] \n \t"

:
: [data_ptr] "r" (peg)
:
);
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 12:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016