1

私のマイクロコントローラー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")

上記の引用がC8051F120のTMRnLおよびTMRnHレジスタにも当てはまるかどうか誰かが知っていますか?または、一貫した読書をするための安全な方法は何ですか?割り込みを無効にする必要がありますか?ご協力いただきありがとうございます!

4

1 に答える 1

2

データシートの116ページには次のように書かれています。

TCNTn、OCRnx、およびICRnは、8ビットデータバスを介してAVRCPUからアクセスできる16ビットレジスタです。16ビットレジスタは、2つの読み取りまたは書き込み操作を使用してバイトアクセスする必要があります。各16ビットタイマーには、16ビットアクセスの上位バイトを一時的に格納するための単一の8ビットレジスタがあります。同じ一時レジスタが、各16ビットタイマ内のすべての16ビットレジスタ間で共有されます。下位バイトにアクセスすると、16ビットの読み取りまたは書き込み操作がトリガーされます。16ビットレジスタの下位バイトがCPUによって書き込まれると、一時レジスタに格納されている上位バイトと書き込まれた下位バイトの両方が同じクロックサイクルで16ビットレジスタにコピーされます。16ビットレジスタの下位バイトがCPUによって読み取られると、16ビットレジスタの上位バイトは、下位バイトが読み取られるのと同じクロックサイクルで一時レジスタにコピーされます。

したがって、同様のことが起こっているように見えます。

于 2012-08-31T09:58:31.990 に答える