新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 系統(tǒng)時(shí)鐘和定時(shí)器;MPLL和定時(shí)器

        系統(tǒng)時(shí)鐘和定時(shí)器;MPLL和定時(shí)器

        作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        寫在前面:覺得這章比較簡(jiǎn)單,沒有花較大篇幅來講,很多寄存器的相關(guān)用法可以參照S 3C2440的官方手冊(cè),很容易看懂
        1系統(tǒng)時(shí)鐘
        (1) FCLK:用于CPU核
        HCLK:用于AHB總線上設(shè)備:CPU核、存儲(chǔ)器控制器、中斷控制器、LCD控制器、DMA和USB主機(jī)模塊
        PCLK:用于APB總線上設(shè)備:WATCHDOG、IIS、I2C、PWM定時(shí)器、MMC接口、ADC、UART、GPIO、RTC和SPI
        (2 )開發(fā)板時(shí)鐘頻率為12 MHZ,通過PLL提高系統(tǒng)時(shí)鐘:MPLL和UPLL(S3C2440);UPLL用于USB設(shè)備,MPLL用于FCLK、HCLK、PLCK
        (3 )上電→FCLK=Fin(外部輸入時(shí)鐘)→設(shè)置MPLL(Lock Time:長(zhǎng)短由寄存器LOCKTIME設(shè)定)→新的時(shí)鐘輸出正常
        (4)幾個(gè)重要寄存器
        MPLLCON寄存器用于設(shè)置FCLK與Fin的倍數(shù)
        CLKDIVN寄存器用于設(shè)置FCLK、HCLK、PCLK三者的比例
        2 PWM定時(shí)器
        (1)5個(gè)16位的定時(shí)器,其中定時(shí)器0、1、2、3有PWM功能,即它們都有一個(gè)輸出引腳,可以通過定時(shí)器來控制引腳周期性的高、低電平變化;定時(shí)器4沒有輸出引腳
        (2)PLCK→2個(gè)8位預(yù)分頻器(定時(shí)器0、1共用第一個(gè)定時(shí)器2、3、4共用第二個(gè);輸出2分頻,4分頻,8分頻,16分頻或者外部時(shí)鐘TCLK0/TCLK1)
        TCFG0:經(jīng)過分頻器出來的時(shí)鐘頻率:PLCK/(TCFG0[7:0]或TCFG0[15:8]+1)
        TCFG1設(shè)定相應(yīng)定時(shí)器為經(jīng)過分頻器出來的時(shí)鐘頻率的幾分頻
        定時(shí)器工作頻率= PLCK/(TCFG0[7:0]或TCFG0[15:8]+1)/幾分頻
        (3)TCMPn=TCMPBn,TCNTn=TCNTBn→while(TCNTn==TCMPn) ~TOUTn →while(TCNTn==0) ~TOUTn,并觸發(fā)中斷(若中斷使能的話),且如果在TCON寄存器中將定時(shí)器設(shè)為“自動(dòng)加載”,則TCMPn=TCMPBn,TCNTn=TCNTBn
        輸出管腳TOUTn默認(rèn)為高電平,可以通過TCON改變,可能通過讀取TCNTOn寄存器得知TCNTn的值
        (4)TCON寄存器:使用參考S3C2440手冊(cè)
        在第一次使用定時(shí)器時(shí),要設(shè)置“手動(dòng)更新”位為1以使TCNTBn/TCMPBn的值裝入內(nèi)部寄存器TCNTn、TCMPn中,下一次如果還要設(shè)置這一位,需要先將其清0
        3 WATCHDOG定時(shí)器
        (1)PLCK→2個(gè)8位預(yù)分頻器(輸出16分頻,32分頻,64分頻,128分頻或者外部時(shí)鐘TCLK0/TCLK1)
        初始計(jì)數(shù)值寫入 WTCNT→while(WTCNT==0)自動(dòng)重新裝載WTCNT=WTDAT,并可以產(chǎn)生中斷信號(hào),可以輸出復(fù)位信號(hào)
        (2)WATDOG定時(shí)器工作頻率=PCLK/(WTCON[15:8]+1)/幾分頻
        大部分功能都在WTCON中設(shè)定
        (3)在啟動(dòng)WATDOG定時(shí)器前,必須往這個(gè)寄存器定入初始計(jì)數(shù)值
        4:MPLL和定時(shí)器操作實(shí)驗(yàn):完整代碼:timer.tar.gz timernoMPLL.tar.gz(使用系統(tǒng)默認(rèn)的時(shí)鐘)
        (1) 設(shè)置/啟動(dòng)MPLL
        #define S3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00))
        #define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))

        void clock_init(void)
        {
        // LOCKTIME = 0x00ffffff; // 使用默認(rèn)值即可
        CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1


        __asm__(
        "mrc p15, 0, r1, c1, c0, 0"
        "orr r1, r1, #0xc0000000"
        "mcr p15, 0, r1, c1, c0, 0"
        );


        if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))
        {
        MPLLCON = S3C2410_MPLL_200MHZ;
        }
        else
        {
        MPLLCON = S3C2440_MPLL_200MHZ;
        }
        }
        (2) 設(shè)置存儲(chǔ)控制器
        void memsetup(void)
        {
        volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;



        p[0] = 0x22011110; //BWSCON
        p[1] = 0x00000700; //BANKCON0
        p[2] = 0x00000700; //BANKCON1
        p[3] = 0x00000700; //BANKCON2
        p[4] = 0x00000700; //BANKCON3
        p[5] = 0x00000700; //BANKCON4
        p[6] = 0x00000700; //BANKCON5
        p[7] = 0x00018005; //BANKCON6
        p[8] = 0x00018005; //BANKCON7


        p[9] = 0x008C04F4;

        void timer0_init(void)
        {
        TCFG0 = 99; // 預(yù)分頻器0 = 99
        TCFG1 = 0x03; // 選擇16分頻
        TCNTB0 = 31250; // 0.5秒鐘觸發(fā)一次中斷
        TCON |= (1<<1); // 手動(dòng)更新
        TCON = 0x09; // 自動(dòng)加載,清“手動(dòng)更新”位,啟動(dòng)定時(shí)器0
        }

        (4)定時(shí)器中斷使能

        void init_irq(void)
        {
        // 定時(shí)器0中斷使能
        INTMSK &= (~(1<<10));

        }



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 城口县| 洪泽县| 临沭县| 托克逊县| 武清区| 郁南县| 禹州市| 望江县| 舟曲县| 沽源县| 萝北县| 修武县| 杨浦区| 贵港市| 文山县| 天祝| 霍林郭勒市| 武安市| 循化| 望江县| 嵊州市| 尤溪县| 宁化县| 陵川县| 泾川县| 澄城县| 巴青县| 夏津县| 石城县| 康保县| 墨竹工卡县| 龙陵县| 兴国县| 靖边县| 卢湾区| 望城县| 盐池县| 六安市| 新化县| 阿克苏市| 平潭县|