|
Чтение состояния порта в массив, inline assembler gcc stm32f4xx |
|
|
|
Jun 27 2016, 11:20
|
Частый гость
 
Группа: Участник
Сообщений: 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) : ); }
|
|
|
|
|
 |
Ответов
|
Jun 27 2016, 11:29
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(artkam @ Jun 27 2016, 15:20)  Здравствуйте, уважаемые товарищи! В си-коде, для проверки состояния порта используется вставка на ассемблере, приведенная ниже. Но где-то что-то идет не так задумано, и в буфере, что передается в функцию по ссылке, ничего кроме нулей не обнаруживается. Возможно, я что-то недопонимаю и делаю не так, как надо. Хотелось бы услышать идеи, с помощью которых можно было бы починить код... 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) : ); }
Ну а под JTAGом пошагово почему не посмотреть что в регистры грузится? И не нужны будут ничьи идеи.
--------------------
Пролетарий умственного труда.
|
|
|
|
Сообщений в этой теме
artkam Чтение состояния порта в массив, inline assembler gcc stm32f4xx Jun 27 2016, 11:20 aaarrr Не уверен насчет "сообразительности" инл... Jun 27 2016, 11:24 Obam Цитата(aaarrr @ Jun 27 2016, 15:24) Не ув... Jun 27 2016, 11:30 artkam Цитата(aaarrr @ Jun 27 2016, 16:24) И поч... Jun 28 2016, 00:37  jcxz Цитата(artkam @ Jun 28 2016, 06:37) Навер... Jun 28 2016, 03:39 scifi Цитата(artkam @ Jun 27 2016, 14:20) Хотел... Jun 27 2016, 11:30 jcxz Цитата(artkam @ Jun 27 2016, 17:20) Возмо... Jun 27 2016, 11:35 Сергей Борщ QUOTE (artkam @ Jun 27 2016, 14:20) CODE ... Jun 27 2016, 12:29 artkam Поэтому и обратился на форум, чтоб направили в пра... Jun 28 2016, 05:36 jcxz Цитата(artkam @ Jun 28 2016, 11:36) Поэто... Jun 28 2016, 06:02 Obam Пусть тренируется человек, вон уже дошёл до факта,... Jun 28 2016, 07:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|