<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > NEC V850 之 系統時(shí)鐘及內部設備時(shí)鐘

NEC V850 之 系統時(shí)鐘及內部設備時(shí)鐘

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

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

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

代碼出處 system.c

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

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

代碼出處 main.c

void main( void )
{
SystemClkInit(); // 初始化系統時(shí)鐘為32MHz

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

/* PCL pin set */
PFC9H &= 0xDF;
PFCE9H |= 0x20;
PMC9H |= 0x20; // 設置P9_13腳為第二功能,時(shí)鐘輸出功能
PCLM = CG_PCL_ENABLE | CG_PCL_SEL0;
// 設置時(shí)鐘輸出功能使能,并且設置其分頻系數(這里是進(jìn)行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í)鐘輸出32MHz可以在第一幅圖的CLKOUT端口測量,在70f3630里是引腳"PCM1",可編程輸出時(shí)鐘輸出為8MHz在70f3630里是引腳"P9_13"引腳。下面兩幅圖是用示波器測量的結果作為佐證:
可以發(fā)現波形比較不好,應該是因為頻率高造成的,在負半軸和超出5v的地方都有了比較大的文波,尤其是32MHz的輸出,也有一部分原因是因為,管腳的反轉速率達不到這么高。
如果我們想修改系統時(shí)鐘頻率或者是輸出頻率,可以對照著(zhù)代碼部分高亮的地方修改,注釋里也有詳細說(shuō)明。
下面是修改后的波形圖:
可以觀(guān)察到,在頻率下降后,波形會(huì )有不同程度的好轉。

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



關(guān)鍵詞: NECV850系統時(shí)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>