複数のチップのマジック アドレスのリストをチップ メーカーから入手するにはどうすればよいですか? それがサポートする価値についてのまともな説明はありますか?
私はそれを呼び出す/検索する用語さえ理解できませんでした。
組み込みプログラミングを始めたばかりです。あらゆる種類のものに設定しなければならない魔法のビットがたくさんあります。
通常、私は何かに遭遇します:
MOV BLKMGC 0x01
また
REO034 = 0x80; // stops all onboard leds, boot freebsd, makes coffee, do laundy.
// use 0x81 if you have more white clothes than color ones.
彼らが何をしているのかを説明するコメントが時々あります。私は主に、サンプル コードで見つけたすべてのメモを取っています。通常、msp430 ランチパッド用のものは、親切で冗長な人々によって書かれており、多くのコメントがあり、チップ ファミリ ノートでアドレス マップの一部を見つけることさえできますが、理解できるリストはほとんどありません。それを完全に理解しようとすると、Arduinosでより一般的なチップがさらに望まれます。(確かに、私はまだそれを検索する方法がわかりません:)
私がこれまでに見つけた最良の場所は、私が使用しているチップのヘッダーファイルです...しかし、それでも、次の例を見てください:
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // Stop Watch Dog Timer
// how 99% of msp430 programs start.
今ヘッダーファイル:
#define WDTCTL_ 0x0120 /* Watchdog Timer Control */
sfrw(WDTCTL, WDTCTL_);
/* The bit names have been prefixed with "WDT" */
#define WDTIS0 (0x0001)
#define WDTIS1 (0x0002)
#define WDTSSEL (0x0004)
#define WDTCNTCL (0x0008)
#define WDTTMSEL (0x0010)
#define WDTNMI (0x0020)
#define WDTNMIES (0x0040)
#define WDTHOLD (0x0080)
#define WDTPW (0x5A00)
/* WDT-interval times [1ms] coded with Bits 0-2 */
/* WDT is clocked by fSMCLK (assumed 1MHz) */
#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */
#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms " */
#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms " */
#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */
/* WDT is clocked by fACLK (assumed 32KHz) */
#define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms " */
#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */
#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */
#define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */
/* Watchdog mode -> reset after expired time */
/* WDT is clocked by fSMCLK (assumed 1MHz) */
#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */
#define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms " */
#define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms " */
#define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */
/* WDT is clocked by fACLK (assumed 32KHz) */
#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */
#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */
#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */
#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */
個々のビットの説明も、最も一般的なものとの既製の組み合わせもありません。
ボーナス暴言の質問
常に強力でほとんどアイドル状態のパーソナル コンピュータでコンパイルされるため、すべてのコンパイラ/IDE がベア メタルの使いやすさを模倣することを選択するのはなぜですか? それを行うためのより良いフォーマットがたくさんありませんか?パフォーマンスに夢中にならないのであれば、アドレス 0x0120 に値 0x5A80 を設定するとウォッチドッグ タイマーが停止することを平凡なコーディングで知っておく必要がありますか? ヘッダー ファイル/IDE は私にそれを作ることはできwatch_dog_timer( STOP );
ませんか?