電子系統(tǒng)設(shè)計(jì)(第二版)課件:數(shù)據(jù)通信_(tái)第1頁(yè)
電子系統(tǒng)設(shè)計(jì)(第二版)課件:數(shù)據(jù)通信_(tái)第2頁(yè)
電子系統(tǒng)設(shè)計(jì)(第二版)課件:數(shù)據(jù)通信_(tái)第3頁(yè)
電子系統(tǒng)設(shè)計(jì)(第二版)課件:數(shù)據(jù)通信_(tái)第4頁(yè)
電子系統(tǒng)設(shè)計(jì)(第二版)課件:數(shù)據(jù)通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩124頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)通信6.1RS-232通信6.2RS-485通信6.3紅外通信6.4無(wú)線(xiàn)通信設(shè)備之間的數(shù)據(jù)通信是產(chǎn)品設(shè)計(jì)中常見(jiàn)的要求,數(shù)據(jù)通信的實(shí)現(xiàn)方法較多,總體歸納為無(wú)線(xiàn)和有線(xiàn)兩種。無(wú)線(xiàn)通信主要有紅外、藍(lán)牙、ZigBee等,有線(xiàn)通信主要有RS-232、USB、M_BUS、CAN等。本章主要介紹設(shè)計(jì)中常用的幾種較易實(shí)現(xiàn)的通信方法,如RS-232、RS-485、紅外和CC1100。對(duì)于藍(lán)牙、USB等可以通過(guò)專(zhuān)用的轉(zhuǎn)換芯片將其轉(zhuǎn)換為常見(jiàn)的UART通信方式,本章不做具體講解。

計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與終端之間的數(shù)據(jù)傳送可以采用串行通信和并行通信兩種方式。由于串行通信方式具有使用線(xiàn)路少、成本低,特別是在遠(yuǎn)程傳輸時(shí),避免了多條線(xiàn)路特性的不一致而被廣泛采用。在串行通信時(shí),要求通信雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來(lái)進(jìn)行通信。6.1RS-232通信RS-232-C接口(又稱(chēng)EIARS-232-C)是目前最常用的一種串行通信接口,它是在1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠(chǎng)家及計(jì)算機(jī)終端生產(chǎn)廠(chǎng)家共同制定的用于串行通信的標(biāo)準(zhǔn),全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)引腳的DB-25連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。

(1)接口的信號(hào)內(nèi)容:RS-232-C的25條引線(xiàn)中有許多是很少使用的,在計(jì)算機(jī)與終端通信中一般只使用3~9條引線(xiàn)。

(2)接口的電氣特性:在RS-232-C中任何一條信號(hào)線(xiàn)的電壓均為負(fù)邏輯關(guān)系。即:邏輯“1”,電平為

-5V~-15V;邏輯“0”,電平為

+5V~+15V;噪聲容限為2V。要求接收器能識(shí)別低至

+3V的信號(hào)作為邏輯“0”,高到

-3V的信號(hào)作為邏輯“1”。

(3)接口的物理結(jié)構(gòu):RS-232-C接口連接器一般使用型號(hào)為DB-25的25芯插頭座,通常插頭在DCE端,插座在DTE端。一些設(shè)備與PC連接的RS-232-C接口,因?yàn)椴皇褂脤?duì)方的傳送控制信號(hào),只需三條接口線(xiàn),即“發(fā)送數(shù)據(jù)”、“接收數(shù)據(jù)”和“信號(hào)地”,所以采用DB-9的9芯插頭座,傳輸線(xiàn)采用屏蔽雙絞線(xiàn)。

(4)傳輸電纜長(zhǎng)度:由于RS-232-C標(biāo)準(zhǔn)規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50英尺,其實(shí)這個(gè)4%的碼元畸變是很保守的,在實(shí)際應(yīng)用中,約有99%的用戶(hù)是按碼元畸變10%~20%的范圍工作的,所以實(shí)際使用中最大距離會(huì)遠(yuǎn)超過(guò)50英尺。6.1.1RS-232通信芯片

RS-232通信芯片較多,幾乎每個(gè)IC廠(chǎng)商都生產(chǎn),下面以SIPEX公司生產(chǎn)的SP3232E為例介紹其功能。

SP3232E接收器滿(mǎn)足EIA/TIA-232通信協(xié)議,包含SIPEX系列特有的片內(nèi)電荷泵電路,可從3.0V~5.5V的電源電壓產(chǎn)生2

×

UCC的RS-232電壓電平。SP3232E由3個(gè)基本電路模塊組成:驅(qū)動(dòng)器、接收器和電荷泵。

驅(qū)動(dòng)器是一個(gè)反相發(fā)送器,它將TTL或CMOS邏輯電平轉(zhuǎn)換為與輸入邏輯電平相反的EIA/TIA-232電平。發(fā)送器的輸出被保護(hù),預(yù)防一直短路到地的情況,從而使得其可靠性不受影響。驅(qū)動(dòng)器輸出在電源電壓低至2.7V時(shí)也可滿(mǎn)足EIA/TIA-232的

±3.7V電平。

接收器是把EIA/TIA-232電平轉(zhuǎn)換成TTL或CMOS邏輯輸出電平。

電荷泵需要4個(gè)外接電容,但運(yùn)用一種4相電壓轉(zhuǎn)換技術(shù),保持輸出對(duì)稱(chēng)的5.5V電源。內(nèi)部電壓源由一對(duì)可調(diào)節(jié)的電荷泵組成,即使輸入電壓UCC超過(guò)3.0V~5.5V的范圍,電荷泵仍能提供5.5V輸出電壓。

SP3232E的特點(diǎn)如下:

(1)符合電子工業(yè)聯(lián)合會(huì)制定的EIA/TIA-232通信協(xié)議;

(2)數(shù)據(jù)的傳輸速率為250kb/s;

(3)低功耗芯片,接收數(shù)據(jù)時(shí)的電流為1μA;

(4)有兩個(gè)發(fā)送接收通道。

SP3232E芯片的引腳封裝圖如圖6-1所示。

圖6-1SP3232E芯片的引腳封裝圖

SP3232E芯片的引腳功能說(shuō)明如下:

VCC:+5V供電電源;

GND:電源地;

V+:供給正極輸出;

V-:供給負(fù)極輸出;

R1IN,R2IN:RS-232接收輸入端;

T1OUT,T2OUT:RS-232發(fā)送輸出端;

R1OUT,R2OUT:TTL/CMOS接收輸出端;

T1IN,T2IN:TTL/CMOS發(fā)送輸入端;

C1+,C1-:連接電容1;

C2+,C2-:連接電容2。6.1.2RS-232通信實(shí)例

MSP430F133內(nèi)部自帶UART通信模塊,因此,只需將SP3232的TTL/CMOS接收、發(fā)送端與單片機(jī)的UTXD、URXD相連,即可通過(guò)單片機(jī)內(nèi)部UART通信模塊將需要傳輸?shù)臄?shù)據(jù)通過(guò)RS-232通信方式實(shí)現(xiàn)。MSP430F133與SP3232接口電路如圖6-2所示。

圖6-2MSP430F133與SP3232接口電路

UART模塊初始化子函數(shù):將UART初始化為波特率1200;數(shù)據(jù)位8位;無(wú)奇偶校驗(yàn);1位停止位。

