作者:戴上舉 daishangju@163.com 不經(jīng)意間,“酷睿雙核”已經(jīng)成為電腦CPU性能達(dá)標(biāo)的代名詞,雙核從字面意思理解就是里面有兩個(gè)CPU的核,原來(lái)一臺(tái)電腦只有一個(gè)CPU核處理事情,如果用了雙核CPU,就有兩個(gè)CPU核來(lái)處理事情,這樣速度和效能會(huì)更高。 這樣在一般人眼里,雙核儼然代表了先進(jìn)的技術(shù)和先進(jìn)的性能,當(dāng)然同時(shí)也代表著先進(jìn)的價(jià)格,不信可以去回顧一下市場(chǎng)價(jià)格,同一時(shí)期雙核電腦CPU要比單核的價(jià)格高不少。 從性能和價(jià)格上電腦CPU和單片機(jī)是沒(méi)有可比性,如果說(shuō)電腦CPU是大佬,那么單片機(jī)就是大佬馬仔的馬仔的馬仔的馬仔的馬仔。既然雙核電腦CPU性能比單核的要強(qiáng)大不少,作為和電腦CPU八百年前祖上是一家的單片機(jī),如果也用雙核技術(shù),想必性能也會(huì)提升不少。 理論上講設(shè)計(jì)出雙核單片機(jī)完全沒(méi)有問(wèn)題,只是單片機(jī)要求價(jià)格便宜,要是設(shè)計(jì)出一款雙核單片機(jī),假設(shè)性能可以提升一倍,但價(jià)格也要上升許多,恐怕不會(huì)有多少人可以用。 在我的潛意識(shí)里,一直都認(rèn)為雙核單片機(jī)是一種相對(duì)昂貴的產(chǎn)品,應(yīng)該沒(méi)有機(jī)會(huì)和現(xiàn)在大量?jī)r(jià)格不超過(guò)人民幣1塊錢(qián)的普通單片機(jī)進(jìn)行競(jìng)爭(zhēng),直到去年底接觸到臺(tái)灣應(yīng)廣科技的一款雙核單片機(jī),才徹底改變了我這種認(rèn)識(shí)。 在介紹這種雙核單片機(jī)之前,讓我們一起了解一下目前市場(chǎng)上價(jià)格不超過(guò)人民幣1塊錢(qián)的一些單片機(jī),這些單片機(jī)的具體性能參數(shù)不做介紹,這里只列舉大致參考價(jià)格(可能存在少許偏差)。 義隆 EM78P153 市場(chǎng)參考價(jià)0.7~0.8元 飛凌 兼容版153 市場(chǎng)參考價(jià)0.55~0.6元 博巨興 兼容版153 市場(chǎng)參考價(jià)0.45~0.55元 麥肯、佑華等公司性能相當(dāng)型號(hào) 市場(chǎng)參考價(jià) 0.6~0.7元 在讓我們來(lái)看一下這款單片機(jī)的一些性能參數(shù): 內(nèi)置2個(gè)FPPA處理單元 1k Word OTP 程序存儲(chǔ)器 64 Bytes RAM 數(shù)據(jù)存儲(chǔ)器 包含跳轉(zhuǎn)指令在內(nèi)的絕大多數(shù)指令為單周期指令 支持位操作 支持硬件延時(shí)和等待指令 *注1 *注2 13條雙向IO口+1條輸入口 3通道8位A/D轉(zhuǎn)換器 IO支持VDD/2電壓驅(qū)動(dòng)LCD 內(nèi)部低速RC、內(nèi)部高速RC、外部振蕩器、外部RC、外部時(shí)鐘可選 休眠電流<1uA 工作電壓 2.5~5.5V 工作溫度 -40~105攝氏度 (*注1:該單片機(jī)支持delay 100指令,該指令為延時(shí)等待100+1個(gè)周期) (*注2:該單片機(jī)支持wait1 pa.0指令,該指令為當(dāng)pa.0為高時(shí)才執(zhí)行下一條指令) 以我個(gè)人的經(jīng)驗(yàn),現(xiàn)在市面上的單片機(jī),如果想找出一款支持PWM、ADC、UART中任意一種功能的型號(hào),價(jià)格一般都超過(guò)人民幣1塊錢(qián),而且一般都只支持其中的一到兩種,除非是價(jià)格達(dá)到2~3元的型號(hào)。而如果選用前面列舉參數(shù)的單片機(jī),本身硬件已經(jīng)直接支持ADC,而且還可以通過(guò)軟件在不影響主程序的前提下實(shí)現(xiàn)高速PWM和UART功能。 上圖為該雙核單片機(jī)的內(nèi)部構(gòu)架示意圖,從圖可見(jiàn)該單片機(jī)內(nèi)部有兩個(gè)核,分別為FPP0和FPP1,每個(gè)核自己有獨(dú)立的程序指針(PC)、堆棧指針(SP)、累加器(ACC)和狀態(tài)寄存器(CF)。設(shè)計(jì)原理并不復(fù)雜,是讓這兩個(gè)核共享系統(tǒng)時(shí)鐘,第一個(gè)系統(tǒng)時(shí)鐘周期執(zhí)行FPP0程序,第二個(gè)系統(tǒng)時(shí)鐘周期執(zhí)行FPP1程序,依次間隔往復(fù),這樣就可以讓兩個(gè)核各自運(yùn)行自己的程序。 兩個(gè)核都可以訪問(wèn)控制RAM和特殊功能寄存器,因?yàn)樵谝粋(gè)系統(tǒng)周期內(nèi)只有一個(gè)核在工作,所以不會(huì)出現(xiàn)兩個(gè)核同時(shí)寫(xiě)某個(gè)RAM或寄存器的狀況。為了讓大家更清晰地理解這個(gè)雙核單片機(jī)的工作機(jī)理,下面我以問(wèn)答的方式對(duì)部分特性進(jìn)行說(shuō)明。 1. 兩個(gè)核的程序放在什么地方?如何執(zhí)行? 樣例代碼: 地址 指令 0x000 goto main0 0x001 goto main1 ... main0: ... main1: ... 回答:?jiǎn)纹瑱C(jī)上電后FPP0的程序指針指向0x000,F(xiàn)PP1的程序指針指向0x001,但是單片機(jī)系統(tǒng)只啟動(dòng)FPP0,F(xiàn)PP0跳轉(zhuǎn)到main0開(kāi)始執(zhí)行該位置的代碼,F(xiàn)PP1需要在main0代碼設(shè)置相應(yīng)控制寄存器位才能啟動(dòng)。 系統(tǒng)上電只啟動(dòng)FPP0是為了便于程序統(tǒng)一初始化各特殊功能寄存器,如果在FPP0和FPP1中都分別進(jìn)行初始化,很有可能造成系統(tǒng)配置混亂。 2. 如果我在main1中使用跳轉(zhuǎn)指令跳轉(zhuǎn)到main0中,會(huì)有什么后果? goto main0 goto main1 ... main0: ... main0_loop: ... goto main0_loop ... main1: ... goto main0 //***這里跳轉(zhuǎn)到main0中***// ... 回答:編譯器會(huì)報(bào)警出錯(cuò),所以后果就是代碼錯(cuò)誤無(wú)法通過(guò)編譯,需要?jiǎng)h除該代碼。 3. 會(huì)不會(huì)出現(xiàn)兩個(gè)核同時(shí)寫(xiě)某個(gè)RAM變量而導(dǎo)致寫(xiě)失敗的情況? 回答:每個(gè)系統(tǒng)時(shí)鐘周期只有一個(gè)核會(huì)工作,所以不會(huì)出現(xiàn)兩個(gè)核在同一時(shí)刻寫(xiě)同一地址的情況。 4. 既然FPP1需要FPP0的程序來(lái)啟動(dòng),那不啟動(dòng)FPP1時(shí)是不是FPP0運(yùn)行速度會(huì)增快一倍呢? 回答:?jiǎn)?dòng)FPP1與不啟動(dòng)FPP1不影響FPP0的運(yùn)行速度,F(xiàn)PP0的速度總是系統(tǒng)時(shí)鐘的一半,這個(gè)是由系統(tǒng)硬件自動(dòng)進(jìn)行分配的,不啟動(dòng)FPP1的影響是在屬于FPP1的那一半時(shí)間單片機(jī)沒(méi)有執(zhí)行代碼。 5. 應(yīng)廣雙核單片機(jī)支持中斷嗎? 回答:應(yīng)廣雙核單片機(jī)支持中斷,中斷源和其它普通單片機(jī)沒(méi)有太多差異,象常見(jiàn)的外部中斷、定時(shí)中斷、ADC中斷都支持,使用上也和其它普通單片機(jī)沒(méi)有區(qū)別。 要留意的是應(yīng)廣雙核單片機(jī)的中斷程序只能由FPP0使用,所有的中斷源共用一個(gè)中斷入口,需要用戶通過(guò)中斷標(biāo)志位判斷中斷類(lèi)型。另外該單片機(jī)支持中斷嵌套,需要用戶自己對(duì)累加器和狀態(tài)寄存器進(jìn)行壓棧和彈棧操作。 6. 應(yīng)廣雙核單片機(jī)采用什么語(yǔ)言編程?好不好掌握? 回答:應(yīng)廣雙核單片機(jī)IDE編譯環(huán)境支持匯編和Mini C,非常容易上手,可以說(shuō)是目前單片機(jī)IDE編譯環(huán)境最好掌握的。 就是經(jīng)驗(yàn)豐富的工程師,不少單片機(jī)開(kāi)發(fā)工具拿到手后都需要提供個(gè)相對(duì)完整的工程樣例才能開(kāi)始編程,有的單片機(jī)甚至寫(xiě)完代碼后工程師都還不會(huì)自己創(chuàng)建新工程。應(yīng)廣提供的IDE開(kāi)發(fā)環(huán)境完全是智能傻瓜式,根本不需要任何樣例代碼,拿著datasheet就可以開(kāi)始編程。 應(yīng)廣雙核單片機(jī)總共有90余條匯編指令,IDE編譯器支持匯編和基本C語(yǔ)句混合編程,而且IDE編譯器會(huì)自動(dòng)識(shí)別,不象其它編譯器需要使用偽指令進(jìn)行標(biāo)示,我們可以通過(guò)一些簡(jiǎn)單例子來(lái)感受其編程的便捷性。 代碼樣例1 .romadr 0x000 //這一句也可以去掉,沒(méi)有這一句編譯器會(huì)自動(dòng)從0地址開(kāi)始放代碼,是同樣結(jié)果 goto main0 goto main1 .romadr 0x010 ... main0: ... main0_loop: //這里是用匯編實(shí)現(xiàn)FPP0主循環(huán) ... goto main0_loop ... main1: ... while(1) //這里是用基本C語(yǔ)句實(shí)現(xiàn)循環(huán) { ... } 代碼樣例2 word word_data //定義一個(gè)WORD變量 byte byte_data //定義一個(gè)字節(jié)變量 bit bit_data //定義一個(gè)位變量 ... set1 bit_data //用匯編指令設(shè)置該位變量為1 set1 byte_data.5 //用匯編指令將該字節(jié)變量的bit5設(shè)為1,不需要在變量中進(jìn)行位定義 bit_data = 0 //用C基本語(yǔ)法將位變量清0 byte_data = 0 //用C基本語(yǔ)法將字節(jié)變量清0 mov a,0x12 //用匯編將WORD變量賦值0x3412 mov lb@word_data,a mov a,0x34 mov hb@word_data,a word_data = 0x5678 //用C基本語(yǔ)法將WORD變量賦值0x5678 pa = 0b111_101_00 //用二進(jìn)制對(duì)pa口進(jìn)行設(shè)置,注意可以自由添加下劃線做分隔標(biāo)示符 pb = 0b11110000 // ... word_data = 0 //C基本語(yǔ)句和匯編可以任意組合 byte_data = 100 while(byte_data) { word_data++ byte_data-- mov a,byte_data mov pa,a } 要留意的是對(duì)于分號(hào)(;)編譯器當(dāng)做注釋符,所以使用C語(yǔ)句時(shí)不能用分號(hào),這樣for(;;)循環(huán)就無(wú)法使用。另外編譯器對(duì)部分C語(yǔ)法支持有限,建議只用最基本的C指令。 7. 應(yīng)廣雙核單片機(jī)開(kāi)發(fā)環(huán)境復(fù)雜嗎?是否支持在線編程? 回答:應(yīng)廣雙核單片機(jī)的開(kāi)發(fā)環(huán)境非常精簡(jiǎn),IDE編譯器和燒錄軟件的安裝文件大小總共不到7M,安裝后就編譯和燒錄兩個(gè)文件。 編譯器自帶樣例工程,并可用指定IO口自動(dòng)生成軟件模擬的UART/SPI/I2C等代碼。 目前應(yīng)廣單片機(jī)均為OTP類(lèi)型,需要專(zhuān)門(mén)的仿真器進(jìn)行調(diào)試,然后用專(zhuān)門(mén)的燒錄器進(jìn)行燒寫(xiě)。仿真器和燒錄器都是免驅(qū)動(dòng)USB接口,插上電腦即可使用。 8. 應(yīng)廣雙核單片機(jī)價(jià)格貴嗎?和其它普通單片機(jī)相比最大優(yōu)勢(shì)是什么? 回答:應(yīng)廣雙核單片機(jī)價(jià)格不但不貴,而且可以說(shuō)相當(dāng)便宜。前面我有介紹部分其它品牌單片機(jī)市場(chǎng)參考價(jià),這里我不能很詳細(xì)的透露應(yīng)廣的價(jià)格,但可以很明確的告訴大家,應(yīng)廣的價(jià)格和上述單片機(jī)比非常有競(jìng)爭(zhēng)力。 和其它普通單片機(jī)相比,在我看來(lái)最大優(yōu)勢(shì)是用硬件在一個(gè)簡(jiǎn)單的單片機(jī)上實(shí)現(xiàn)了類(lèi)似多任務(wù)操作系統(tǒng)的功能,在一些需要處理多個(gè)實(shí)時(shí)性比較強(qiáng)的事件時(shí)會(huì)非常簡(jiǎn)單。除了雙核單片機(jī),應(yīng)廣還有四核和八核的型號(hào),價(jià)格約為雙核的2~3倍。 9. 應(yīng)廣雙核單片機(jī)性能穩(wěn)定嗎?抗干擾能力怎么樣? 回答:我的回答肯定是性能穩(wěn)定,抗干擾能力強(qiáng)。 客觀的說(shuō)個(gè)說(shuō)法需要大量用戶的實(shí)際產(chǎn)品應(yīng)用作為輔證,應(yīng)廣科技是臺(tái)灣近幾年才升起的一家公司,和松翰與義隆有一定技術(shù)淵源,從技術(shù)上講不會(huì)弱于這兩家,而且已經(jīng)有相當(dāng)數(shù)量的出貨量,從客戶反饋看在穩(wěn)定性和抗干擾能力方面都不錯(cuò),比較典型的用戶是用到HW公司產(chǎn)品的風(fēng)扇控制上。 10. 能否通過(guò)一些應(yīng)用實(shí)例來(lái)讓大家了解應(yīng)廣雙核單片機(jī)針對(duì)某些應(yīng)用場(chǎng)合的便捷性? 例1:目前價(jià)格低于0.2美元的單片機(jī)大都不帶UART(串口)硬件,如果用一款低價(jià)單片機(jī)開(kāi)發(fā)需要支持串口通訊的產(chǎn)品,只能是用IO口軟件模擬串口。 用IO口軟件模擬串口的代碼并不復(fù)雜,但如果單片機(jī)還要處理其它事情,就會(huì)遇到麻煩。假定通訊速率是9600,這樣每個(gè)位寬大約為104us。 一種方法是直接在主程序中循環(huán)完成通訊,這樣當(dāng)有數(shù)據(jù)收發(fā)的時(shí)候就無(wú)法處理其它事情,每個(gè)字節(jié)會(huì)占用超過(guò)1ms的時(shí)間,數(shù)據(jù)越多,占用的時(shí)間越長(zhǎng),對(duì)于數(shù)據(jù)發(fā)送處理還好,數(shù)據(jù)接收就會(huì)很麻煩,理論上需要程序每52us去查看一次IO狀態(tài)才行,這樣的程序只要簡(jiǎn)單一想就知道編寫(xiě)起來(lái)不是一件簡(jiǎn)單的事情。 另一種方法是用中斷,這種處理方法比循環(huán)的要簡(jiǎn)便一些,但要做到同時(shí)收發(fā)和兼顧處理其它事情,同樣也不是一件簡(jiǎn)單的事情。 對(duì)于普通單片機(jī)如果只處理串口數(shù)據(jù)收發(fā),不做其它事情,不管程序循環(huán)還是中斷方式,程序相對(duì)都不會(huì)太過(guò)復(fù)雜,上面只所以復(fù)雜是需要同時(shí)處理其它的事情。 使用應(yīng)廣雙核單片機(jī)就可以很好的解決這個(gè)問(wèn)題,首先價(jià)格上不會(huì)超過(guò)0.2美元;其次代碼會(huì)相對(duì)簡(jiǎn)單,一個(gè)內(nèi)核處理主程序,一個(gè)內(nèi)核專(zhuān)門(mén)負(fù)責(zé)串口通訊,兩者都會(huì)有很好的實(shí)時(shí)性。 例2:處理38K紅外遙控碼。 38K紅外遙控碼是頻率38K占空比為1:2的方波,如果單片機(jī)硬件不支持IR接口,就需要單片機(jī)能連續(xù)輸出寬度約為9us和18us的高低電平。如果要單片機(jī)輸出這種周期持續(xù)穩(wěn)定的方波,在發(fā)碼期間基本上不能使用中斷,象東芝碼一次發(fā)碼時(shí)間大約需要60ms,這樣就會(huì)嚴(yán)重影響程序的計(jì)時(shí)等功能。 紅外碼的接收相對(duì)要好一些,每個(gè)碼都有幾百微秒的時(shí)間,采用中斷完全可以實(shí)現(xiàn)解碼,唯一麻煩的是紅外碼通常都是數(shù)據(jù)包,而且數(shù)據(jù)包中間還包含一些特殊格式,不象串口所有的字節(jié)碼都是固定格式,這樣需要程序按照特定流程才能解碼,無(wú)法象串口一樣只要一個(gè)字節(jié)的接收程序就可以完成所有數(shù)據(jù)的接收,所以紅外的接收解碼程序會(huì)比較長(zhǎng),中間如果夾入其它事情處理就會(huì)變得很復(fù)雜。 以我個(gè)人的經(jīng)驗(yàn),普通單片機(jī)完成紅外遙控碼的處理,大約需要2~3天時(shí)間,最終效果不會(huì)太好,但如果使用應(yīng)廣雙核單片機(jī),半天即可完成,代碼數(shù)量要少許多,效果則是更理想。 例3:一個(gè)用應(yīng)廣雙核單片機(jī)做的紅外遮擋開(kāi)光(反射式)全部代碼。 IR_SW equ pb.1 IR_INPUT equ pa.0 IR_OUTPUT equ pa.6 byte ir_new byte ir_old byte ir_enable byte i byte ir_new1 byte ir_new2 byte ir_new3 goto main0 goto main1 //----------------FPPA0------------------- main0: .ADJUST_OTP_IHRCR 8MIPS // IHRC/2 = 8MIPS, WatchDog Disable, RAM 0,1 temporary be used sp = 0x30 disgint inten = 0 mov a,0b000_11_111 //disable timer mov t16m,a set1 pbc.1 set0 IR_SW set0 pac.0 set1 pac.6 set0 IR_OUTPUT delay 200 ir_new = 0 ir_old = 0 ir_enable = 0 mov a,0 mov intrq,a set1 fppen.1 //eanble FPPA1 ir_enable = 1 i = 20 while(i) { delay 200 i-- } if(IR_INPUT) { ir_old = 1 } else { ir_old = 0 } ir_enable = 0 i = 5 while(i) { delay 200 i-- } clkmd.1 = 1 //enable watch dog main0_loop: wdreset call check_ir if(ir_new != ir_old) { if(ir_new != 1) { tog IR_SW } ir_old = ir_new } i = 100 while(i) { delay 200 i-- } goto main0_loop check_ir: ir_enable = 1 i = 20 while(i) { delay 200 i-- } if(IR_INPUT) { ir_new1 = 1 } else { ir_new1 = 0 } i = 5 while(i) { delay 200 i-- } if(IR_INPUT) { ir_new2 = 1 } else { ir_new2 = 0 } i = 5 while(i) { delay 200 i-- } if(IR_INPUT) { ir_new3 = 1 } else { ir_new3 = 0 } if((ir_new1 == ir_new2) && (ir_new2 == ir_new3)) { ir_new = ir_new1 } else { ir_new = ir_old } ir_enable = 0 i = 20 while(i) { delay 200 i-- } ret //----------------FPPA1------------------- main1: sp = 0x38 delay 200 main1_loop: //output 38k IR signal if(ir_enable) { set1 IR_OUTPUT delay 33 set0 IR_OUTPUT delay 67 } else { set0 IR_OUTPUT delay 10 } goto main1_loop 11. 應(yīng)廣雙核單片機(jī)存在哪些不足? 回答:到目前為止已經(jīng)上市的所有型號(hào)最低工作電壓為2.5V,這個(gè)電壓值有點(diǎn)高,不適合電池供電的產(chǎn)品,如果能做到2.2V會(huì)更具競(jìng)爭(zhēng)力。了解到的信息是應(yīng)廣科技有計(jì)劃推出更低工作電壓的版本。 編譯工具存在一些不足,對(duì)C語(yǔ)言的支持并不是很理想,仿真時(shí)選擇3.3V工作電壓容易產(chǎn)生低電壓復(fù)位(此時(shí)需要保證工作電壓大于3.3V)。對(duì)于有經(jīng)驗(yàn)的工程師這點(diǎn)不是關(guān)鍵問(wèn)題,開(kāi)發(fā)過(guò)程可以繞過(guò)這些不足。 部分型號(hào)的ADC精度略微偏低,但可滿足大部分場(chǎng)合的應(yīng)用需求。 某些功能上存在個(gè)別瑕疵,不過(guò)應(yīng)廣科技在其網(wǎng)頁(yè)上已經(jīng)將這些瑕疵全部列舉出來(lái),并提出了相應(yīng)解決方法。這一點(diǎn)比其它公司要做得好,其它公司往往是用到最后才發(fā)現(xiàn)有這樣那樣的問(wèn)題,還有可能是無(wú)法解決的問(wèn)題,讓用戶進(jìn)退兩難。 12. 應(yīng)廣科技對(duì)客戶的技術(shù)支持是否及時(shí)? 回答:應(yīng)廣科技作為一家成立時(shí)間不長(zhǎng)的公司,非常重視客戶服務(wù),無(wú)論大小客戶,只要你在使用應(yīng)廣科技的產(chǎn)品進(jìn)行開(kāi)發(fā),所有技術(shù)問(wèn)題都有專(zhuān)人進(jìn)行回復(fù),通常會(huì)在第二個(gè)工作日回復(fù)電子郵件。 13. 應(yīng)廣的雙核單片機(jī)保密性怎樣?花多少錢(qián)可以解密? 回答:相較其它臺(tái)系單片機(jī),應(yīng)廣有著良好的保密性,目前市場(chǎng)上暫無(wú)提供針對(duì)應(yīng)廣單片機(jī)的解密服務(wù)。 14. 如果我想用應(yīng)廣的單片機(jī)開(kāi)發(fā)產(chǎn)品?什么地方可以買(mǎi)到芯片和開(kāi)發(fā)工具? 回答:這個(gè)需要聯(lián)系當(dāng)?shù)氐拇砩蹋绻恢来砩炭梢灾苯勇?lián)系應(yīng)廣科技進(jìn)行咨詢,應(yīng)廣科技網(wǎng)址www.padauk.com.tw 我這里不提供應(yīng)廣單片機(jī)裸片,但可以根據(jù)客戶需求用應(yīng)廣雙核單片機(jī)完成產(chǎn)品開(kāi)發(fā),并且不收開(kāi)發(fā)費(fèi)。 15. 哪些產(chǎn)品適合選用應(yīng)廣的單片機(jī)? 回答:這個(gè)問(wèn)題有點(diǎn)不好回答,其實(shí)蠻多場(chǎng)合都挺適合的,可以這么說(shuō),相信你一旦使用過(guò)應(yīng)廣的產(chǎn)品,就會(huì)喜歡上它。 在我看來(lái),用義隆153做有點(diǎn)難,用松翰和合泰單片機(jī)做有點(diǎn)貴,這類(lèi)產(chǎn)品最適合應(yīng)廣的單片機(jī);當(dāng)然,那種帶有通訊等實(shí)時(shí)性強(qiáng)功能的低成本方案應(yīng)廣更是不二選擇。 |