Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятки с регистрами
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Daermon
AT91rm9200

Не могу понять почему все работает smile.gif

Пишу в IAR4.42
Создал класс таймер.
Создаю 3 экземпляра класса Timer в Main()
для каждого экземпляра вызываю функцию bool Timer::Init(AT91PS_TC TC_pt, unsigned int Timer_ID, unsigned int Mode, ptrIRQ_fn pIRQTx) которая запускает соответствующий таймер на заданое время.

Вот подобные строки с регистрами только для записи присутствуют в функции Init.
AT91C_BASE_PMC->PMC_PCER = ( 1UL<<Timer_ID ) ;

Так вот. Если эта функция вызывается последовательно для 3х таймеров, то получается каждый последующий должен затереть разрешение для предыдущего...

...А все таймеры работают!!! В чем дело и как правильно работать с регистрами Write only???
Leen
Дык... Маны читать надо... Регистр только для записи - это такая фиговина, которая действует моментом, при этом у него есть уровень, который он ловит. Например: если регистр включения клоков выполняет заданное действие по лог 1 в бите (включить клоки), то при записи в него 0b00001001 он включит клоки для номеров 0 и 3, а все остальные оставит, как было. Если потом записать в него 0b00001100, то он включит клоки для номеров 2 и 3, но так как номер 3 уже тактируется, то ему (номеру) бледно-фиолетово. А если записать в регистр 0b00000000, то просто ничего не произойдет. Для запрещения клоков есть второй регистр - выключения клоков. Он тоже write-only, и работает так же. Есть еще третий регистр - статусный, read-only, в нем если в бите 1, клоки включены, если 0 - выключены. Например после того, что я написал, в статусе после первой записи будет 0b00001001, после второй - 0b00001101.
sergeeff
Работа с такого типа регистрами очень проста, если четко уяснить одну вещь - не один регистр служит для осуществления операции enable/disable (типа 1 - enable, 0 - disable), а применяются пары регистров. В твоем случае - PMC_PCER и PMC_PCDR. И активным сигналом для сброса/разрешения всегда является 1 в соответствующем разряде.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.