voidInit_UART1(void)

{

U1CTL=CHAR+PEV+PENA; //8-bitcharacter

U1TCTL=SSEL1; //UCLK=MCLK

U1BR0=0x0A; //8MHz1200

U1BR1=0x1A; //8MHz1200

U1MCTL=0x00; //8MHz1200modulation

ME2|=UTXE1+URXE1; //EnableUSART0TXD/RXD

IE2|=URXIE1; //EnableUSART0RXinterrupt

P3SEL|=0x30; //P3.4,5=USART0TXD/RXD

P3DIR|=0x10; //P3.4outputdirection

return;

}

UART發(fā)送數(shù)據(jù)子函數(shù):UART發(fā)送一個(gè)字節(jié)數(shù)據(jù),在程序中調(diào)用此函數(shù),而不是使用中斷。

voidUART1_TX_byte(unsignedchardata)

{

while((IFG2&UTXIFG1)!=UTXIFG1);//USART1TXbufferready?

U1TXBUF=data;

}

UART接收數(shù)據(jù)子函數(shù):該函數(shù)是一中斷程序,在初始化時(shí)需將接收數(shù)據(jù)設(shè)置為中斷,當(dāng)收到數(shù)據(jù)后,程序自動(dòng)進(jìn)入該子程序處理。

#pragmavector=USART1RX_VECTOR/*0xFFE6USART1Receive*/

_interruptvoidusart1_rx_sever(void)

{

inti;

i=U1RXBUF;

//處理接收的數(shù)據(jù),如數(shù)據(jù)處理時(shí)間較長(zhǎng),則可將數(shù)據(jù)存在一個(gè)全局變量數(shù)組中,在此處置

//標(biāo)志位,在主程序中檢測(cè)此處置的標(biāo)志位來(lái)判斷是否有數(shù)據(jù)需處理

}

RS-485標(biāo)準(zhǔn)是一種平衡傳輸方式的串行接口標(biāo)準(zhǔn)。與RS-422A標(biāo)準(zhǔn)相比,RS-485標(biāo)準(zhǔn)擴(kuò)展了RS-422A的性能,是一種多發(fā)送器的電路標(biāo)準(zhǔn),它允許在雙導(dǎo)線(xiàn)上有多個(gè)發(fā)送器,也允許一個(gè)發(fā)送器驅(qū)動(dòng)多個(gè)負(fù)載設(shè)備。6.2RS-485通信

RS-485接口標(biāo)準(zhǔn)網(wǎng)絡(luò)的典型應(yīng)用如圖6-3所示,由于一對(duì)平衡傳輸?shù)膬啥硕寂渲昧私K端電阻,其發(fā)送器、接收器及組合收發(fā)器都可以?huà)旖釉谄胶鈧鬏斁€(xiàn)的任意位置,從而實(shí)現(xiàn)了數(shù)據(jù)傳輸中多個(gè)驅(qū)動(dòng)器和接收器公用一條傳輸線(xiàn)的多點(diǎn)應(yīng)用。

圖6-3RS-485接口標(biāo)準(zhǔn)網(wǎng)絡(luò)的典型應(yīng)用雖然RS-485標(biāo)準(zhǔn)允許電路中出現(xiàn)多個(gè)發(fā)送器,但RS-485僅能工作于半雙工方式,即任一時(shí)刻只允許一個(gè)發(fā)送器發(fā)送數(shù)據(jù),而其他組件只能處于接收狀態(tài)。

RS-485標(biāo)準(zhǔn)的特點(diǎn)是抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)、速率高。如果采用雙絞線(xiàn)傳輸信號(hào),最大傳輸速率為10Mb/s,傳輸距離為15m;如果最大傳輸速率為100kb/s,則可以傳輸

1200m;如果最大傳輸速率為9600b/s,則傳輸距離可達(dá)1500m。

RS-485標(biāo)準(zhǔn)最多允許在平衡電纜上連接32個(gè)發(fā)送器/接收器,特別適用于工業(yè)控制領(lǐng)域進(jìn)行分布管理、聯(lián)網(wǎng)檢測(cè)控制等。6.2.1RS-485通信原理

RS-485與RS-232不一樣,數(shù)據(jù)信號(hào)采用差分傳輸方式,也稱(chēng)做平衡傳輸方式,即使用一對(duì)雙絞線(xiàn),將其中一線(xiàn)定義為A,另一線(xiàn)定義為B。通常情況下,發(fā)送驅(qū)動(dòng)器A、B之間的正電平為

+2

V~+6

V,是一個(gè)邏輯狀態(tài),負(fù)電平為

-2V~-6V,是另一個(gè)邏輯狀態(tài)。RS-485中還有一個(gè)“使能”端,用于控制發(fā)送驅(qū)動(dòng)器和傳輸線(xiàn)的切斷與連接。當(dāng)“使能”端起作用時(shí),發(fā)送驅(qū)動(dòng)器處于高阻狀態(tài),稱(chēng)做“第三態(tài)”,即它是有別于邏輯“1”與“0”的第三態(tài)。接收端也作與發(fā)送端相對(duì)的規(guī)定,收、發(fā)端通過(guò)平衡雙絞線(xiàn)將AA與BB對(duì)應(yīng)相連,當(dāng)在接收端A、B之間有大于

+200mV的電平時(shí),輸出正邏輯電平;當(dāng)有小于

-200mV的電平時(shí),輸出負(fù)邏輯電平。接收器接收平衡線(xiàn)上的電平范圍為200mV~6V。6.2.2RS-485通信芯片

SP3485是一款

+3.3V低功耗半雙工收發(fā)器,完全滿(mǎn)足RS-485和RS-422串行協(xié)議的要求。其特性如下:

(1)

+3.3V單電源供電;

(2)兼容5V系統(tǒng);

(3)

12Mb/s的數(shù)據(jù)傳輸速率;

(4)正常情況下的輸入電壓范圍為

-7V~12V;

(5)兼容全雙工和半雙工通信協(xié)議;

圖6-4SP3485芯片的引腳封裝圖

(6)具有過(guò)載保護(hù)功能(當(dāng)電路電流或熱量超過(guò)標(biāo)準(zhǔn)時(shí),會(huì)自動(dòng)斷開(kāi)電路)。

SP3485芯片的引腳封裝圖如圖6-4所示。

SP3485的引腳功能說(shuō)明如下:

VCC:供電電源(3.0V

<

UCC

<

3.6V);

RO:RS-485接收輸出端;

DI:RS-485發(fā)送輸入端;

GND:電源地;

Y:差分發(fā)送輸出端(+);

Z:差分發(fā)送輸出端(-);

B:差分接收輸入端(+);

A:差分接收輸入端(-)。

SP3485的發(fā)送輸出端和接收輸入端都是差分形式,其中RO將接收的數(shù)據(jù)發(fā)送給MCU,DI將MCU要發(fā)送的數(shù)據(jù)發(fā)送給RS-485。SP3485發(fā)送和接收數(shù)據(jù)時(shí)對(duì)應(yīng)的輸入/輸出狀態(tài)如表6-1和表6-2所示。

