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

Вопрос по коду для микроконтроллера K1986BE92QI

Здравствуйте, хотел бы задать вопросы по поводу кода для контроллера K1986BE92QI .  

// Загружаем адрес Порта D (адрес0x400C_8000) в регистр R6
    __ASM("MOVW R6, #0x8000");     // Записать в младшее полуслово регистра R6
                        // значение 0x8000
    __ASM("MOVT R6, #0x400C");     // Записать в старшее полуслово регистра R6 
                        // значение 0x400C

Во первых зачем было разделять значения адреса с помощью команд MOVW и MOVT ?

Во вторых почему адрес порта D выглядит так ? 

Изменено пользователем token1993
Не дописал букву

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


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

Во первых, по чему бы не спросить автора этого кода.

Во вторых, по чему бы не почитать документацию на Cortex-M3 и на 1986BE9x в частности.

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


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

В таком случае это всё домыслы. Может время тянет. Может не знает, что LDR есть. Может задача стояла использовать только MOV. Может быть ворона. А может это дворник был.

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


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

22 минуты назад, token1993 сказал:

Ладно, а зачем разделять адрес с помощью команд MOVW и MOVT?

А как надо?

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


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

Реализация МК (объем памяти, наличие буфера предвыборки) влияет на оптимальность выбора MOVW/MOVT или LDR. Тут несколько подробнее.

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


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

Стало больше ясности

Единственно только не как не могу понять почему надо разделять адрес порта ?

Прошу прощения за столь тупые вопросы я только учусь.   

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


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

2 часа назад, token1993 сказал:

Во первых зачем было разделять значения адреса с помощью команд MOVW и MOVT ?

Так можно передать значения для 32-битного регистра непосредственно в команде.

2 часа назад, token1993 сказал:

Во вторых почему адрес порта D выглядит так ?

Видимо, опечатка. Или это порт E, или младшие 16 бит должны быть нулевые.

19 минут назад, token1993 сказал:

Прошу прощения за столь тупые вопросы я только учусь.   

ASM принципиально нужен? На Си все гораздо проще.

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


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

Единственно только не как не могу понять почему надо разделять адрес порта ?


Ибо Thumb2... операнды у заинтересовавших вас команд какой разрядности?

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


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

ИМХО, никаких премудростей с MOVW/MOVT автор тех строк не затевал.
Тупо привычка/стиль грузить адреса и небольшие литералы, не более того.

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


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

1 минуту назад, Arlleex сказал:

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

...Или ограничение inline-асма, не позволяющего сделать LDR по PC+смещение.

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


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

И я так понимаю нету разницы как написать адрес (адрес0x400C_8000) через MOVW/MOVT 

можно так 

 __ASM("MOVW R6, #0x8000");

__ASM("MOVT R6, #0x400C")

а можно так 

 __ASM("MOVW R6,#0x400C")

__ASM("MOVT R6,#0x8000");

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


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

Нет:

 

MOVW R6, #0x8000 // R6 = 00008000

MOVT R6, #0x400C // R6 = 400C8000

 

а так результат будет несколько иной:

 

MOVW R6, #0x400C // R6 = 0000400C

MOVT R6, #0x8000 // R6 = 8000400C

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


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

А вообще в адресе вот это 0x400C и вот это 8000 ещё что то может значить ?

Или эти чисто цифры которые нужны для обращения к адресу. 

Изменено пользователем token1993
Не дописал букву

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...