在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > NEC V850 之 系統(tǒng)時鐘及內(nèi)部設(shè)備時鐘

            NEC V850 之 系統(tǒng)時鐘及內(nèi)部設(shè)備時鐘

            作者: 時間:2016-12-03 來源:網(wǎng)絡(luò) 收藏
            首先說明下,之前沒有搞時鐘就開始看I/O口還有外部中斷是不對的。幸好發(fā)現(xiàn)的不晚,現(xiàn)在把這必須的一課給補上。如果連時鐘都搞不明白,下面的外設(shè)是肯定沒法弄的。另外放棄了原來做一個總體程序包的想法,主要是太浪費時間了,完成一個器件的驅(qū)動還要想把他無縫的添加到原來的程序結(jié)構(gòu)里去,現(xiàn)在不是做這個工作的時候,需要快速的把測試完成,然后上系統(tǒng)去調(diào)試。

            下面開始正題,V850的時鐘還是比較饒人的,需要仔細的去讀datasheet,另外我到現(xiàn)在還有無法理解的地方在datasheet上面。下圖是系統(tǒng)時鐘框圖:(紅色的圈里就是不理解的地方,不知道在哪個地方設(shè)置)

            本文引用地址:http://www.biyoush.com/article/201612/325099.htm
            下面我會把代碼和示波器測量的截圖發(fā)出來。先是代碼:

            代碼出處 system.c

            void SystemClkInit( void )
            {
            unsigned char psval = 0;

            VSWC = CG_VSWC_VALUE; // 設(shè)置 內(nèi)部外圍功能控制寄存器 值為17
            /* Set main system clock */
            OSTS = CG_OSCSTAB_SEL16; // 設(shè)置 晶振穩(wěn)定時間選擇寄存器 值為0x06(2^16/fx),為下面檢測OSTC做準備
            psval = CG_CPUCLK_MAINFEEDBACK | CG_CPUCLK_SUBNOTFEED | CG_CPUCLK_MAINENABLE;
            PRCMD = psval;
            PCC = psval; // 設(shè)置 MCU時鐘控制寄存器 值為0x80,禁止子時鐘振蕩器,使能主時鐘振蕩器
            while (!(OSTC || 0x00)) // 檢測 晶振穩(wěn)定時間狀態(tài)寄存器 的最低為是不是為1(晶振震蕩以穩(wěn)定)
            {
            ;
            }
            PLLS = CG_PLLLOCKUP_SEL1; // 設(shè)置 鎖相環(huán)鎖定時間規(guī)格寄存器 值為0x03(2^13/fX (default value)),為下面檢測LOCKR做準備
            PLLON = 1; // 設(shè)置 PLLCTL鎖相環(huán)控制寄存器 最低位為1,使能鎖相環(huán)啟動
            while (LOCKR && 0x01) // 檢測 鎖相環(huán)鎖定狀態(tài)寄存器 的最低為是不是為0(鎖相環(huán)以鎖定)
            {
            ;
            }
            psval = CG_MAINSYS_MAINOSC;
            PRCMD = psval;
            MCM = psval; // 設(shè)置 系統(tǒng)主時鐘方式寄存器 值為0x01(設(shè)定主時鐘源非內(nèi)部高速振蕩源)
            SELPLL = 1; // 設(shè)置 PLLCTL鎖相環(huán)控制寄存器 的次低位為1,與MCM寄存器配合設(shè)置主時鐘通過鎖相環(huán)倍頻
            /* Set fCPU */
            psval = PCC | CG_CPUCLK_MAIN0; // 設(shè)置 系統(tǒng)主時鐘的分頻系數(shù),對內(nèi)部設(shè)備時鐘沒有任何影響,仍然為32MHz
            PRCMD = psval;
            PCC = psval; // 設(shè)置 MCU時鐘控制寄存器 的低4位,設(shè)置分頻系數(shù)
            RCM = CG_RCM_INITIALVALUE | CG_LOWCLK_STOP | CG_HICLK_STOP;//設(shè)置 內(nèi)部振蕩器模式寄存器 值為0x83,關(guān)閉內(nèi)部高速,低速振蕩源
            /* Set fXP1 */
            SELCNT4 = CG_SELCNT4_FXX; // 設(shè)置 選擇控制寄存器4 值為0x00,選擇時鐘源為fxx
            /* Set fBRG */
            PRSM0 = CG_PRESCALER3_DISABLE; // 設(shè)置 預分頻3方式寄存器 值為0x00,禁止分頻
            /* WDT2 setting */
            WDTM2 = 0x1F; // 設(shè)置 看門狗定時器2方式寄存器 值為0x1F,看門狗停止
            }

            代碼出處 main.c

            void main( void )
            {
            SystemClkInit(); // 初始化系統(tǒng)時鐘為32MHz

            /* CLKOUT pin set */
            PMCCM |= 0x02; // 設(shè)置系統(tǒng)時鐘輸出引腳使能,輸出值為系統(tǒng)時鐘(32MHz)

            /* PCL pin set */
            PFC9H &= 0xDF;
            PFCE9H |= 0x20;
            PMC9H |= 0x20; // 設(shè)置P9_13腳為第二功能,時鐘輸出功能
            PCLM = CG_PCL_ENABLE | CG_PCL_SEL0;
            // 設(shè)置時鐘輸出功能使能,并且設(shè)置其分頻系數(shù)(這里是進行4分頻,輸出為8MHz)

            while (1);
            }

            代碼出處 system.h

            /* CPU system clock selection (CK3~0) */
            #define CG_CPUCLK 0x07
            #define CG_CPUCLK_MAIN0 0x00 /* fCPU = fXX */
            #define CG_CPUCLK_MAIN1 0x01 /* fCPU = fXX/2 */
            #define CG_CPUCLK_MAIN2 0x02 /* fCPU = fXX/2^2 */
            #define CG_CPUCLK_MAIN3 0x03 /* fCPU = fXX/2^3 */
            #define CG_CPUCLK_MAIN4 0x04 /* fCPU = fXX/2^4 */
            #define CG_CPUCLK_MAIN5 0x05 /* fCPU = fXX/2^5 */
            #define CG_CPUCLK_SUB 0x08 /* fSC (fXT or fRL) */
            /* PCL clock frequency selection (PCK1~0) */
            #define CG_PCL_SEL0 0x00 /* fPCL= fPLLO/4 */
            #define CG_PCL_SEL1 0x01 /* fPCL= fPLLO/8 */
            #define CG_PCL_SEL2 0x02 /* fPCL= fPLLO/16 */
            #define CG_PCL_SEL3 0x03 /* fPCL= fPLLO/32 */

            上面的代碼設(shè)置系統(tǒng)主時鐘輸出32MHz可以在第一幅圖的CLKOUT端口測量,在70f3630里是引腳"PCM1",可編程輸出時鐘輸出為8MHz在70f3630里是引腳"P9_13"引腳。下面兩幅圖是用示波器測量的結(jié)果作為佐證:
            可以發(fā)現(xiàn)波形比較不好,應該是因為頻率高造成的,在負半軸和超出5v的地方都有了比較大的文波,尤其是32MHz的輸出,也有一部分原因是因為,管腳的反轉(zhuǎn)速率達不到這么高。
            如果我們想修改系統(tǒng)時鐘頻率或者是輸出頻率,可以對照著代碼部分高亮的地方修改,注釋里也有詳細說明。
            下面是修改后的波形圖:
            可以觀察到,在頻率下降后,波形會有不同程度的好轉(zhuǎn)。

            最后補充一點:
            經(jīng)過測試,在V850里的系統(tǒng)始終一旦設(shè)置為一個數(shù)值(比如32MHz),他的內(nèi)部設(shè)備總線時鐘就也同時被設(shè)置為相同的頻率,在每個外設(shè)的設(shè)置里有分配寄存器,但是內(nèi)部設(shè)備總線時鐘是無法變動了。仔細的看第一幅圖就會發(fā)現(xiàn)和圖是不一致的,如果有知道的朋友,希望不吝賜教。



            關(guān)鍵詞: NECV850系統(tǒng)時

            評論


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

            關(guān)閉