表6-1SP3485發(fā)送數(shù)據(jù)時(shí)對(duì)應(yīng)的輸入/輸出狀態(tài)表6-2SP3485接收數(shù)據(jù)時(shí)對(duì)應(yīng)的輸入/輸出狀態(tài)

RS-485協(xié)議一般在工業(yè)環(huán)境下,特別是噪聲干擾比較大的環(huán)境下工作,所以外界對(duì)系統(tǒng)的影響比較大。為了防止外界環(huán)境的突變產(chǎn)生瞬間較大電流燒毀MCU芯片,在電氣平臺(tái)設(shè)計(jì)時(shí),采用光耦隔離的方式,將系統(tǒng)與外界環(huán)境隔離,從而很好地保護(hù)系統(tǒng)硬件。HYM3082隔離通信電路如圖6-5所示,該電路的光耦只適合應(yīng)用于低速場(chǎng)合,如通信速率較高,建議使用高速光耦。

圖6-5HYM3082隔離通信電路

隨著移動(dòng)計(jì)算設(shè)備和移動(dòng)通信設(shè)備的日益普及,紅外數(shù)據(jù)通信應(yīng)用越來(lái)越多。紅外通信技術(shù)由于成本低廉和廣泛的兼容性等優(yōu)點(diǎn),已在近距離的無(wú)線(xiàn)數(shù)據(jù)傳輸領(lǐng)域占有重要地位。6.3紅外通信6.3.1IrDA及其通信協(xié)議

IrDA即紅外數(shù)據(jù)組織,是1993年6月成立的一個(gè)國(guó)際性組織,專(zhuān)門(mén)制訂和推進(jìn)能共同使用的低成本紅外數(shù)據(jù)互連標(biāo)準(zhǔn),支持點(diǎn)對(duì)點(diǎn)的工作模式。由于標(biāo)準(zhǔn)的統(tǒng)一和應(yīng)用的廣泛,更多的公司開(kāi)始開(kāi)發(fā)和生產(chǎn)IrDA模塊,技術(shù)的進(jìn)步也使得IrDA模塊的集成度越來(lái)越高,體積也越來(lái)越小。IrDA1.0可支持最高115.2kb/s的通信速率,而IrDA1.1可以支持的通信速率達(dá)到4Mb/s。

IrDA數(shù)據(jù)通信按發(fā)送速率分為三大類(lèi):SIR、MIR和FIR。串行紅外(SIR)的速率覆蓋了RS-232端口通常支持的速率(9.6kb/s~115.2kb/s)。中速紅外(MIR)可支持0.576Mb/s和1.152Mb/s的速率;高速紅外(FIR)通常用于4Mb/s的速率,有時(shí)也可用于高于SIR的所有速率。

在IrDA中,物理層、鏈路接入?yún)f(xié)議(IrLAP)和鏈路管理協(xié)議(IrLMP)是必需的三個(gè)協(xié)議層。除此之外,還有一些適用于特殊應(yīng)用模式的可選層。在基本的IrDA應(yīng)用模式中,設(shè)備分為主設(shè)備和從設(shè)備。主設(shè)備用于探測(cè)它的可視范圍,尋找從設(shè)備,然后從那些響應(yīng)它的設(shè)備中選擇一個(gè)并試圖建立連接。在建立連接的過(guò)程中,兩個(gè)設(shè)備彼此相互協(xié)調(diào),按照它們共同的最高通信能力確定最后的通信速率。以上的“尋找”和“協(xié)調(diào)”過(guò)程都是在9.6kb/s的速率下進(jìn)行的。數(shù)據(jù)速率小于4Mb/s時(shí),使用RZI(反相歸零)調(diào)制,最大脈沖寬度是位周期的3/16;而當(dāng)數(shù)據(jù)速率為4Mb/s時(shí),使用4PPM(脈沖位置)調(diào)制。IrDA要求的RZI調(diào)制的編碼效果如圖6-6中的IR幀數(shù)據(jù)所示。

圖6-6IrDA調(diào)制(3/16)

IrDA數(shù)據(jù)通信工作在半雙工模式,因?yàn)樵诎l(fā)射時(shí),接收器會(huì)被發(fā)射的光芒所屏蔽。這樣,通信的兩個(gè)設(shè)備將通過(guò)快速轉(zhuǎn)換鏈路來(lái)模擬全雙工通信,并由主設(shè)備負(fù)責(zé)控制鏈路的時(shí)序。

IrDA協(xié)議按層安排,應(yīng)用程序的數(shù)據(jù)逐層下傳,最終以光脈沖的形式發(fā)出。在物理層上的第一層是鏈路接入?yún)f(xié)議(IrLAP),它是HDLC(高級(jí)數(shù)據(jù)鏈路控制)協(xié)議的改編,以適應(yīng)紅外傳輸?shù)囊蟆rLAP層的工作是進(jìn)行鏈路初始化、設(shè)備地址尋找和解決沖突、啟動(dòng)連接、數(shù)據(jù)交換、斷開(kāi)連接和鏈路關(guān)閉等。IrLAP用于指定紅外數(shù)據(jù)包的幀和字節(jié)結(jié)構(gòu),以及紅外通信的錯(cuò)誤檢測(cè)方法。IrLAP之上的一層是鏈路管理協(xié)議(IrLMP),主要用于管理IrLAP所提供的鏈路連接中的鏈路功能和應(yīng)用程序以及評(píng)估設(shè)備上的服務(wù),并管理如數(shù)據(jù)速率、BOF的數(shù)量(幀的開(kāi)始)及連接換向時(shí)間等參數(shù)的協(xié)調(diào),以及數(shù)據(jù)的糾錯(cuò)傳輸?shù)取?/p>

IrDA物理層協(xié)議提出了對(duì)工作距離、工作角度(視角)、光功率、數(shù)據(jù)速率等不同品牌設(shè)備互聯(lián)時(shí)抗干擾能力的建議。當(dāng)前紅外通信距離最長(zhǎng)為3m,接收角度為30°。6.3.2HDSL7001芯片概述

紅外通信的基本原理是發(fā)送端將基帶二進(jìn)制信號(hào)調(diào)制為一系列的脈沖信號(hào),再通過(guò)紅外發(fā)射管發(fā)射紅外信號(hào)。

串行紅外傳輸采用特定的脈沖編碼標(biāo)準(zhǔn),這種標(biāo)準(zhǔn)與RS-232串行傳輸標(biāo)準(zhǔn)不同。若兩設(shè)備之間進(jìn)行串行紅外通信,就需要進(jìn)行RS-232編碼和IrDA編碼之間的轉(zhuǎn)換。紅外通信接口由紅外收發(fā)器和紅外編碼解碼器構(gòu)成。

紅外收發(fā)器包括發(fā)送器和接收器兩部分。發(fā)送器(Transmitter)將從I/O或ENDEC接收來(lái)的位調(diào)制后的脈沖轉(zhuǎn)換為紅外脈沖發(fā)出。接收器(Receiver)檢測(cè)到紅外光脈沖,并將其轉(zhuǎn)換為T(mén)TL或CMOS電脈沖。

Agilent公司生產(chǎn)的HSDL7001芯片可實(shí)現(xiàn)RS-232編碼和IrDA編碼之間的轉(zhuǎn)換。HSDL7001紅外編碼解碼芯片的特性如下:

