MCU知識(shí)總結(jié)
1. Brown-Out Reset
掉電復(fù)位,或電源電壓跌落復(fù)位, 當(dāng)輸入電壓VCC跌到某一門(mén)限時(shí)芯片復(fù)位
The MCU is reset when the supply voltage VCC is below the Brown-Out Reset threshold voltage
and the Brown-out Detector is enabled. The Brown-out threshold voltage is programmable.
2. Totem-pole
推拉輸出電路
3. IAR調(diào)試出現(xiàn)The stack plug-in failed to set a breakpoint on "main". The Stack window will not be able to display stack contents. (You can change this setting in the Tool>Options dialog box.)的警告,程序能燒進(jìn)去,但不能調(diào)試。
需要進(jìn)行如下配置:
iar->options->linker->output->format;
選擇 Debug information for c-SPY選項(xiàng)
4. newlib
newlib是一個(gè)用于嵌入式系統(tǒng)的開(kāi)放源代碼的C語(yǔ)言程序庫(kù),由libc和libm兩個(gè)庫(kù)組成,特點(diǎn)是輕量級(jí),速度快,可移植到很多CPU結(jié)構(gòu)上。newlib實(shí)現(xiàn)了許多復(fù)雜的功能,包括字符串支持,浮點(diǎn)運(yùn)算,內(nèi)存分配(如malloc)和I/O流函數(shù)(printf,fprinf()等等)。其中l(wèi)ibc提供了c 語(yǔ)言庫(kù)的實(shí)現(xiàn),而libm提供了浮點(diǎn)運(yùn)算支持。
5. Open-drain
open-drain是漏極開(kāi)路輸出的意思,相當(dāng)于集電極開(kāi)路(open-collector)輸出,即ttl中的集電極開(kāi)路(oc)輸出。
一般用于線或、線與,也有的用于電流驅(qū)動(dòng)。
open-drain是對(duì)mos管而言,open-collector是對(duì)雙極型管而言,在用法上沒(méi)啥區(qū)別。
開(kāi)漏形式的電路有以下幾個(gè)特點(diǎn):
(1). 利用外部電路的驅(qū)動(dòng)能力,減少I(mǎi)C內(nèi)部的驅(qū)動(dòng)。 或驅(qū)動(dòng)比芯片電源電壓高的負(fù)載.
(2).可以將多個(gè)開(kāi)漏輸出的Pin,連接到一條線上。通過(guò)一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。如果作為圖騰輸出必須接上拉電阻。接容性負(fù)載時(shí),下降延是芯片內(nèi)的晶體管,是有源驅(qū)動(dòng),速度較快;上升延是無(wú)源的外接電阻,速度慢。如果要求速度高電阻選擇要小,功耗會(huì)大。所以負(fù)載電阻的選擇要兼顧功耗和速度。
(3). 可以利用改變上拉電源的電壓,改變傳輸電平。例如加上上拉電阻就可以提供TTL/CMOS電平輸出等。
(4). 開(kāi)漏Pin不連接外部的上拉電阻,則只能輸出低電平。一般來(lái)說(shuō),開(kāi)漏是用來(lái)連接不同電平的器件,匹配電平用的。
6.C語(yǔ)言中將絕對(duì)地址轉(zhuǎn)換為函數(shù)指針以及跳轉(zhuǎn)到內(nèi)存指定位置處執(zhí)行的技巧
要對(duì)絕對(duì)地址0x100000賦值,我們可以用
* (unsigned int * ) 0x100000 = 1234;
那么要是想讓程序跳轉(zhuǎn)到絕對(duì)地址是0x100000去執(zhí)行,應(yīng)該怎么做?
*((void (*)( ))0x100000 ) ( );
首先要將0x100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即:
(void (*)())0x100000
然后再調(diào)用它:
*((void (*)())0x100000)();
用typedef可以看得更直觀些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
又如
如果用 C 語(yǔ)言,可以像下列示例代碼這樣來(lái)調(diào)用內(nèi)核:
void (*theKernel)(int zero, int arch, u32 params_addr)
= (void (*)(int, int, u32))KERNEL_RAM_BASE;
……
theKernel(0, ARCH_NUMBER, (u32) kernel_params_start);
KERNEL_RAM_BASE 是內(nèi)核在系統(tǒng)內(nèi)存中的第一條指令的地址。
7. On Die Termination
ODT(On-die Termination,片內(nèi)終結(jié)器)是內(nèi)建核心的終結(jié)電阻器。
使用DDR SDRAM的主板上面為了防止數(shù)據(jù)線終端反射信號(hào)需要大量的終結(jié)電阻,它大大增加了主板的制造成本。實(shí)際上,不同的內(nèi)存模組對(duì)終結(jié)電路的要求是不一樣的,終結(jié)電阻的大小決定了數(shù)據(jù)線的信號(hào)比和反射率。因此主板上的終結(jié)電阻并不能非常好地匹配內(nèi)存模組,還會(huì)在一定程度上影響信號(hào)品質(zhì)。DDRII內(nèi)建了終結(jié)電阻器,為DDRII帶來(lái)了兩個(gè)好處,一個(gè)是去掉了主板上的終結(jié)電阻器使主板的成本降低,也使PCB板的設(shè)計(jì)更加容易。第二個(gè)好處是終結(jié)電阻器可以和內(nèi)存顆粒的"特性"相符,使DRAM處于最佳狀態(tài)。看完全文了嗎?喜歡就一起來(lái)點(diǎn)個(gè) 贊 吧!
編輯:admin 最后修改時(shí)間:2018-05-19