我如何从芯片制造商那里找到几个芯片的幻地址列表?对它所支持的价值观进行了体面的解释?
我什至无法弄清楚调用/搜索它的术语。
刚开始嵌入式编程。我必须为各种事情设置大量的魔法位。
通常我会遇到一些事情:
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 );
让我使用吗?