(1)適應(yīng)IrDA1.0物理層規(guī)范;

(2)接口與SIR收發(fā)器相兼容;

(3)可與標(biāo)準(zhǔn)的16550UART連接使用;

(4)可發(fā)送/接收1.63μs或3/16脈沖形式;

(5)內(nèi)部或外部時(shí)鐘模式;

(6)波特率可編程;

(7)工作電壓范圍為2.7V~5.5V;

(8)采用16腳SOIC封裝。

HSDL7001的引腳排列如圖6-7所示。其引腳說(shuō)明如下:

16XCLK:外部時(shí)鐘輸入引腳,輸入的時(shí)鐘是數(shù)據(jù)傳輸波特率的16倍;

:串口輸入引腳,接收來(lái)自串口的數(shù)據(jù),將數(shù)據(jù)調(diào)制成紅外發(fā)送數(shù)據(jù);

圖6-7HSDL7001的引腳排列

RCV:串口輸出數(shù)據(jù),將接收到的紅外數(shù)據(jù)解調(diào)后輸出給串口;

A0、A1、A2:時(shí)鐘的除法系數(shù)選擇引腳;

CLK_SEL:時(shí)鐘選擇引腳,該引腳輸入為高電平,選擇外部時(shí)鐘,即時(shí)鐘為16XCLK引腳輸入的時(shí)鐘;

GND:電源地引腳;

VCC:電源引腳;

:復(fù)位引腳;

:紅外數(shù)據(jù)接收引腳;

IR_TXD:紅外數(shù)據(jù)發(fā)送引腳;

PULSEMOD:脈沖模式選擇引腳;

POWERDN:低功耗選擇引腳,如果該引腳輸入高電平,芯片進(jìn)入低功耗模式;

OSCIN、OSCOUT:晶體振蕩電路的輸入、輸出引腳。6.3.3HDSL3201芯片概述

HSDL3201是一種廉價(jià)的紅外收發(fā)器模塊,工作電壓為2.7V~3.6V。由于發(fā)光二極管的驅(qū)動(dòng)電流是內(nèi)部供給的恒流32mA,因此確保了連接距離符合IrDA1.2(低功耗)物理層規(guī)范。HSDL3201的特性如下:

(1)超小型表面封裝;

(2)最小高度為2.5mm;

(3)發(fā)光二極管的電壓范圍為2.7V~6.0V;

(4)溫度范圍為-25℃~85℃;

(5)發(fā)光二極管的驅(qū)動(dòng)電流為32mA;

(6)邊緣檢測(cè)輸入,避免發(fā)光二極管的開(kāi)啟時(shí)間過(guò)長(zhǎng)。

HSDL3201的引腳排列如圖6-8所示。其引腳說(shuō)明如下:

VCC:電源引腳;

圖6-8HSDL3201的引腳排列

GND:電源地引腳;

AGND:模擬接地引腳;

SD:低功耗引腳,如果該引腳接入高電平,則芯片進(jìn)入低功耗狀態(tài);

TXD:傳輸數(shù)據(jù)輸入引腳;

RXD:接收數(shù)據(jù)輸出引腳;

VLED:LED的電源引腳。6.3.4紅外通信實(shí)例

本例主要是將單片機(jī)串口發(fā)送的數(shù)據(jù)由HDSL7001芯片按照紅外傳輸?shù)母袷竭M(jìn)行編碼,將編碼后的數(shù)據(jù)由HDSL3201芯片進(jìn)行發(fā)送。HDSL3201芯片接收另一個(gè)紅外設(shè)備發(fā)送的數(shù)據(jù),將接收到的紅外數(shù)據(jù)交給HDSL7001芯片進(jìn)行解碼處理,解碼后的數(shù)據(jù)再傳給單片機(jī)。紅外通信電路如圖6-9所示。

圖6-9紅外通信電路

UART模塊初始化子函數(shù):將UART初始化為波特率57600;數(shù)據(jù)位8位;無(wú)奇偶校驗(yàn);1位停止位。

voidInit_UART1(void)

{

U1CTL=CHAR+PEV+PENA; //8-bitcharacter

U1TCTL=SSEL1; //UCLK=MCLK

U1BR0=0x8B; //8MHz57600

U1BR1=0x00; //8MHz57600

U1MCTL=0x00; //8MHz57600modulation

ME2|=UTXE1+URXE1; //EnableUSART0TXD/RXD

IE2|=UTXIE1+URXIE1; //EnableUSART0RXTXinterrupt

P3SEL|=0x30; //P3.4,5=USART0TXD/RXD

P3DIR|=0x10; //P3.4outputdirection

return;

}

UART發(fā)送數(shù)據(jù)子函數(shù):該函數(shù)是一中斷程序,在初始化時(shí)需將發(fā)送數(shù)據(jù)設(shè)置為中斷,當(dāng)有數(shù)據(jù)需發(fā)送時(shí),程序自動(dòng)進(jìn)入該子程序處理。

#pragmavector=USART1TX_VECTOR/*0xFFE4USART1Transmit*/

_interruptvoidusart1_tx_sever(void)

{

inti;

if(point!=0)

{//緩沖區(qū)中有數(shù)據(jù)待發(fā)送

U1TXBUF=UART1_TX_BUF[i];

i++;

if(i>point)

{

Point=0;

}

}

}

UART接收數(shù)據(jù)子函數(shù):該函數(shù)是一中斷程序,在初始化時(shí)需將接收數(shù)據(jù)設(shè)置為中斷,當(dāng)收到數(shù)據(jù)后,程序自動(dòng)進(jìn)入該子程序處理。

#pragmavector=USART1RX_VECTOR/*0xFFE6USART1Receive*/

_interruptvoidusart1_rx_sever(void)

{

inti;

i=U1RXBUF;

//該處處理接收的數(shù)據(jù)

}

6.4.1無(wú)線(xiàn)通信概述

無(wú)線(xiàn)通信應(yīng)用非常廣泛,常用于極低功率UHF無(wú)線(xiàn)收發(fā)器、315/433/868和915MHzISM/SRD波段系統(tǒng)、AMR-自動(dòng)儀表讀數(shù)、電子消費(fèi)產(chǎn)品、RKE-兩路遠(yuǎn)程無(wú)鍵登錄、低功率遙感勘測(cè)、住宅和建筑自動(dòng)控制、無(wú)線(xiàn)警報(bào)和安全系統(tǒng)、工業(yè)監(jiān)測(cè)和控制、無(wú)線(xiàn)傳感器網(wǎng)絡(luò)等。6.4無(wú)線(xiàn)通信

1.?CC1100無(wú)線(xiàn)通信芯片概述

CC1100是一種低成本、真正單片的UHFRF收發(fā)器,為低功耗無(wú)線(xiàn)應(yīng)用而設(shè)計(jì)。該電路主要設(shè)定為315

MHz、433

MHz、868

MHz和915

MHz的ISM(工業(yè)、科學(xué)和醫(yī)學(xué))和SRD(短距離設(shè)備)頻率波段,也可以容易地設(shè)置為300MHz~348MHz、400MHz~464MHz和800

MHz~928MHz的其他頻率。RF收發(fā)器集成了一個(gè)高度可配置的調(diào)制解調(diào)器。這個(gè)調(diào)制解調(diào)器支持不同的調(diào)制格式,其數(shù)據(jù)傳輸率可達(dá)500

