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

 
 
> ATxmega64A1def.inc, непонятки
zombi
сообщение Oct 13 2011, 19:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Вот к примеру регистр период RTC в файле ATxmega64A1def.inc обьявлен так:
Код
.equ RTC_PER = 1034        // Period Register

1034 это десятичное значение адреса младшего байта регистра RTC_PER.
А каким образом Atmel предлагает доступ к старшему байту?
RTC_PER+1 чтоли???

И почему сразу не обьявить вот так например:
Код
.equ RTC_PERL  = 1034        // Period Register
.equ RTC_PERH  = 1035

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Oct 13 2011, 21:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



3.11 Accessing 16-bit Registers
The AVR data bus is 8 bits wide, and so accessing 16-bit registers requires atomic operations.
These registers must be byte-accessed using two read or write operations. 16-bit registers are
connected to the 8-bit bus and a temporary register using a 16-bit bus.
For a write operation, the low byte of the 16-bit register must be written before the high byte. The
low byte is then written into the temporary register. When the high byte of the 16-bit register is
written, the temporary register is copied into the low byte of the 16-bit register in the same clock
cycle.
Ну и так далее. Смысл один - два раза по одному адресу- младшим вперёд

Сообщение отредактировал IgorKossak - Oct 14 2011, 06:43
Причина редактирования: Бездумное цитирование


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 13 2011, 21:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Oct 14 2011, 00:02) *
Ну и так далее. Смысл один - два раза по одному адресу- младшим вперёд

Шото это както напрягает.
А если мне надо только старший (или только младший) байт менять?
Не покидает чувство, что хоть что-то, но всётаки без твоего участия делают.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 13 2011, 21:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (zombi @ Oct 14 2011, 01:23) *
Шото это както напрягает.
А если мне надо только старший (или только младший) байт менять?
Не покидает чувство, что хоть что-то, но всётаки без твоего участия делают.

Ну друже , это к разработчикам ATMELя - вот так они придумали. В регистр RTC_PER они попадают одновременно в момент записи старшей половинки и ни как иначе. Младший торчит во временном всё это время . Попробуй обмануть. Мне тоже не понравилось


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 13 2011, 22:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Oct 14 2011, 00:37) *
Младший торчит во временном всё это время . Попробуй обмануть. Мне тоже не понравилось

Это типа проц стал 16-ти разрядным???


Цитата(Юрий_СВ @ Oct 14 2011, 01:03) *
по разным адресам

Действительно по разным!!!
Т.е. записывая что-то в старщий адрес я записываю и в младший!!! А что в младшем ХЗ. Красота!!!
Go to the top of the page
 
+Quote Post
ae_
сообщение Oct 14 2011, 01:52
Сообщение #6


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(zombi @ Oct 14 2011, 07:16) *
Это типа проц стал 16-ти разрядным??? ...
Т.е. записывая что-то в старщий адрес я записываю и в младший!!! А что в младшем ХЗ. Красота!!!

Если бы не было временного регистра... Например, работает 16-бит счётчик: 00FE, 00FF, 0100, 0101, 0102, ...
Программа начинает читать значение, когда в нём 00FF.

in R1,TCNT1H
in R0,TCNT1L
в регистрах получим R1:R0 = 0000

пробуем по другому:
in R0,TCNT1L
in R1,TCNT1H
в регистрах получим R1:R0 = 01FF

Тоже самое и записью, если записывать в работающий таймер/счётчик.
Из ADC нельзя прочитать только младший байт, ит.д.
Временный регистр нужен для атомарного доступа к 16-бит регистрам по 8-бит шине.
И появился этот регистр не в xMega,Mega или Tiny, он уже был в AVR AT90Sxxxx в прошлом веке.
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 14 2011, 07:51
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ae_ @ Oct 14 2011, 04:52) *
in R1,TCNT1H
in R0,TCNT1L
в регистрах получим R1:R0 = 0000

пробуем по другому:
in R0,TCNT1L
in R1,TCNT1H
в регистрах получим R1:R0 = 01FF

Спасибо за лекцию. Но результат чтения также будет зависеть и от того чем тактируется счётчик.
И речь не о принципе доступа 8-битного процессора к 16-битным регистрам.
Речь о том что адрес старшего байта физически существует,описан в DS но никак не обьявлен.
А тем что атмельцы обьявили адрес только младшего байта они врядли добьются атомарности
поскольку при желании всёравно можно нарушить последовательность чт/зп.

Цитата(ILYAUL @ Oct 14 2011, 10:15) *
А вот так нет:
Код
ldi r16,0x55
ldi    r17,0xAA
sts RTC_PERL,r16
sts RTC_PERH,R17
nop

Ошибка компиляции.

Обьявите RTC_PERL/H и всё проканает.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 14 2011, 08:08
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (zombi @ Oct 14 2011, 11:51) *
Обьявите RTC_PERL/H и всё проканает.

Не врубился/ Объявил - не пишет


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zombi   ATxmega64A1def.inc   Oct 13 2011, 19:44
||- - zombi   Цитата(ILYAUL @ Oct 14 2011, 11:08) Не вр...   Oct 14 2011, 09:06
||- - ILYAUL   QUOTE (zombi @ Oct 14 2011, 13:06) Странн...   Oct 14 2011, 09:24
||- - zombi   Цитата(ILYAUL @ Oct 14 2011, 12:24) Вы та...   Oct 14 2011, 09:53
||- - ILYAUL   QUOTE (zombi @ Oct 14 2011, 13:53) Шо то ...   Oct 14 2011, 10:16
||- - zombi   Цитата(ILYAUL @ Oct 14 2011, 13:16) я бра...   Oct 14 2011, 10:18
||- - ILYAUL   QUOTE (zombi @ Oct 14 2011, 14:18) А это ...   Oct 14 2011, 10:18
||- - zombi   Цитата(ILYAUL @ Oct 14 2011, 13:18) Студи...   Oct 14 2011, 10:24
||- - ILYAUL   QUOTE (zombi @ Oct 14 2011, 14:24) Отказ...   Oct 14 2011, 10:27
|- - Юрий_СВ   Цитата(ILYAUL @ Oct 14 2011, 00:02) Смысл...   Oct 13 2011, 22:03
|- - ILYAUL   QUOTE (Юрий_СВ @ Oct 14 2011, 02:03) по р...   Oct 14 2011, 07:15
|- - zombi   Цитата(ILYAUL @ Oct 14 2011, 10:15) Вот т...   Oct 19 2011, 08:42
- - Юрий_СВ   Цитата(zombi @ Oct 13 2011, 22:44) Вот к ...   Oct 13 2011, 22:20
- - ILYAUL   Dear Customer, Please try with the following assem...   Oct 19 2011, 09:10
- - zombi   Ага. т.е. советуют через базовый адрес+смещение и ...   Oct 19 2011, 10:33
- - ILYAUL   QUOTE (zombi @ Oct 19 2011, 14:33) Ага. т...   Oct 19 2011, 16:01


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:42
Рейтинг@Mail.ru


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