Перейти к содержанию
    

Пошлите куда надо начинающего. Нужно в программе на Си (Кейл) написАть ассемблерную функцию.  mdk_armcc  и armasm пытаюсь осилить. Может что нибудь попроще есть? Или это вопрос для подфорума  Кейл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Сейчас приступлю к изучению.

https://developer.arm.com/documentation/dui0473/j/preface/about-this-book

Это mdk_arm_asm_ user_guide - вид сбоку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я вопрос задал неверно.

__ASM("NOP");

Мне нужно вместо NOP вставить десяток ассемблерных инструкций. Как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я для IAR создавал отдельный файл с расширением "s"

Вот начало файла

// экспортируемые функции
 PUBLIC calculate_audio_level
 PUBLIC  arctan 
  
 // импортируемые переменные
 EXTERN sound_level
 EXTERN sin_table_256
 EXTERN sound_freq 
 EXTERN dac_sound_buf
 

 SECTION .text:CODE(2)
 THUMB
 ALIGNROM 2

calculate_audio_level
  SUB SP, #8
  MOV R9, R6    
  MOV R10, R6
  MOVS R7, #0
  MOV R5, R4    ;0
  LDR.W R8, = -1822  
  MOV.W R11, #0x100        ; длина буфера звука
  B main_loop_task_SOUND ; Переход в основной цикл

loc_8000E62    

    LDR R0, =sound_level

 

Окончание файла должно содержать директиву "END"

P.S. двоеточие для меток не нужно. Идентификатор начинающийся с первого символа строки, считается меткой.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то так.

/* USER CODE BEGIN 0 */
void myLED(void)
{
	int R0,R1,R2,R3;
	__ASM
	(
	"MOV R0, #1 \n"
	"MOV R1, #0x2000 \n"
	"MOV R2, #0x4001100C \n"
	
	"loop: \n"
	"STR R0, [R2] \n"
	"MOV R3, #0x00100000 \n"
	
	"delay_1: \n"
	"SUBS R3, R3, #1 \n"
	"BNE delay_1 \n"
	"STR R1, [R2] \n"
	"MOV R3, #0x00500000 \n"
	
	"delay_2: \n"
	"SUBS R3, R3, #1 \n"
	"BNE delay_2 \n"
	"B loop \n"
	);
}
/* USER CODE END 0 */

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Не надо делать задержки бесполезными командами. Используйте таймер.

2. В вашем случае нет никакой надобности в ассемблере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, uriy сказал:

2. В вашем случае нет никакой надобности в ассемблере.

Это мой первый опыт с ассемблером ARM.

Задача состоит в том, чтобы прикрутить внешний АЦП к Orange Pi Zero.

 

Изменено пользователем mihlit1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кейл и Orange Pi Zero - по меньшей мере оригинально.
А если серьёзнее, то не barebone Orange Pi Zero (линукс ведь) с ассемблером (первоопытным) просто так не подпустит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 часа назад, mihlit1 сказал:

Это мой первый опыт с ассемблером ARM.

Ход моих мыслей:

1. STM32 - ARM

2. Orange Pi Zero - ARM

3. С ассемблером знаком only AVR.

4. Ну не на форуме же ARM задавать вопрос про ассемблерные вставки.

5. С Linux -ом пытаюсь подружиться уже год, есть положительные результаты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 минут назад, mihlit1 сказал:

Ход моих мыслей:

1. STM32 - ARM

2. Orange Pi Zero - ARM

STM32 это Cortex-Mx, микроконтроллер, а в Orange Pi Zero стоит Cortex-A7, это две большие разницы.

У Orange Pi уже есть свой аудиопроцессор, проще научиться им пользоваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, mihlit1 said:

Ход моих мыслей:

1. STM32 - ARM

2. Orange Pi Zero - ARM

3. С ассемблером знаком only AVR.

4. Ну не на форуме же ARM задавать вопрос про ассемблерные вставки.

5. С Linux -ом пытаюсь подружиться уже год, есть положительные результаты.

С ассемблером можно сделать задержку, "подергать вывод", а тем более подключить АЦП вам не удастся. Доступ напрямую к железу закрыт операционной системой. Доступ только через API.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, misyachniy сказал:

Доступ напрямую к железу закрыт операционной системой. Доступ только через API.

А как тогда я к разъему GPIO подключил дисплей по 8-битной шине? Или мы говорим о разных вещах?

3 часа назад, SSerge сказал:

У Orange Pi уже есть свой аудиопроцессор, проще научиться им пользоваться.

Умельцы к DCMI внешний АЦП прикручивают и с помощью ассемблера 100MSPS от внешнего АЦП получают. Аудиопроцессор поди такое не потянет?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, mihlit1 said:

А как тогда я к разъему GPIO подключил дисплей по 8-битной шине? Или мы говорим о разных вещах?

Умельцы к DCMI внешний АЦП прикручивают и с помощью ассемблера 100MSPS от внешнего АЦП получают. Аудиопроцессор поди такое не потянет?

 

 

Не знаю. Текста исходников не вижу и ссылок тоже.

"STR R1, [R2] \n"  

Изменяет состояние вывода под Linux на плате Orange Pi?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...