kb/s。通過(guò)開(kāi)啟集成在調(diào)制解調(diào)器上的前向誤差校正選項(xiàng),能使性能得到提升。CC1100為數(shù)據(jù)包處理、數(shù)據(jù)緩沖、突發(fā)數(shù)據(jù)傳輸、清晰信道評(píng)估、連接質(zhì)量指示和電磁波激發(fā)提供廣泛的硬件支持。CC1100的主要操作參數(shù)和64位傳輸/接收FIFO可通過(guò)SPI接口控制。在一個(gè)典型系統(tǒng)里,CC1100和一個(gè)微控制器及若干被動(dòng)元件一起使用。

CC1100的主要特性如下:

(1)體積小(QLP4mm

×

4mm封裝,20引腳);

(2)真正單片的UHFRF收發(fā)器;

(3)頻率波段為300MHz~348MHz、400MHz~464MHz和800MHz~928MHz;

(4)高靈敏度(1.2kb/s下

-110dBm,1%數(shù)據(jù)包誤差率);

(5)可編程控制的數(shù)據(jù)傳輸率,可達(dá)500kb/s;

(6)較低的電流消耗(RX中15.6mA,2.4kb/s,433MHz);

(7)可編程控制的輸出功率,對(duì)所有的支持頻率可達(dá)

+10dBm;

(8)優(yōu)秀的接收器選擇性和模塊化性能;

(9)極少的外部元件,芯片內(nèi)頻率合成器,不需要外部濾波器或RF轉(zhuǎn)換;

(10)可編程控制的基帶調(diào)制解調(diào)器;

(11)理想的多路操作特性;

(12)可控的數(shù)據(jù)包處理硬件;

(13)快速頻率變動(dòng)合成器帶來(lái)的合適的頻率跳躍系統(tǒng);

(14)可選的帶交錯(cuò)的前向誤差校正;

(15)單獨(dú)的64字節(jié)RX和TX數(shù)據(jù)FIFO;

(16)高效的SPI接口,所有的寄存器能用一個(gè)“突發(fā)”轉(zhuǎn)換器控制;

(17)數(shù)字RSSI輸出;

(18)與遵照EN300220(歐洲)和FCCCFR47Part15(美國(guó))標(biāo)準(zhǔn)的系統(tǒng)相配;

(19)自動(dòng)低功率RX拉電路的電磁波激活功能;

(20)許多強(qiáng)大的數(shù)字特征,使得使用廉價(jià)的微控制器就能得到高性能的RF系統(tǒng);

(21)集成模擬溫度傳感器;

(22)自由引導(dǎo)的“綠色”數(shù)據(jù)包;

(23)對(duì)數(shù)據(jù)包導(dǎo)向系統(tǒng)的靈活支持,即對(duì)同步詞匯偵測(cè)的芯片支持,地址檢查,靈活的數(shù)據(jù)包長(zhǎng)度及自動(dòng)CRC處理;

(24)可編程信道濾波帶寬;

(25)

OOK和靈活的ASK整型支持;

(26)

2-FSK,GFSK和MSK支持;

(27)自動(dòng)頻率補(bǔ)償可用來(lái)調(diào)整頻率合成器到接收中間頻率;

(28)對(duì)數(shù)據(jù)的可選自動(dòng)白化處理;

(29)對(duì)現(xiàn)存通信協(xié)議的向后兼容的異步透明接收/傳輸模式的支持;

(30)可編程的載波感應(yīng)指示器;

(31)可編程前導(dǎo)質(zhì)量指示器及在隨機(jī)噪聲下改進(jìn)的針對(duì)同步詞匯偵測(cè)的保護(hù);

(32)支持傳輸前自動(dòng)清理信道訪(fǎng)問(wèn)(CCA),即載波偵聽(tīng)系統(tǒng);

(33)支持每個(gè)數(shù)據(jù)包連接質(zhì)量指示。

2.?CC1100的引腳及功能說(shuō)明

CC1100的引腳封裝圖如圖6-10所示,各引腳功能說(shuō)明如下:

SCLK:數(shù)字輸入、連續(xù)配置接口、時(shí)鐘輸入。

SO(GDO1):數(shù)字輸出、連續(xù)配置接口、數(shù)據(jù)輸出,當(dāng)CSn為高時(shí)為可選的一般輸

出腳。

GDO2:數(shù)字輸出,一般用途的數(shù)字輸出腳,用于:測(cè)試信號(hào);FIFO狀態(tài)信號(hào);時(shí)鐘輸出,從XOSC向下分割;連續(xù)輸入TX數(shù)據(jù)。

DVDD:功率(數(shù)字)、數(shù)字I/O和數(shù)字中心電壓調(diào)節(jié)器的1.8V~3.6V數(shù)字功率供給

輸出。

DCOUPL:功率(數(shù)字)、對(duì)退耦的1.6V~2.0V數(shù)字功率供給輸出。注意,這個(gè)引腳只對(duì)CC2500使用,不能用來(lái)對(duì)其他設(shè)備提供供給電壓。

GDO0(ATEST):數(shù)字I/O,一般用途的數(shù)字輸出腳,用于:測(cè)試信號(hào);

FIFO狀態(tài)信號(hào);時(shí)鐘輸出,從XOSC向下分割;連續(xù)輸入TX數(shù)據(jù);原型/產(chǎn)品測(cè)試的模擬測(cè)試I/O。

CSn:數(shù)字輸入,連續(xù)配置接口,芯片選擇。

XOSC_Q1:模擬I/O,晶體振蕩器引腳1,或外部時(shí)鐘輸入。

AVDD:功率(模擬),1.8V~3.6V模擬功率供給連接。

XOSC_Q2:模擬I/O,晶體振蕩器引腳2。

RF_P:RFI/O,接收模式下對(duì)LNA的正RF輸入信號(hào),發(fā)送模式下對(duì)LNA的正RF輸出信號(hào)。

圖6-10CC1100的引腳封裝圖

RF_N:RFI/O,接收模式下對(duì)LNA的負(fù)RF輸入信號(hào),發(fā)送模式下對(duì)LNA的負(fù)RF輸出信號(hào)。

GND:地(模擬),模擬接地。

RBIAS:模擬I/O,參考電流的外部偏阻器。

DGUARD:功率(數(shù)字),對(duì)數(shù)字噪聲隔離的功率供給連接。

GND:地(數(shù)字),數(shù)字噪聲隔離的接地。

SI:數(shù)字輸入,連續(xù)配置接口,數(shù)據(jù)輸入。

CC1100簡(jiǎn)化框圖如圖6-11所示。CC1100用作一個(gè)低IF接收器。接收的RF信號(hào)通過(guò)低噪聲放大器(LNA)放大,再對(duì)中間頻率(IF)求積分來(lái)向下轉(zhuǎn)換。在IF下,I/Q信號(hào)通過(guò)ADC被數(shù)字化。自動(dòng)增益控制(AGC),細(xì)微頻率濾波和解調(diào)位/數(shù)據(jù)包同步均數(shù)字化地工作。CC1100的發(fā)送器部分基于RF頻率的直接合成。頻率合成器包含一個(gè)完整的芯片LCVCO,和一個(gè)對(duì)接收模式下的向下轉(zhuǎn)換混頻器產(chǎn)生1個(gè)QLO信號(hào)的90°相移裝置。將晶體振蕩器連接在XOSC_Q1和XOSC_Q2上。晶體振蕩器產(chǎn)生合成器的參考頻率,同時(shí)為數(shù)字部分和ADC提供時(shí)鐘。一個(gè)4線(xiàn)SPI串聯(lián)接口被用作配置和數(shù)據(jù)緩沖通路。數(shù)字基帶包括頻道配置支持,數(shù)據(jù)包處理及數(shù)據(jù)緩沖。

