




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
系統(tǒng)時(shí)鐘和定時(shí)器S3C2410/S3C2440的時(shí)鐘控制邏輯既可以外接晶振,然后通過內(nèi)部電路產(chǎn)生時(shí)鐘源;也可以直接使用外部提供的時(shí)鐘源,它們通過引腳的設(shè)置來選擇。ModeOM[3:2]MPLLStateUPLLStateMainClocksourceUSBClockSource00OnOnCrystalCrystal01OnOnCrystalEXTCLK10OnOnEXTCLKCrystal11OnOnEXTCLKEXTCLK時(shí)鐘控制邏輯給整個(gè)芯片提供3種時(shí)鐘:FCLK用于CPU核;HCLK用于AHB總線上設(shè)備,主要用于高性能模塊之間的連接,比如CPU核、寄存器控制器、中斷控制器、LCD控制器、DMA和USB主機(jī)模塊等;PCLK用于APB總線上的設(shè)備,主要用于低帶寬的周邊外設(shè)之間的連接,比如WATCHDOG、IIS、I2C、PWM定時(shí)器、MMC接口、ADC、UART、GPIO、RTC和SPI。為了降低電磁干擾、降低板間布線的要求,S3C2410/S3C2440外接的晶振頻率通常很低,開發(fā)板上一般為12MHz,需要通過時(shí)鐘控制邏輯的PLL提高系統(tǒng)時(shí)鐘。S3C2410/S3C2440有兩個(gè)PLL:MPLL和UPLL。UPLL專用于USB設(shè)備,MPLL用于設(shè)置FCLK、HCLK、PCLK。上電時(shí),PLL沒被啟動(dòng),F(xiàn)CLK即等于外部輸入的時(shí)鐘,稱為Fin。若要提高系統(tǒng)時(shí)鐘,需要軟件來啟動(dòng)PLL,可跟隨FCLK的圖像了解啟動(dòng)過程。上電幾毫秒后,晶振輸出穩(wěn)定,F(xiàn)CLK=Fin(晶振頻率),nRESET信號(hào)恢復(fù)高電平后,CPU開始執(zhí)行指令??梢栽诔绦蜷_頭啟動(dòng)MPLL,設(shè)置MPLL的幾個(gè)寄存器后,需要等待一段時(shí)間(LockTime),MPLL輸出才穩(wěn)定。在這段時(shí)間內(nèi),F(xiàn)CLK停振,CPU停止
工作。LockTime的長(zhǎng)短由寄存器LOCKTIME設(shè)定。LockTime之后,MPLL輸出正常,CPU工作在新的FCLK下。FCLK、HCLK和PCLK的比例是可以改變的,設(shè)置它們?nèi)叩谋壤?,啟?dòng)MPLL只需設(shè)置3個(gè)寄存器(對(duì)于S3C2440的一些時(shí)鐘比例,還需要額外設(shè)置一個(gè)寄存器)。LOCKTIME寄存器:用于設(shè)置“TimeLock”的長(zhǎng)度。MPLLCON寄存器:用于設(shè)置FCLK與Fin的倍數(shù)。CLKDIVN寄存器:用于設(shè)置FCLK、HCLK、PCLK三者的比例。對(duì)于S3C2440的一些時(shí)鐘比例,還需要額外設(shè)置一個(gè)寄存器CAMDIVN。#defineS3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00))#defineS3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))/*對(duì)于MPLLCON寄存器,[19:12]為MDIV,[9:4]為PDIV,[1:0]為SDIV有如下計(jì)算公式:S3C2410:MPLL(FCLK)=(m*Fin)/(p*2"s)S3C2410:MPLL(FCLK)=(2*m*Fin)/(p*2"s)其中:m=MDIV+8,p=PDIV+2,s=SDIV對(duì)于本開發(fā)板,F(xiàn)in=12MHz設(shè)置CLKDIVN,令分頻比為:FCLK:HCLK:PCLK=1:2:4,F(xiàn)CLK=200MHz,HCLK=100MHz,PCLK=50MHz*/voidclock_init(void){//LOCKTIME=0x00ffffff;//使用默認(rèn)值即可CLKDIVN=0x03; //FCLK:HCLK:PCLK=1:2:4,HDIVN=1,PDIVN=1/*如果HDIVN非0,CPU的總線模式應(yīng)該從“fastbusmode”變?yōu)椤癮synchronousbusmode” */__asm__(/*讀出控制寄存器/*讀出控制寄存器*//*設(shè)置為“asynchronous/*寫入控制寄存器*/"orrr1,r1,#0xc0000000\n"busmode”*/"mcrp15,0,r1,c1,c0,0\n");/*判斷是S3C2410還是S3C2440*/if((GSTATUS1==0x32410000)||(GSTATUS1==0x32410002)){MPLLCON= S3C2410_MPLL_200MHZ; /*現(xiàn)在FCLK=200MHz,HCLK=100MHz,PCLK=50MHz*/}elseMPLLCON=S3C2440_MPLL_200MHZ;/*現(xiàn)在,F(xiàn)CLK=200MHz,HCLK=100MHz,PCLK=50MHz*/}}PWM定時(shí)器S3C2410/S3C2440的定時(shí)器部件完全一樣,共有5個(gè)16位的定時(shí)器。其中定時(shí)器0、1、2有PWM功能,即它們都有一個(gè)輸出引腳,可以通過定時(shí)器來控制引腳周期性的高、低電平變化;定時(shí)器4沒有輸出引腳。定時(shí)器部件的時(shí)鐘電源位PCLK,首先通過兩個(gè)8位的預(yù)分頻器降低頻率:定時(shí)器0、1共用第一個(gè)預(yù)分頻,定時(shí)器2、3、4共用第二個(gè)預(yù)分頻器。預(yù)分頻器的輸出將進(jìn)入第二級(jí)分頻器,它們輸出5種頻率的時(shí)鐘:2分頻、4分頻、8分頻、16分頻或者外部時(shí)鐘TCLK0/TCLK1。每個(gè)定時(shí)器的工作時(shí)鐘可以從這5種頻率中選擇。這兩個(gè)預(yù)分頻都可以通過TCFG0寄存器來設(shè)置,每個(gè)定時(shí)器工作在哪種頻率下也可以通過TCFG1寄存器來選擇。
定時(shí)器內(nèi)部控制邏輯的工作流程如下。(1)程序初始,設(shè)定TCMPBn、TCNTBn這兩個(gè)寄存器,它們表示定時(shí)器n的比較值、初始計(jì)數(shù)值。(2) 隨之設(shè)置TCON寄存器啟動(dòng)定時(shí)器n,這時(shí),TCMPBn、TCNTBn的值將被裝入其內(nèi)部存儲(chǔ)器TCMPn、TCNTn中。在定時(shí)器n的工作頻率下,TCNTn開始減1計(jì)數(shù),其值可以通過讀取TCNTOn寄存器得知。(3) 當(dāng)TCNTn的值等于TCMPn的值時(shí),定時(shí)器n的輸出管腳TOUTn反轉(zhuǎn);TCNTn繼續(xù)減1計(jì)數(shù)。(4) 當(dāng)TCNTn的值到達(dá)0時(shí),其輸出管腳TOUTn再次反轉(zhuǎn),并觸發(fā)定時(shí)器n的中斷(如果中斷使能的話)。(5) 當(dāng)TCNTn的值到達(dá)0時(shí),如果在TCON寄存器中將定時(shí)器n設(shè)為“自動(dòng)加載”,則TCMPBn和TCNTBn寄存器的值被自動(dòng)裝入TCMPn和TCNTn寄存器中,下一個(gè)計(jì)數(shù)流程開始。定時(shí)器n的輸出管腳TOUTn初始狀態(tài)為高電平,以后在TCNTn的值等于
TCMPn的值、TCNTn的值等于0時(shí)反轉(zhuǎn)。也可以通過TCON寄存器設(shè)置其初始電平,這樣TOUTn的輸出就完全相反了。通過設(shè)置TCMPBn、TCNTBn的值可以設(shè)置管腳TOUTn輸出信號(hào)的占空比,這就是所謂的可調(diào)制脈沖,所以這些定時(shí)器又被稱為PWM定時(shí)器。下面講解定時(shí)器的寄存器使用方法。(1) TCFG0寄存器:位[7:0]、位[15:8]分別被用于控制預(yù)分頻器0、1,它們的值為0~255.經(jīng)過預(yù)分頻器出來的時(shí)鐘頻率為:PCLK/{prescalervalue+1}。(2) TCFG1寄存器:經(jīng)過預(yù)分頻器得到的時(shí)鐘將被2分頻、4分頻、8分頻和16分頻,除這4種頻率外,額外地,定時(shí)器0、1還可以工作在外接的TCLK0時(shí)鐘下,定時(shí)器2、3、4還可以工作在外接的TCLK1時(shí)鐘下。通過TCFG1寄存器來設(shè)置這5個(gè)定時(shí)器,分別工作于這5個(gè)頻率中哪一個(gè)之下。(3) TCNTBn/TCMPBn寄存器:n為0~4,這兩個(gè)寄存器都只用到位[15:0],TCNTBn中保存定時(shí)器的初始計(jì)數(shù)值,TCMPBn中保存比較值。它們的值在啟動(dòng)定時(shí)器時(shí),被傳到定時(shí)器內(nèi)部寄存器TCNTn、TCMPn中。沒有TCMPB4,因?yàn)槎〞r(shí)器4沒有輸出引腳。(4) TCNTOn寄存器:n位0~4,定時(shí)器n被啟動(dòng)后,內(nèi)部寄存器TCNTn在其工作時(shí)鐘下不斷減1計(jì)數(shù),可以通過讀取TCNTOn寄存器得知其值。(5)TCON寄存器:有四個(gè)作用,a、第一次啟動(dòng)定時(shí)器時(shí)“手動(dòng)”將TCNTBn/TCMPBn寄存器的值裝入內(nèi)部寄存器TCNTn、TCMPn中;b、啟動(dòng)、停止定時(shí)器;3、決定在定時(shí)器計(jì)數(shù)達(dá)到0時(shí)是否自動(dòng)將TCNTBn/TCMPBn寄存器的值裝入內(nèi)部寄存器TCNTn、TCMPn中;4、決定定時(shí)器的管腳TOUTn的輸出電平是否反轉(zhuǎn)。在第一次使用定時(shí)器時(shí),需要設(shè)置“手動(dòng)更新”位為1以使TCNTBn/TCMPBn寄存器的值裝入內(nèi)部寄存器TCNTn、TCMPn中。下一次如果還要設(shè)置這一位,需要先將它清0。#definePCLK 50000000voiddelay_ms(inttime){intval=(PCLK>>3)/1000-1;TCFG0&=~(0xff<<8);//TCFG0設(shè)置預(yù)分頻器0、1,TCFG1用于設(shè)置二次分頻TCFG0|=3<<8; //prescaler=3+1TCFG1&=~(0xf<<12);TCNTB3=val;TCMPB3=val>>1;TCONTCNTB3=val;TCMPB3=val>>1;TCON&=~(0xf<<16);TCON|=0xb<<16;starttimer3TCON&=~(2<<16);while(time--)//interval,inv-off,updateTCNTB3&TCMPB3,//clearmanualupdatebit
{while(TCNTO3>=val>>1);while(TCNTO3<val>>1);};}#defineGPB5_out(1<<(5*2))//LED1#defineGPB6_out(1<<(6*2))//LED2#defineGPB7_out(1<<(7*2))//LED3#defineGPB8_out(1<<(8*2))//LED4/**TimerinputclockFrequency=PCLK/{prescalervalue+1}/{dividervalue}*{prescalervalue}=0~255*{dividervalue}=2,4,8,16*本實(shí)驗(yàn)的Timer0的時(shí)鐘頻率=100MHz/(99+1)/(16)=62500Hz*設(shè)置Timer00.5秒鐘觸發(fā)一次中斷:*/voidtimer0_init(void)TCFG0=99;TCFG1=0x03;TCFG0=99;TCFG1=0x03;TCNTB0=31250;TCON|=(1<<1);//選擇16分頻//0.5秒鐘觸發(fā)一次中斷//手動(dòng)更新TCON=TCON=0x09;//自動(dòng)加載,清“手動(dòng)更新”位,啟動(dòng)定時(shí)器0//定時(shí)器0中斷使能voidinit_irq_timer0(void){INTMSK&=(~(1<<10));//定時(shí)器0中斷使能}voidTimer0_Handle(void){if(INTOFFSET==10)GPBDAT=~(GPBDAT&GPBDAT=~(GPBDAT&(Oxf<<5)); //每次中斷令4個(gè)LED改變狀態(tài)SRCPND=1<<INTOFFSET; //清中斷INTPND=INTPND;voidTimer0_test(void){charc;GPBCON=GPB5_out|GPB6_out|GPB7_out|GPB8_out;GPBDAT=0xffff;timer0_init();printf("\nKeyScanTest,pressESCkeytoexit!\n");ClearPending(BIT_TIMER0);pISR_TIMER0=(int)Timer0_Handle;EnableIrq(BIT_TIMER0);while((c=get_c())!=0x1b);DisableIrq(BIT_TIMER0);}BOARD//***************************[BOARDBEEP]*******************************voidBuzzer_Freq_Set(intfreq){GPBCON&=~3;GPBCON|=2;//setGPB0astout0,pwmoutputTCFG0&=~0xff;TCFG0|=15;//prescaler=15+1TCFG1&=~0xf;TCFG1|=2;//mux=1/8TCNTB0=(PCLK>>7)/freq;TCMPB0=TCNTB0>>1;//50%TCON&=~0x1f;TCON|=0xb;//disabledeadzone,auto-reload,inv-off,updateTCNTB0&TCMPB0,starttimer0TCON&=~2;//clearmanualupdatebit}voidBuzzer_Stop(void){GPBCON&=~3;//setGPB0asoutputGPBCON|=1;GPBDAT&=~1;}//***************************[BOARDBEEP]*******************************voidBeep(intfreq,intms){Buzzer_Freq_Set(freq);delay_ms(ms);Buzzer_Stop();}/****************************************************************************【功能說明】蜂鳴器PWM測(cè)試****************************************************************************/voidBuzzer_Pwm_Test(void){intfreq=8000;//lci1000;Buzzer_Freq_Set(freq);while(1){charkey=get_c();if(key=='+'){if(freq<2000)//lci20000freq+=10;Buzzer_Freq_Set(freq);}if(key=='-'){if(freq>11)freq-=10;Buzzer_Freq_Set(freq);}if(key==0x1b){Buzzer_Stop();returnWATCHDOG定時(shí)器WATCHDOG定時(shí)器可以像一般16位定時(shí)器一樣用于產(chǎn)生周期性的中斷,也可以用于發(fā)出復(fù)位信號(hào)以重啟失常的系統(tǒng)。WATCHDOG定時(shí)器的8位預(yù)分頻器將PCLK分頻后,被再次分頻得到4種頻率:16分頻、32分頻、64分頻、128分頻,WATCHDOG定時(shí)器可以選擇工作于哪種頻率之下。WTCNT寄存器按照其工作頻率減1計(jì)數(shù),當(dāng)達(dá)到0時(shí),可以產(chǎn)生中斷信號(hào),可以輸出復(fù)位信號(hào)。在第一次使用WATCHDOG定時(shí)器時(shí),需要往WTCNT寄存器中寫入初始計(jì)數(shù)值,以后在計(jì)數(shù)值到達(dá)0時(shí)自動(dòng)從WATDAT寄存器中裝入,重新開使用WATCHDOG定時(shí)器的“WATCHDOG功能”時(shí),在正常的程序中,必須不斷重新設(shè)置WTCNT寄存器使得它不為0,這樣可以保證系統(tǒng)不被重啟,這稱為“喂狗”;當(dāng)程序崩潰時(shí)不能正?!拔构贰?,計(jì)數(shù)值達(dá)到0后系統(tǒng)將被重啟,這樣程序?qū)⒅匦逻\(yùn)行。為了克服各種干擾、避免各類系統(tǒng)錯(cuò)誤時(shí)系統(tǒng)徹底死機(jī),經(jīng)常使用WATCHDOG功能。WATCHDOG定時(shí)器所涉及的寄存器如下。(1)WTCON寄存器:用于設(shè)置預(yù)分頻系數(shù),選擇工作頻率,決定是否使能中斷、是否啟動(dòng)WATCHDOG功能(即是否輸出復(fù)位信號(hào))。
WTCONBitDescriptionInitialStatePrescalervalue[15:8]PrescalervalueThevalidrangeisfromOto255(2?-1).0x80Reserved[7:6]Resen/ed.Theset
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅小區(qū)公共區(qū)域租賃及社區(qū)服務(wù)管理合同示范
- 車輛質(zhì)押融資擔(dān)保服務(wù)合同書
- 生態(tài)保護(hù)區(qū)土地租賃使用權(quán)合同
- 上市公司財(cái)務(wù)代理與審計(jì)服務(wù)合同范本
- 奧體公園體育館項(xiàng)目施工組織設(shè)計(jì)
- 醫(yī)院婚喪喜慶管理制度
- 聚苯乙烯外墻外保溫工程投標(biāo)文件
- 公司日?qǐng)?bào)周報(bào)管理制度
- 公司安全保護(hù)管理制度
- 市場(chǎng)值班經(jīng)理管理制度
- 純堿MSDS報(bào)告化學(xué)品安全技術(shù)說明書
- 機(jī)械原理課程設(shè)計(jì)-織機(jī)開口機(jī)構(gòu)設(shè)計(jì)說明書
- 我國(guó)服飾文化及地理環(huán)境關(guān)系研究報(bào)告
- 魚類學(xué)-鯔形目ppt課件教學(xué)教程
- 高三物理一輪復(fù)習(xí)教學(xué)案追擊和相遇問題
- Triz矛盾矩陣 48行48列
- (完整版)PICC維護(hù)操作流程及評(píng)分標(biāo)準(zhǔn)
- 統(tǒng)編人教部編版八年級(jí)下冊(cè)語(yǔ)文第六單元測(cè)試卷(含答案)
- 新版醫(yī)療器械隨貨同行單模版(共1頁(yè))
- 220kV母差保護(hù)(BP-2B)全部校驗(yàn)作業(yè)指導(dǎo)書
- 導(dǎo)桿式柴油打樁錘使用說明書15p
評(píng)論
0/150
提交評(píng)論