CC1000編程詳解(內(nèi)含具體測(cè)試過(guò)的代碼)_第1頁(yè)
CC1000編程詳解(內(nèi)含具體測(cè)試過(guò)的代碼)_第2頁(yè)
CC1000編程詳解(內(nèi)含具體測(cè)試過(guò)的代碼)_第3頁(yè)
CC1000編程詳解(內(nèi)含具體測(cè)試過(guò)的代碼)_第4頁(yè)
CC1000編程詳解(內(nèi)含具體測(cè)試過(guò)的代碼)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

FSK調(diào)制芯片CC1000編程說(shuō)明在光纖模擬直放站中,光模塊是一個(gè)很重要的局部。對(duì)于光模塊的設(shè)計(jì)中,必然需要使用到FSK調(diào)制芯片CC1000來(lái)進(jìn)行光模塊之間通信,所以對(duì)于如何使用CC1000,也就是一個(gè)比擬重要的內(nèi)容。CC1000的具體功能CC1000電路系統(tǒng)主要設(shè)計(jì)用于ISM〔工業(yè)、科學(xué)及醫(yī)療〕方面以及SRD〔短距離通訊〕,工作頻帶在315、868及915MHz,但CC1000很容易通過(guò)編程使其工作在300~1000MHz范圍內(nèi)。其主要工作參數(shù)能通過(guò)串行總線接口編程改變,這樣使CC1000使用更方便更靈活。CC1000的電路連接以下是CC1000芯片和單片機(jī)的連接框圖和電路圖:圖1CC1000芯片和單片機(jī)的連接框圖圖2CC1000芯片和單片機(jī)的連接框圖具體的管腳功能介紹:微控制器通過(guò)三串行配置口PDATA、PCLK和PALE控制CC1000改變不同模式,DIO和DCLK是CC100和MCU收發(fā)數(shù)據(jù)信號(hào)接口,MCU通過(guò)DIO將數(shù)據(jù)發(fā)送給CC1000芯片,通過(guò)DCLK接收將CC1000芯片發(fā)送給MCU的數(shù)據(jù)。微控器能從管腳CHP_OUT〔LOCK〕監(jiān)視頻率鎖定狀態(tài)。CC100通過(guò)RF_IN、RF_OUT來(lái)輸出和接收信號(hào)給天線。MCU讀寫CC1000存放器的編程CC1000可通過(guò)簡(jiǎn)單的三串行接口PDATA、PCLK和PALE進(jìn)行編程。CC1000主要有36個(gè)8位配置存放器,每個(gè)由7位地址尋址。讀/寫位初始化讀或?qū)懙牟僮?。CC1000一個(gè)完整的配置要求發(fā)送29個(gè)數(shù)據(jù)幀,每個(gè)16位〔7個(gè)地址位1個(gè)讀/寫位和8個(gè)數(shù)據(jù)位〕。PCLK頻率決定了完全配置所需時(shí)間,在10MHzPCLK頻率工作下,完成整個(gè)配置所需時(shí)間少于60μs。在低電位模式下設(shè)置時(shí)僅需發(fā)射一個(gè)幀,所需時(shí)間少于μ2s。所有存放器都可讀。在每次寫循環(huán)中,16位字節(jié)送入PDATA通道,每個(gè)數(shù)據(jù)幀中7個(gè)最重要的位〔A6:0〕是地址位。A6是MSB〔最高位〕,首先被發(fā)送。下一個(gè)發(fā)送的位是讀/寫位〔高電平寫,低電平讀〕在傳輸?shù)刂泛妥x/寫位期間,PALE〔編程地址鎖存使能〕必須保持低電平,接著傳輸8個(gè)數(shù)據(jù)位〔D7:0〕見(jiàn)圖3。圖3寫CC1000存放器圖4讀取CC1000存放器具體的代碼如下://*******************************************************************************//函數(shù)描述:SPI初始化函數(shù)FSKModuleInit()//FSK初始化為接收狀態(tài)//輸入?yún)?shù):無(wú)//返回值:無(wú)//*******************************************************************************unsignedcharSPI(unsignedcharx){unsignedchari,j;j=0;for(i=0;i<8;i++){if(x&0x80)GPIO_WriteBit(GPIOB,BSPB_CC1000_PDATA,(BitAction)0x01);//IN1000=1;elseGPIO_WriteBit(GPIOB,BSPB_CC1000_PDATA,(BitAction)0x00);//IN1000=0;x<<=1;GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01);//CLK1000=1;Delay(5);GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x00);//CLK1000=0;}GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01);//CLK1000=1;returnj;}//*******************************************************************************//函數(shù)描述:寫CC1000存放器FSKModuleInit()//FSK初始化為接收狀態(tài)//輸入?yún)?shù):無(wú)//返回值:無(wú)//*******************************************************************************voidWriteToCC1000(unsignedcharaddr,unsignedchardat){addr<<=1;//把7位地址位移到高位addr|=0x01;//寫地址GPIO_WriteBit(GPIOB,BSPB_CC1000_PALE,(BitAction)0x00);//CS1000=0;SPI(addr);GPIO_WriteBit(GPIOB,BSPB_CC1000_PALE,(BitAction)0x01);//CS1000=1;Delay(5);//寫數(shù)據(jù)SPI(dat);Delay(5);}//*******************************************************************************//函數(shù)描述:讀CC1000存放器ReadFromCC1000()//FSK初始化為接收狀態(tài)//輸入?yún)?shù):無(wú)//返回值:無(wú)//*******************************************************************************unsignedcharReadFromCC1000(unsignedcharaddr){unsignedcharj;unsignedchardat=0;GPIO_InitTypeDefGPIO_InitStructure;addr<<=1;//把7位地址位移到高位GPIO_WriteBit(GPIOB,BSPB_CC1000_PALE,(BitAction)0x00);//CS1000=0;//寫地址for(j=8;j>0;j--){GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01);//CLK1000=1;if(addr&0x80)GPIO_WriteBit(GPIOB,BSPB_CC1000_PDATA,(BitAction)0x01);//IN1000=1;elseGPIO_WriteBit(GPIOB,BSPB_CC1000_PDATA,(BitAction)0x00);//IN1000=0;addr<<=1;GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x00);//CLK1000=0;}GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01);//CLK1000=1;GPIO_WriteBit(GPIOB,BSPB_CC1000_PALE,(BitAction)0x01);//CS1000=1;Delay(5);//讀數(shù)據(jù) //輸入輸出數(shù)據(jù)線共用,需要修改端口的輸入輸出配置 //讀數(shù)據(jù)IN1000,改為輸入模式GPIO_InitStructure.GPIO_Pin=BSPB_CC1000_PDATA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);for(j=8;j>0;j--){GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x00);//CLK1000=0;dat<<=1;if(GPIO_ReadInputDataBit(GPIOB,BSPB_CC1000_PDATA)==1)//if(IN1000==1)dat++;GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01);//CLK1000=1;} //切換回輸出模式GPIO_InitStructure.GPIO_Pin=BSPB_CC1000_PDATA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);return(dat);}CC1000存放器的配置初始化CC1000,具體的初始化順序如下:圖5初始化CC1000順序具體的初始化代碼如下://*******************************************************************************//函數(shù)描述:CC1000初始化InitCC1000()//FSK初始化為接收狀態(tài)//輸入?yún)?shù):無(wú)//輸出參數(shù):無(wú)//返回值:無(wú)//*******************************************************************************voidInitCC1000(void){unsignedchark;unsignedintt;unsignedintp;GPIO_WriteBit(GPIOB,BSPB_CC1000_PALE,(BitAction)0x01); //CS1000=1.25;//片選信號(hào)為無(wú)效GPIO_WriteBit(GPIOB,BSPB_CC1000_PDATA,(BitAction)0x01); //IN1000=0.4; //數(shù)據(jù)信號(hào)GPIO_WriteBit(GPIOB,BSPB_CC1000_PCLK,(BitAction)0x01); //CLK1000=1.24;//時(shí)鐘信號(hào) WriteToCC1000(CC1000_MAIN,0x3a); //0011,1010啟動(dòng)振蕩器內(nèi)部存放器復(fù)位 delay_nms(4); //>=2ms WriteToCC1000(CC1000_MAIN,0x3b); //0011,1011恢復(fù)默認(rèn)值 delay_nms(4); //>=2ms//設(shè)置接收頻率433.766M WriteToCC1000(CC1000_FREQ_2A,0x58);//FREQ5775360 t=0x2000+otr.cfg.iFREQx; WriteToCC1000(CC1000_FREQ_1A,t/256); //WriteToCC1000(CC1000_FREQ_1A,0x20); WriteToCC1000(CC1000_FREQ_0A,t%256); //WriteToCC1000(CC1000_FREQ_0A,0x00); //設(shè)置發(fā)送中心頻率433.916M,"1"→433.948MHz"0"→433.884MHz WriteToCC1000(CC1000_FREQ_2B,0x58);//FREQ5776933 t=0x2625+otr.cfg.iFREQx; WriteToCC1000(CC1000_FREQ_1B,t/256); //WriteToCC1000(CC1000_FREQ_1B,0x26);//0x26 WriteToCC1000(CC1000_FREQ_0B,t%256); //WriteToCC1000(CC1000_FREQ_0B,0x25);//0x25 //頻偏0.063975M對(duì)應(yīng)853 WriteToCC1000(CC1000_FSEP1,0x03); WriteToCC1000(CC1000_FSEP0,0x55); WriteToCC1000(CC1000_FRONT_END,0x02); WriteToCC1000(CC1000_PA_POW,0x00); WriteToCC1000(CC1000_PLL,0x48);WriteToCC1000(CC1000_LOCK,0x00); WriteToCC1000(CC1000_CAL,0x26);WriteToCC1000(CC1000_MODEM2,0x96); WriteToCC1000(CC1000_MODEM1,0x0f);WriteToCC1000(CC1000_MODEM0,0x4a); //9.6k,異步/ WriteToCC1000(CC1000_MATCH,0x70); //0x70 WriteToCC1000(CC1000_MAIN,0x39); //0011,1001啟動(dòng)BIAS delay_nms(2); WriteToCC1000(CC1000_MAIN,0x31); //0011,0001啟動(dòng)FS //校正 WriteToCC1000(CC1000_MAIN,CC1000_RXMODE);WriteToCC1000(CC1000_CURRENT,RX_CURRENT); delay_nms(2); WriteToCC1000(CC1000_CAL,0xa6); //啟動(dòng)校正 delay_nms(50); p=0; do { //等待校正結(jié)束 k=ReadFromCC1000(CC1000_CAL); if(++p>FSKTIMEOUT) break; }while((k&0x08)==0); WriteToCC1000(CC1000_CAL,0x26); //結(jié)束校正 WriteToCC1000(CC1000_MAIN,CC1000_TXMODE);WriteToCC1000(CC1000_CURRENT,TX_CURRENT); delay_nms(2); WriteToCC1000(CC1000_CAL,0xa6); //啟動(dòng)校正 delay_nms(50);p=0; do { //等待校正結(jié)束 k=ReadFromCC1000(CC1000_CAL); if(++p>FSKTIMEOUT) break; }while((k&0x08)==0); WriteToCC1000(CC1000_CAL,0x26); //結(jié)束校正 SetCC1000RxModel(); //CC1000初始狀態(tài)為接收狀態(tài)}設(shè)置發(fā)送狀態(tài)編程//*******************************************************************************//函數(shù)描述:SetCC1000TxModel()//FSK初始化為發(fā)送狀態(tài)//輸入?yún)?shù):無(wú)//輸出參數(shù):無(wú)//返回值:無(wú)//*******************************************************************************voidSetCC1000TxModel(void){unsignedchark;unsignedintp;p=0;do{ //設(shè)置狀態(tài)并判斷//0xff的作用是為了防止沒(méi)有加FSK模塊的情況WriteToCC1000(CC1000_MAIN,CC1000_TXMODE);k=ReadFromCC1000(CC1000_MAIN);if(++p>FSKTIMEOUT)break;}while((k!=0xff)&&(k!=CC1000_TXMODE));WriteToCC1000(CC1000_CURRENT,TX_CURRENT);delay_nms(2);if((otr.cfg.bFskTxP>10)||(otr.cfg.bFskTxP<-20))otr.cfg.bFskTxP=0;WriteToCC1000(CC1000_PA_POW,FskTxP_Table[otr.cfg.bFskTxP+20]);//設(shè)置發(fā)射功率delay_nms(2);}設(shè)置接收狀態(tài)編程//*******************************************************************************//函數(shù)描述:SetCC1000RxModel()//FSK初始化為接收狀態(tài)//輸入?yún)?shù):無(wú)//輸出參數(shù):無(wú)//返回值:無(wú)//*******************************************************************************voidSetCC1000RxModel(void){unsignedchark;unsignedintp;WriteToCC1000(CC1000_PA_POW,0x00);p=0;do{ //設(shè)置為接收狀態(tài)并判斷狀態(tài)是否正確設(shè)置//0xff的作用是為了防止沒(méi)有加FSK模塊的情況WriteToCC1000(CC1000_MAIN,CC1000_RXMODE);k=ReadFromCC1000(CC1000_MAIN);if(++p>FSKTIMEOUT)break;}while((k!=0xff)&&(k!=CC1000_RXMODE));WriteToCC1000(CC1000_CURRENT,RX_CURRENT);WriteToCC1000(CC1000_MODEM1,0x0F);}CC1000發(fā)射和接收頻率的配置編程〔頻率主要是送到天線上〕工作頻率是通過(guò)對(duì)配置存放器里的頻率字進(jìn)行編程來(lái)設(shè)置的,有兩個(gè)頻率字存放器,分別叫A和B。它們可編程為兩種不同的頻率。其中一個(gè)頻率字能用于接收〔本振頻率〕,另一個(gè)用于發(fā)射〔發(fā)射頻率〕。這是為了能在發(fā)送模式和接收模式之間迅速切換。它們也能在兩個(gè)不同的通道中進(jìn)行接收〔或發(fā)送〕,頻率字A或B由MAIN存放器里的F_REG位選定。頻率字A和B有24位3字節(jié)分別位于FREQ2A:FREQ1A:FREQ0A和FREQ2B:FREQ1B:FREQ0B。FSK分頻是在FSEP1:FSEP0存放器里10位編程的。CC1000的工作頻率計(jì)算公式為:其中頻率fref由晶振頻率除以REFDIV,CC1000的接收頻率為fVCO, CC1000的發(fā)送頻率為:f1=f0+fsep其中fsep公式為發(fā)射模式下的f0只要是低于FSK頻率就可以,//*******************************************************************************//函數(shù)描述:SetCC1000Freq()//輸入?yún)?shù):無(wú)//輸出參數(shù):無(wú)//返回值:無(wú)//*******************************************************************************voidSetCC1000Freq(){wordt;//設(shè)置接收頻率433.766MWriteToCC1000(CC1000_FREQ_2A,0x

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論