圖6-11CC1100簡(jiǎn)化框圖對(duì)于多種不同的應(yīng)用,CC1100能配置達(dá)到最優(yōu)性能。配置通過(guò)SPI接口完成。關(guān)鍵參數(shù)設(shè)計(jì)如下:功率降低/提升模式;晶體振蕩器功率降低/提升;接收/傳輸模式;RF信道選擇;數(shù)據(jù)率;調(diào)制格式化;RX信道濾波器帶寬;RF輸出功率;64位傳輸FIFO數(shù)據(jù)緩沖;數(shù)據(jù)包通信硬件支持;交錯(cuò)前向誤差校正;數(shù)據(jù)白化;電磁波激活(WOR)。

3.?CC1100配置說(shuō)明

CC1100的配置通過(guò)程序控制8位寄存器完成?;谶x擇的系統(tǒng)參數(shù)的配置數(shù)據(jù)大多能容易地通過(guò)SmartRFStudio軟件得到。寄存器的完整描述見(jiàn)表6-3。在芯片重啟之后,所有的寄存器設(shè)置為默認(rèn)值。關(guān)于每個(gè)寄存器的具體說(shuō)明可參考數(shù)據(jù)手冊(cè)。

表6-3CC1100配置寄存器

CC1100通過(guò)4線(xiàn)SPI兼容接口(SI,SO,SCLK和CSn)配置。這個(gè)接口同時(shí)用做寫(xiě)和讀緩存數(shù)據(jù)。其寫(xiě)和讀操作時(shí)序如圖6-12所示。SPI通信起始頭字節(jié)包含一個(gè)讀/寫(xiě)位、一個(gè)突發(fā)訪(fǎng)問(wèn)位和一個(gè)6位地址。在地址和數(shù)據(jù)轉(zhuǎn)換期間,CSn腳(芯片選擇,低電平有效)必須保持為低電平。如果在轉(zhuǎn)換過(guò)程中CSn變?yōu)楦唠娖?,則轉(zhuǎn)換取消。當(dāng)CSn變低時(shí),在開(kāi)始轉(zhuǎn)換頭字節(jié)之前,MCU必須等待,直到SO腳變低。這表明電壓調(diào)制器已經(jīng)穩(wěn)定,晶體正在運(yùn)作中。除非芯片處在SLEEP或XOFF狀態(tài),SO腳在CSn變低之后總會(huì)立即變低。

圖6-12配置寄存器寫(xiě)和讀操作當(dāng)頭字節(jié)在SPI接口上被寫(xiě)入時(shí),芯片狀態(tài)字節(jié)在SO腳上被CC1100寫(xiě)入。狀態(tài)字節(jié)包含關(guān)鍵狀態(tài)信號(hào),對(duì)MCU是有用的。第一位S7,是CHIP_RDYn信號(hào)。在SCLK的第一個(gè)正邊緣之前,這個(gè)信號(hào)必須變低。CHIP_RDYn信號(hào)表明晶體正處于工作中,調(diào)節(jié)數(shù)字供給電壓是穩(wěn)定的。第6,5和4位由狀態(tài)值組成。這個(gè)值反映了芯片的狀態(tài)。當(dāng)使XOSC空閑并使數(shù)字中心的能量開(kāi)啟時(shí),所有其他模塊處于功率降低狀態(tài)。只有芯片處于此狀態(tài)時(shí),頻率和信道配置才能被更新。當(dāng)芯片處于接收模式時(shí),RX狀態(tài)是活動(dòng)的。同樣地,當(dāng)芯片處于傳輸模式時(shí),TX狀態(tài)是活動(dòng)的。狀態(tài)字節(jié)中的后四位(3

:

0)包含F(xiàn)IFO_BYTES_AVAILABLE。為了進(jìn)行讀操作,這個(gè)區(qū)域包含可從RXFIFO讀取的字節(jié)數(shù)。為了進(jìn)行寫(xiě)操作,這個(gè)區(qū)域包含可寫(xiě)入TXFIFO的字節(jié)數(shù)。當(dāng)FIFO_BYTES_AVAILABLE=15或者更多的字節(jié)時(shí),是可用/自由的。

CC1100配置寄存器位于SPI地址從0x00到0x2F之間。所有的配置寄存器均能讀和寫(xiě)。讀/寫(xiě)位控制寄存器是讀或者寫(xiě)。當(dāng)對(duì)寄存器寫(xiě)時(shí),每當(dāng)一個(gè)待寫(xiě)入的數(shù)據(jù)字節(jié)傳輸?shù)絊I引腳時(shí),狀態(tài)字節(jié)將被送至SO引腳。通過(guò)在地址頭設(shè)置突發(fā)位,連續(xù)地址的寄存器能高效地被訪(fǎng)問(wèn)。這個(gè)地址在內(nèi)部計(jì)數(shù)器內(nèi)設(shè)置起始地址,每增加一個(gè)新的字節(jié)(每8個(gè)時(shí)鐘脈沖),計(jì)數(shù)器值增加1。突發(fā)訪(fǎng)問(wèn)不管是讀訪(fǎng)問(wèn)還是寫(xiě)訪(fǎng)問(wèn),必須通過(guò)設(shè)置CSn為高來(lái)終止。

對(duì)0x30~0x3D間的地址來(lái)說(shuō),突發(fā)位用以在狀態(tài)寄存器和命令濾波之間選擇。狀態(tài)寄存器只讀。突發(fā)讀取對(duì)狀態(tài)寄存器是不可取的,故它們每次只能被讀一個(gè)。64字節(jié)TXFIFO和64字節(jié)RXFIFO通過(guò)0x3F被訪(fǎng)問(wèn)。當(dāng)讀/寫(xiě)位為0時(shí),TXFIFO被訪(fǎng)問(wèn),當(dāng)讀/寫(xiě)位為1時(shí),RXFIFO被訪(fǎng)問(wèn)。TXFIFO是只寫(xiě)的,而RXFIFO是只讀的。突發(fā)位用來(lái)決定FIFO訪(fǎng)問(wèn)是單字節(jié)訪(fǎng)問(wèn)還是突發(fā)訪(fǎng)問(wèn)。單字節(jié)訪(fǎng)問(wèn)方式期望地址的突發(fā)位為0及1數(shù)據(jù)字節(jié)。在數(shù)據(jù)字節(jié)之后等待一個(gè)新的地址,因此,CSn繼續(xù)保持低。突發(fā)訪(fǎng)問(wèn)方式允許一地址字節(jié),然后是連續(xù)的數(shù)據(jù)字節(jié),直到通過(guò)設(shè)置CSn為高來(lái)關(guān)斷訪(fǎng)問(wèn)。當(dāng)對(duì)TXFIFO寫(xiě)時(shí),狀態(tài)字節(jié)對(duì)每個(gè)SO引腳上的新數(shù)據(jù)字節(jié)是輸出量,如圖6-13所示。這個(gè)狀態(tài)位能用來(lái)偵測(cè)對(duì)TXFIFO寫(xiě)數(shù)據(jù)時(shí)的下溢。注意,狀態(tài)字節(jié)包含在寫(xiě)入字節(jié)到TXFIFO的過(guò)程前空閑的字節(jié)數(shù)。當(dāng)最后一個(gè)適合TXFIFO的字節(jié)被傳送至SI引腳后,被SO引腳接收的狀態(tài)位會(huì)表明在TXFIFO中只有一個(gè)字節(jié)是空閑的。

