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

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

"Четенето на PCA0L автоматично заключва стойността на PCA0H в регистър "моментна снимка"; следното четене на PCA0H има достъп до този регистър на "моментна снимка". Четенето на регистъра PCA0L първо гарантира точно четене на целия 16-битов PCA0 брояч."< /em>

Не намерих обаче подобно твърдение относно регистрите 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 CPU чрез 8-битовата шина за данни. 16-битовият регистър трябва да има байтов достъп чрез две операции за четене или запис. Всеки 16-битов таймер има единичен 8-битов регистър за временно съхраняване на старшия байт на 16-битовия достъп. Един и същ временен регистър се споделя между всички 16-битови регистри във всеки 16-битов таймер. Достъпът до ниския байт задейства 16-битовата операция за четене или запис. Когато малкият байт на 16-битов регистър се записва от процесора, високият байт, съхранен във временния регистър, и записаният нисък байт се копират в 16-битовия регистър в един и същи тактов цикъл. Когато малкият байт на 16-битов регистър се чете от процесора, високият байт на 16-битовия регистър се копира във временния регистър в същия тактов цикъл, както се чете ниският байт.

Така че изглежда, че се случва подобно нещо.

person John Szakmeister    schedule 31.08.2012