чтение значения счетчика таймера TMRnL и TMRnH на 8051 (C8051F120)

Техническое описание моего микроконтроллера C8051F120 ясно, когда дело доходит до чтения 16-битного значения PCA0L и PCA0H:

"Чтение PCA0L автоматически фиксирует значение PCA0H в регистре "моментального снимка"; следующее чтение PCA0H обращается к этому регистру "моментального снимка". Чтение сначала регистра PCA0L гарантирует точное считывание всего 16-битного счетчика PCA0."< /эм>

Однако я не нашел аналогичного утверждения относительно регистров TMRnL и TMRnH. Я помню на Atmega128CAN90, я использовал следующее

unsigned char chL,chH;
#asm("cli")
chL=TCNT3L;
chH=TCNT3H;
#asm("sei")

Кто-нибудь знает, верна ли приведенная выше цитата для регистров TMRnL и TMRnH C8051F120? Или, каков безопасный способ получить последовательное чтение? Нужно ли отключать прерывания? Спасибо за вашу помощь!


person datahaki    schedule 26.08.2012    source источник


Ответы (1)


На странице 116 таблицы данных говорится:

TCNTn, OCRnx и ICRn — это 16-битные регистры, к которым ЦП AVR может получить доступ через 8-битную шину данных. Доступ к 16-битному регистру должен осуществляться с помощью двух операций чтения или записи. Каждый 16-битный таймер имеет один 8-битный регистр для временного хранения старшего байта 16-битного доступа. Один и тот же временный регистр используется всеми 16-битными регистрами в каждом 16-битном таймере. Доступ к младшему байту запускает 16-битную операцию чтения или записи. Когда ЦП записывает младший байт 16-битного регистра, старший байт, хранящийся во временном регистре, и записываемый младший байт копируются в 16-битный регистр за один и тот же такт. Когда ЦП считывает младший байт 16-битного регистра, старший байт 16-битного регистра копируется во временный регистр в том же такте, что и младший байт.

Так что, похоже, происходит нечто подобное.

person John Szakmeister    schedule 31.08.2012