圖6-13寄存器訪(fǎng)問(wèn)類(lèi)型傳輸FIFO可能會(huì)通過(guò)發(fā)布一個(gè)SFTX命令濾波而被淹沒(méi)。相似地,一個(gè)SFRX命令濾波會(huì)淹沒(méi)接收FIFO。當(dāng)進(jìn)入休眠狀態(tài)時(shí),兩個(gè)FIFO都被清空。

0x3E地址用來(lái)訪(fǎng)問(wèn)PATABLE。PATABLE用來(lái)選擇PA能量控制設(shè)置。在接收此地址之后,SPI等待至少8個(gè)字節(jié)。通過(guò)控制PATABLE,能實(shí)現(xiàn)可控的PA能量上升和下降,減少的帶寬的ASK調(diào)制整型也如此。

CC1100使用過(guò)程中需注意的設(shè)置較多,如微控制器接口和引腳結(jié)構(gòu)、數(shù)據(jù)率設(shè)計(jì)、接收信道濾波帶寬、解調(diào)器、符號(hào)同步裝置和數(shù)據(jù)決定、數(shù)據(jù)包處理和硬件支持、調(diào)制格式化、已接收信號(hào)質(zhì)量和連接質(zhì)量信息、交錯(cuò)前向誤差校正、通信控制、數(shù)據(jù)FIFO、頻率控制、VCO、電壓調(diào)節(jié)、輸出功率調(diào)節(jié)、晶體振蕩器、天線(xiàn)接口、常規(guī)用途/測(cè)試輸出控制引腳、異步和同步連續(xù)操作等。具體說(shuō)明可參考CC1100數(shù)據(jù)手冊(cè)。6.4.2CC1100無(wú)線(xiàn)芯片控制子程序

預(yù)定義:定義通信端口。

#defineCC1100_SET BIT0 //P3.0

#defineCC1100_SIMO BIT1 //P3.1

#defineCC1100_SOMI BIT2 //P3.2

#defineCC1100_UCLK BIT3 //P3.3

#defineOUT_CC1100_SET P3DIR|=CC1100_SET

#defineHIGH_CC1100_SET P3OUT|=CC1100_SET

#defineLOW_CC1100_SET P3OUT&=~CC1100_SET

#defineMODULE_CC1100_SIMO P3SEL|=CC1100_SIMO

#defineMODULE_CC1100_SOMI P3SEL|=CC1100_SOMI

#defineMODULE_CC1100_UCLK P3SEL|=CC1100_UCLK

#defineMISO_LOW_WAIT() while(P3IN&CC1100_SOMI)

#defineMISO_HIGH_WAIT() while(!(P3IN&CC1100_SOMI))

//--------------------------------------------------------------------------------------------------

//Definitionstosupportburst/singleaccess:

#definewrite_burst0x40

#defineread_signle0x80

#defineread_burst0xC0

/*------------------ConfigurationRegistersOverview---------------------------------------*/

#defineIOCFG2 (0x00) //GDO2outputpinconfiguration

#defineIOCFG1 (0x01) //GDO1outputpinconfiguration

#defineIOCFG0 (0x02) //GDO0outputpinconfiguration

#defineFIFOTHR (0x03) //RXFIFOandTXFIFOthresholds

#defineSYNC1 (0x04) //Syncword,highbyte

#defineSYNC0 (0x05) //Syncword,lowbyte

#definePKTLEN (0x06) //Packetlength

#definePKTCTRL1 (0x07) //Packetautomationcontrol

#definePKTCTRL0 (0x08) //Packetautomationcontrol

#defineADDR (0x09) //Deviceaddress

#defineCHANNR (0x0A) //Channelnumber

#defineFSCTRL1 (0x0B) //Frequencysynthesizercontrol

#defineFSCTRL0 (0x0C) //Frequencysynthesizercontrol

#defineFREQ2 (0x0D) //Frequencycontrolword,highbyte

#defineFREQ1 (0x0E) //Frequencycontrolword,middlebyte

#defineFREQ0 (0x0F) //Frequencycontrolword,lowbyte

#defineMDMCFG4 (0x10) //Modemconfiguration

#defineMDMCFG3 (0x11) //Modemconfiguration

#defineMDMCFG2 (0x12) //Modemconfiguration

#defineMDMCFG1 (0x13) //Modemconfiguration

#defineMDMCFG0 (0x14) //Modemconfiguration

#defineDEVIATN (0x15) //Modemdeviationsetting

#defineMCSM2 (0x16) //MainRadioControlStateMachineconfiguration

#defineMCSM1 (0x17) //MainRadioControlStateMachineconfiguration

#defineMCSM0 (0x18) //MainRadioControlStateMachineconfiguration

#defineFOCCFG (0x19) //FrequencyOffsetCompensationconfiguration

#defineBSCFG (0x1A) //BitSynchronizationconfiguration

#defineAGCTRL2 (0x1B) //AGCcontrol

#defineAGCTRL1 (0x1C) //AGCcontrol

#defineAGCTRL0 (0x1D) //AGCcontrol

#defineWOREVT1 (0x1E) //HighbyteEvent0timeout

#defineWOREVT0 (0x1F) //LowbyteEvent0timeout

#defineWORCTRL (0x20) //WakeOnRadiocontrol

#defineFREND1 (0x21) //FrontendRXconfiguration

#defineFREND0 (0x22) //FrontendTXconfiguration

#defineFSCAL3 (0x23) //Frequencysynthesizercalibration

#defineFSCAL2 (0x24) //Frequencysynthesizercalibration

#defineFSCAL1 (0x25) //Frequencysynthesizercalibration

#defineFSCAL0 (0x26) //Frequencysynthesizercalibration

#defineRCCTRL1 (0x27) //RCoscillatorconfiguration

#defineRCCTRL0 (0x28) //RCoscillatorconfiguration

#defineFSTEST (0x29) //Frequencysynthesizercalibrationcontrol

#definePTEST (0x2A) //Productiontest

#defineAGCTEST (0x2B) //AGCtest

#defineTEST2 (0x2C) //Varioustestsettings

#defineTEST1 (0x2D) //Varioustestsettings

#defineTEST0 (0x2E) //Varioustestsettings

/*------------------CommandStrobes--------------------------------------------------------------------*/

#defineSRES (0x30) //Resetchip.

#defineSFSTXON (0x31) //Enableandcalibratefrequencysynthesizer

#defineSXOFF (0x32) //Turnoffcrystaloscillator.

#defineSCAL (0x33) //Calibratefrequencysynthesizerandturnitoff

#defineSRX (0x34) //EnableRX.Performcalibrationfirstifcomingfrom

//IDLEandMCSM0.FS_AUTOCAL=1.

#defineSTX (0x35) //InIDLEstate:EnableTX.

#defineSIDLE (0x36) //ExitRX/TX,turnofffrequencysynthesizerandexit

//Wake-On-Radiomodeifapplicable.

#defineSWOR (0x38) //StartautomaticRXpollingsequence(Wake-on-Radio)

//asdescribedinsection19.5.

#defineSPWD (0x39) //EnterpowerdownmodewhenCSngoeshigh.

#defineSFRX (0x3A) //FlushtheRXFIFObuffer.OnlyissueSFRXintheIDLE,

//TXFIFO_UNDERFLOWorRXFIFO_OVERFLOWstates.

#defineSFTX (0x3B) //FlushtheTXFIFObuffer.OnlyissueSFTXintheIDLE,

//TXFIFO_UNDERFLOWorRXFIFO_OVERFLOWstates.

#defineSWORRST (0x3C) //Resetrealtimeclock.

#defineSNOP (0x3D) //Nooperation.Maybeusedtopadstrobecommandsto

//twobytesforsimplersoftware.

/*------------------StatusRegistersOverview-----------------------------------------------------------*/

#definePARTNUM (0xF0) //PartnumberforCC1100

#defineVERSION (0xF1) //Currentversionnumber

#defineFREQEST (0xF2) //FrequencyOffsetEstimate

#defineLQI (0xF3) //DemodulatorestimateforLinkQuality

#defineRSSI (0xF4) //Receivedsignalstrengthindication

#defineMARCSTATE (0xF5) //Controlstatemachinestate

#defineWORTIME1 (0xF6) //HighbyteofWORtimer

#defineWORTIME0 (0xF7) //LowbyteofWORtimer

#definePKTSTATUS (0xF8) //CurrentGDOxstatusandpacketstatus

#defineVCO_VC_DAC (0xF9) //CurrentsettingfromPLLcalibrationmodule

#defineTXBYTES (0xFA) //UnderflowandnumberofbytesintheTXFIFO

#defineRXBYTES (0xFB) //OverflowandnumberofbytesintheRXFIFO

SPI端口初始化函數(shù):在該程序中使用SPI內(nèi)部模塊功能,如在某些場(chǎng)合下沒(méi)有SPI內(nèi)部模塊,可自行編寫(xiě)出通信協(xié)議。

voidInit_SPI(void)

{

IE1&=~(URXIE0+UTXIE0);

ME1|=USPIE0; //EnableUSART0SPImode

UTCTL0=CKPH+SSEL1+SSEL0+STC; //CKPL+SMCLK,3-pinmode

UCTL0=CHAR+SYNC+MM; //8-bitSPIMaster**SWRST**

UBR00=0x02; //UCLK/30

UBR10=0x00; //0

UMCTL0=0x00; //nomodulation

P3SEL|=CC1100_SIMO+CC1100_SOMI+CC1100_UCLK; //P3.1-3SPIoptionselect

P3DIR|=CC1100_SET+CC1100_SIMO+CC1100_UCLK; //P3.4P3.0outputdirection

}讀CC1100內(nèi)部寄存器函數(shù):讀出所需地址對(duì)應(yīng)的數(shù)據(jù),由于該函數(shù)使用單片機(jī)內(nèi)部SPI模塊,因此不需要直接操作端口,只需控制模塊寄存器即可實(shí)現(xiàn)。該函數(shù)先向CC1100發(fā)送需讀寄存器標(biāo)識(shí)

+

地址,并空操作一次,用于CC1100返回所讀寄存器數(shù)據(jù)。

入口參數(shù):adress,需讀出寄存器地址。

返回參數(shù):i,需讀出寄存器的值。

unsignedcharread_cc1100(unsignedcharaddress)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=read_signle+address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=0x00;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

return(i);

}

讀CC1100狀態(tài)函數(shù):讀出相應(yīng)地址寄存器的狀態(tài),該函數(shù)先向CC1100發(fā)送需讀狀態(tài)寄存器的地址,并空操作一次,用于CC1100返回所讀寄存器狀態(tài)。

入口參數(shù):adress,需讀出狀態(tài)寄存器地址。

返回參數(shù):i,需讀出狀態(tài)寄存器的值。

unsignedcharread_cc1100_status(unsignedcharaddress)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=0x00;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

return(i);

}

向CC1100寄存器寫(xiě)入數(shù)值函數(shù):該函數(shù)先向CC1100發(fā)送需寫(xiě)寄存器的地址,接著發(fā)送需寫(xiě)入的數(shù)據(jù)。

入口參數(shù):adress,需寫(xiě)入寄存器地址。

返回參數(shù):data,需寫(xiě)入的值。

voidwrite_cc1100(charaddress,chardata)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=address;

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

while((IFG1&UTXIFG0)==0);

TXBUF0=data;

while((IFG1&UTXIFG0)==0);

while((IFG1&URXIFG0)==0);

i=U0RXBUF;

HIGH_CC1100_SET;

}

CC1100功率控制函數(shù):用于控制CC1100輸出功率的大小。不同輸出功率的傳輸距離和所耗電量不同,應(yīng)根據(jù)實(shí)際需要寫(xiě)入所需功率大小。具體不同數(shù)據(jù)代表的功率可參考數(shù)據(jù)手冊(cè)。

入口參數(shù):data,功率參數(shù)。

voidwrite_cc1100_PATABLE(chardata)

{

chari;

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=write_burst+0x3e;

while((IFG1&UTXIFG0)==0);

TXBUF0=data;

while((IFG1&UTXIFG0)==0);

TXBUF0=0;

while((IFG1&UTXIFG0)==0);

i=U0RXBUF;

while((IFG1&URXIFG0)==0);

HIGH_CC1100_SET;

}向CC1100寫(xiě)入需發(fā)送的數(shù)值函數(shù):向CC1100寫(xiě)入需無(wú)線(xiàn)傳輸?shù)臄?shù)據(jù)。該函數(shù)中tx_buffer[0]存儲(chǔ)的是需發(fā)送數(shù)據(jù)的數(shù)據(jù)包大小,并根據(jù)該數(shù)據(jù)發(fā)送tx_buffer[]中的數(shù)據(jù)。需注意CC1100一次最多發(fā)送64字節(jié)的數(shù)據(jù)包文件,大于該數(shù)值需分開(kāi)發(fā)送。

voidwrite_cc1100_tx(void)

{

unsignedchari,k;

if(tx_buffer[0]==0){return;}

LOW_CC1100_SET;

MISO_LOW_WAIT();

while((IFG1&UTXIFG0)==0);

TXBUF0=write_burst+0x3f;

for(i=0;i<tx_buffer[0]+1;i++)

{

while((IFG1&UTXIFG0)==0);

TXBUF0=tx_buffer[i];

while((IFG1&URXIFG0)==0);

k=U0RXBUF;

}

while((IFG1&UTXIFG0)==0);

P3OUT|=SET;

write_cc1100_command(STX);

delay_ms(8);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論