本文簡(jiǎn)介
本文主要詳細(xì)敘述了 S32K144 的時(shí)鐘模塊相關(guān)內(nèi)容辜腺。本文代碼包含以下內(nèi)容:
- 一般的時(shí)鐘初始化流程
- LPIT 通道計(jì)數(shù)器設(shè)置
時(shí)鐘結(jié)構(gòu)圖
在看代碼之前,首先要熟悉時(shí)鐘系統(tǒng)趁舀,下圖為本程序所用到的時(shí)鐘和模塊示意圖凯旭。
可以看到外部晶振輸入 XTAL(External Crystal Oscillator) 和震蕩器 OSC(System Oscillator) 相連坯墨,產(chǎn)生了一個(gè)時(shí)鐘信號(hào)為 SOSC_CLK 該信號(hào)被 SCG_SOSCDIV 分頻成為兩個(gè) SOSC_DIV1_CLK 和 SOSC_DIV2_CLK 時(shí)鐘信號(hào)。SOSC_CLK 又被鎖相環(huán) PLL 升頻到 SPLL_CLK 信號(hào)权逗,SPLL_CLK 被 SCG_SPLLDIV 分頻得到 SPLL_DIV1_CLK 或者得到 SPLL_DIV2_CLK美尸。
FIRC(Fast Internal Reference Clock) 產(chǎn)生一個(gè) 48HMz 的時(shí)鐘 FIRC_CLK, SIRC(Slow Internal Reference Clock) 產(chǎn)生一個(gè) 8MHz 的信號(hào) SIRC_SLK, FIRC_CLK 和 SIRC_SLK 和 SPLL_CLK 和 SOSC_CLK 被 SCG_RCCR[SCS] 選擇器選擇信號(hào)冤议,使用 DIVCORE 分頻得到 CORE_CLK,SYSCLK ;使用 DIVBUS 分頻得到 BUS_CLK 师坎,使用 DIVSLOW 分頻得到 FLASH_CLK 和 SCG_SLOW_CLK 在這個(gè)地方恕酸,分頻器的倍率選擇是有要求的:
主要是由于結(jié)構(gòu)限制導(dǎo)致的。注意在設(shè)置分頻器的時(shí)候胯陋,請(qǐng)?jiān)跁r(shí)鐘源開(kāi)啟前進(jìn)行蕊温,否則無(wú)法改變,分頻器在時(shí)鐘開(kāi)啟后才會(huì)被改變其值遏乔。
Manual上關(guān)于該芯片的時(shí)鐘模塊描述:
1. 系統(tǒng)時(shí)鐘發(fā)生器 System clock generator (SCG)
系統(tǒng)時(shí)鐘發(fā)生器(下稱(chēng) SCG )給單片機(jī)提供了不同的時(shí)鐘源义矛,包含三個(gè)時(shí)鐘分支:
-
SPLL(System Phase-locked Loop) 系統(tǒng)鎖相環(huán),一個(gè)壓控震蕩器盟萨。在其他地方也被稱(chēng)作 PLL
- 電壓控制振蕩器 VCO(Voltage-controlled oscillator)
- 外部參考時(shí)鐘是鎖相環(huán)的時(shí)鐘源
- 模數(shù) VCO 分頻器
- 相位/頻率探測(cè)器
- 可以被選做單片機(jī)的系統(tǒng)時(shí)鐘源
- 雙路可編程控制的時(shí)鐘輸出凉翻,可以提供給片內(nèi)外圍器件時(shí)鐘源
-
FIRC/SIRC(Fast/Slow Internal Reference Clock) 兩個(gè)內(nèi)部參考時(shí)鐘 IRC 發(fā)生器:
- 快速內(nèi)部參考時(shí)鐘 FIRC 可以程序控制高/低頻率范圍, 高為 48Mhz。
- 快速內(nèi)部參考時(shí)鐘 FIRC 和慢速內(nèi)部參考時(shí)鐘 SIRC 都可以被選做單片機(jī)的系統(tǒng)時(shí)鐘源
-
SOSC(System Crystal Oscillator) 系統(tǒng)晶振振蕩器鸯旁,在其他地方也被稱(chēng)作 OSC
- 被當(dāng)做系統(tǒng) PLL 的時(shí)鐘源
- 可以被當(dāng)做單片機(jī)的時(shí)鐘源
注意:
- SPLL噪矛,SOSC 時(shí)鐘可以被時(shí)鐘監(jiān)測(cè)器檢測(cè)量蕊,提供重啟和中斷請(qǐng)求铺罢。
- SPLL 可以被鎖定監(jiān)測(cè)器檢測(cè),提供中斷請(qǐng)求残炮。
- 每一個(gè)時(shí)鐘源都有一個(gè)參考分頻器韭赘,給片內(nèi)模塊和外圍器件提供分頻功能,故時(shí)鐘名中都有 DIV 势就,譬如:
- SPLLDIV1_CLK / SPLLDIV2_CLK
- FIRCDIV1_CLK / SCG_FIRCDIV2_CLK
- SIRCDIV1_CLK / SIRCDIV2_CLK
- SOSCDIV1_CLK / SOSCDIV2_CLK
2. 低功率振蕩器 Low Power Oscillator (LPO)
一個(gè)內(nèi)部的低功率時(shí)鐘泉瞻,可以給工作在低功率模式下的器件提供時(shí)鐘源。
3. 外圍時(shí)鐘控制器 Peripheral Clock Control (PCC)
在上一節(jié)詳細(xì)介紹過(guò)這個(gè)控制器苞冯,用于控制大多數(shù)器件的時(shí)鐘選擇袖牙。
代碼
* hello_clocks.c Copyright NXP 2016
* Description: Example clock and LPIT channel initializations
* 2016 Mar 04 S Mihalik - Initial version
* 2016 Oct 27 SM - Updated for new header files in S32DS v 1.3
#include "S32K144.h" /* include peripheral declarations S32K144 */
#include "clocks_and_modes.h"
int lpit0_ch0_flag_counter = 0; /* LPIT0 timeout counter */
void PORT_init (void) {
PCC-> PCCn[PCC_PORTD_INDEX] = PCC_PCCn_CGC_MASK; /* Enable clock for PORT D */
PTD->PDDR |= 1<<0; /* Port D0: Data Direction= output */
PORTD->PCR[0] = 0x00000100; /* Port D0: MUX = ALT1, GPIO (to blue LED on EVB) */
}
void LPIT0_init (void) {
PCC->PCCn[PCC_LPIT_INDEX] = PCC_PCCn_PCS(6); /* Clock Src = 6 (SPLL2_DIV2_CLK)*/
PCC->PCCn[PCC_LPIT_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable clk to LPIT0 regs */
LPIT0->MCR = 0x00000001; /* DBG_EN-0: Timer chans stop in Debug mode */
/* DOZE_EN=0: Timer chans are stopped in DOZE mode */
/* SW_RST=0: SW reset does not reset timer chans, regs */
/* M_CEN=1: enable module clk (allows writing other LPIT0 regs) */
LPIT0->TMR[0].TVAL = 40000000; /* Chan 0 Timeout period: 40M clocks */
LPIT0->TMR[0].TCTRL = 0x00000001; /* T_EN=1: Timer channel is enabled */
/* CHAIN=0: channel chaining is disabled */
/* MODE=0: 32 periodic counter mode */
/* TSOT=0: Timer decrements immediately based on restart */
/* TSOI=0: Timer does not stop after timeout */
/* TROT=0 Timer will not reload on trigger */
/* TRG_SRC=0: External trigger soruce */
/* TRG_SEL=0: Timer chan 0 trigger source is selected*/
}
void SOSC_init_8MHz(void) {
SCG->SOSCDIV=0x00000101; /* SOSCDIV1 & SOSCDIV2 =1: divide by 1 */
SCG->SOSCCFG=0x00000024; /* Range=2: Medium freq (SOSC betw 1MHz-8MHz)*/
/* HGO=0: Config xtal osc for low power */
/* EREFS=1: Input is external XTAL */
while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); /* Ensure SOSCCSR unlocked */
SCG->SOSCCSR=0x00000001; /* LK=0: SOSCCSR can be written */
/* SOSCCMRE=0: OSC CLK monitor IRQ if enabled */
/* SOSCCM=0: OSC CLK monitor disabled */
/* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled */
/* SOSCLPEN=0: Sys OSC disabled in VLP modes */
/* SOSCSTEN=0: Sys OSC disabled in Stop modes */
/* SOSCEN=1: Enable oscillator */
while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* Wait for sys OSC clk valid */
}
void SPLL_init_160MHz(void) {
while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
SCG->SPLLCSR = 0x00000000; /* SPLLEN=0: SPLL is disabled (default) */
SCG->SPLLDIV = 0x00000302; /* SPLLDIV1 divide by 2; SPLLDIV2 divide by 4 */
SCG->SPLLCFG = 0x00180000; /* PREDIV=0: Divide SOSC_CLK by 0+1=1 */
/* MULT=24: Multiply sys pll by 4+24=40 */
/* SPLL_CLK = 8MHz / 1 * 40 / 2 = 160 MHz */
while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
SCG->SPLLCSR = 0x00000001; /* LK=0: SPLLCSR can be written */
/* SPLLCMRE=0: SPLL CLK monitor IRQ if enabled */
/* SPLLCM=0: SPLL CLK monitor disabled */
/* SPLLSTEN=0: SPLL disabled in Stop modes */
/* SPLLEN=1: Enable SPLL */
while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); /* Wait for SPLL valid */
}
void NormalRUNmode_80MHz (void) { /* Change to normal RUN mode with 8MHz SOSC, 80 MHz PLL*/
SCG->RCCR=SCG_RCCR_SCS(6) /* PLL as clock source*/
|SCG_RCCR_DIVCORE(0b01) /* DIVCORE=1, div. by 2: Core clock = 160/2 MHz = 80 MHz*/
|SCG_RCCR_DIVBUS(0b01) /* DIVBUS=1, div. by 2: bus clock = 40 MHz*/
|SCG_RCCR_DIVSLOW(0b10); /* DIVSLOW=2, div. by 2: SCG slow, flash clock= 26 2/3 MHz*/
while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {}
/* Wait for sys clk src = SPLL */
}
void WDOG_disable (void){
WDOG->CNT=0xD928C520; /*Unlock watchdog*/
WDOG->TOVAL=0x0000FFFF; /*Maximum timeout value*/
WDOG->CS = 0x00002100; /*Disable watchdog*/
}
int main(void) {
WDOG_disable();
PORT_init(); /* Configure ports */
SOSC_init_8MHz(); /* Initialize system oscilator for 8 MHz xtal */
SPLL_init_160MHz(); /* Initialize SPLL to 160 MHz with 8 MHz SOSC */
NormalRUNmode_80MHz(); /* Init clocks: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */
LPIT0_init(); /* Initialize PIT0 for 1 second timeout */
for (;;) { /* Toggle output to LED every LPIT0 timeout */
while (0 == (LPIT0->MSR & LPIT_MSR_TIF0_MASK)) {} /* Wait for LPIT0 CH0 Flag */
lpit0_ch0_flag_counter++; /* Increment LPIT0 timeout counter */
PTD->PTOR |= 1<<0; /* Toggle output on port D0 (blue LED) */
LPIT0->MSR |= LPIT_MSR_TIF0_MASK; /* Clear LPIT0 timer flag 0 */
}
}
代碼詳解
老樣子,還是從 main()
內(nèi)開(kāi)始:
PORT_init(); /* Configure ports */
這一行用于初始化端口舅锄,函數(shù)內(nèi)部打開(kāi) CGC鞭达,配置 GPIO ,設(shè)置 PCR MUX 和被動(dòng)濾波。由于第一節(jié)已經(jīng)有了詳細(xì)介紹皇忿,在這里不做過(guò)多描述畴蹭。
SOSC_init_8MHz(); /* Initialize system oscilator for 8 MHz xtal */
SPLL_init_160MHz(); /* Initialize SPLL to 160 MHz with 8 MHz SOSC */
NormalRUNmode_80MHz(); /* Init clocks: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */
這三個(gè)放在一起,因?yàn)樗麄兌加玫搅艘粋€(gè)指針來(lái)進(jìn)行修改鳍烁,這個(gè)指針就是 SCG
, 在頭文件中 SCG
有以下的含義:
/** SCG - Register Layout Typedef */
typedef struct {
__I uint32_t VERID; /**< Version ID Register, offset: 0x0 */
__I uint32_t PARAM; /**< Parameter Register, offset: 0x4 */
uint8_t RESERVED_0[8];
__I uint32_t CSR; /**< Clock Status Register, offset: 0x10 */
__IO uint32_t RCCR; /**< Run Clock Control Register, offset: 0x14 */
__IO uint32_t VCCR; /**< VLPR Clock Control Register, offset: 0x18 */
__IO uint32_t HCCR; /**< HSRUN Clock Control Register, offset: 0x1C */
__IO uint32_t CLKOUTCNFG; /**< SCG CLKOUT Configuration Register, offset: 0x20 */
uint8_t RESERVED_1[220];
__IO uint32_t SOSCCSR; /**< System OSC Control Status Register, offset: 0x100 */
__IO uint32_t SOSCDIV; /**< System OSC Divide Register, offset: 0x104 */
__IO uint32_t SOSCCFG; /**< System Oscillator Configuration Register, offset: 0x108 */
uint8_t RESERVED_2[244];
__IO uint32_t SIRCCSR; /**< Slow IRC Control Status Register, offset: 0x200 */
__IO uint32_t SIRCDIV; /**< Slow IRC Divide Register, offset: 0x204 */
__IO uint32_t SIRCCFG; /**< Slow IRC Configuration Register, offset: 0x208 */
uint8_t RESERVED_3[244];
__IO uint32_t FIRCCSR; /**< Fast IRC Control Status Register, offset: 0x300 */
__IO uint32_t FIRCDIV; /**< Fast IRC Divide Register, offset: 0x304 */
__IO uint32_t FIRCCFG; /**< Fast IRC Configuration Register, offset: 0x308 */
uint8_t RESERVED_4[756];
__IO uint32_t SPLLCSR; /**< System PLL Control Status Register, offset: 0x600 */
__IO uint32_t SPLLDIV; /**< System PLL Divide Register, offset: 0x604 */
__IO uint32_t SPLLCFG; /**< System PLL Configuration Register, offset: 0x608 */
} SCG_Type, *SCG_MemMapPtr;
/** Peripheral SCG base address */
#define SCG_BASE (0x40064000u)
/** Peripheral SCG base pointer */
#define SCG ((SCG_Type *)SCG_BASE)
這是一個(gè)相當(dāng)龐大的結(jié)構(gòu)叨襟,翻閱 Manual 瞅一瞅各個(gè)小寄存器吧。
Register name | Width (in bits) |
Access |
---|---|---|
Version ID Register (SCG_VERID) | 32 | R |
Parameter Register (SCG_PARAM) | 32 | R |
Clock Status Register (SCG_CSR) | 32 | R |
Run Clock Control Register (SCG_RCCR) | 32 | RW |
VLPR Clock Control Register (SCG_VCCR) | 32 | RW |
HSRUN Clock Control Register (SCG_HCCR) | 32 | RW |
SCG CLKOUT Configuration Register (SCG_CLKOUTCNFG) | 32 | RW |
System OSC Control Status Register (SCG_SOSCCSR) | 32 | RW |
System OSC Divide Register (SCG_SOSCDIV) | 32 | RW |
System Oscillator Configuration Register (SCG_SOSCCFG) | 32 | RW |
Slow IRC Control Status Register (SCG_SIRCCSR) | 32 | RW |
Slow IRC Divide Register (SCG_SIRCDIV) | 32 | RW |
Slow IRC Configuration Register (SCG_SIRCCFG) | 32 | RW |
Fast IRC Control Status Register (SCG_FIRCCSR) | 32 | RW |
Fast IRC Divide Register (SCG_FIRCDIV) | 32 | RW |
Fast IRC Configuration Register (SCG_FIRCCFG) | 32 | RW |
System PLL Control Status Register (SCG_SPLLCSR) | 32 | RW |
System PLL Divide Register (SCG_SPLLDIV) | 32 | RW |
System PLL Configuration Register (SCG_SPLLCFG) | 32 | RW |
Version ID Register (SCG_VERID)
Field | Name | Description |
---|---|---|
VERSION | SCG Version Number | SCG 的版本號(hào) |
Parameter Register (SCG_PARAM)
- 寫(xiě)入會(huì)導(dǎo)致錯(cuò)誤幔荒。
字面意思是參數(shù)寄存器糊闽,其中 32 位的定義如下:
Field | Name | Description |
---|---|---|
31-27 | DIVPRES |
指示現(xiàn)在的 SCG 分頻器使用狀態(tài)DIVPRES[27]=1 DIVSLOW 正在被使用DIVPRES[28]=1 DIVBUS 正在被使用DIVPRES[31]=1 DIVCORE 正在被使用 |
7-0 | CLKPRES |
指示當(dāng)前狀態(tài)下哪個(gè)時(shí)鐘正在被當(dāng)做 SCG 時(shí)鐘源 CLKPRES[0] Reserved CLKPRES[1]=1 System OSC (SOSC) 正在被使用 CLKPRES[2]=1 Slow IRC (SIRC) 正在被使用 CLKPRES[3]=1 Fast IRC (FIRC) 正在被使用 CLKPRES[6]=1 System PLL (SPLL) 正在被使用 |
Clock Status Register (SCG_CSR)
- 寫(xiě)入會(huì)導(dǎo)致錯(cuò)誤梳玫。
這個(gè)寄存器返回當(dāng)前的系統(tǒng)時(shí)鐘源和系統(tǒng)時(shí)鐘分頻器配置,鏡像 SCG_RCCR, SCG_VCCR, SCG_HCCR 三個(gè)時(shí)鐘控制器其中之一的配置右犹。
Field | Name | Description |
---|---|---|
27-24 | SCS |
返回當(dāng)前配置的系統(tǒng)時(shí)鐘發(fā)生器來(lái)源 0001 System OSC (SOSC_CLK) 0010 Slow IRC (SIRC_CLK) 0011 Fast IRC (FIRC_CLK) 0110 System PLL (SPLL_CLK) 其余的值無(wú)效 |
19-16 | DIVCORE |
指示現(xiàn)在的核心時(shí)鐘分頻比率 * 若 SPLL 被選做時(shí)鐘源汽纠,則最大比率是 4 分頻比率 = DIVCORE+1
|
7-4 | DIVBUS |
返回現(xiàn)在的總線(xiàn)(BUS)時(shí)鐘分頻比率 分頻比率 = DIVBUS+1
|
3-0 | DIVSLOW |
返回現(xiàn)在的慢速時(shí)鐘分頻比率 分頻比率 = DIVSLOW+1
|
Run Clock Control Register (SCG_RCCR)
這個(gè)寄存器給核心,平臺(tái)傀履,外圍虱朵,總線(xiàn)控制系統(tǒng)時(shí)鐘源和系統(tǒng)時(shí)鐘分頻器,只在 Run 模式下起作用钓账,這個(gè)寄存器寫(xiě)入的時(shí)候只能一次寫(xiě)入 32 位碴犬。在 Run 模式下選擇一個(gè)不同的時(shí)鐘源需要時(shí)鐘源在系統(tǒng)時(shí)鐘調(diào)整到時(shí)鐘源前就要開(kāi)啟并且保證有效。如果系統(tǒng)時(shí)鐘分頻器比率改變的同時(shí)選擇了一個(gè)不同的時(shí)鐘模式梆暮,則新的分頻器比率只有在新的時(shí)鐘源有效后才會(huì)發(fā)生改變服协。
寄存器見(jiàn) SCG_CSR
。
VLPR Clock Control Register (SCG_VCCR)
SCG_VCCR 控制的是 VLPR 模式下的啦粹,而不是 Run 模式下的偿荷,其他的寄存器地圖什么的和 SCG_RCCR 一樣。寫(xiě)入的時(shí)候只能一次寫(xiě)入 32 位唠椭。
寄存器見(jiàn) SCG_CSR
跳纳。
HSRUN Clock Control Register (SCG_HCCR)
在 HSRUN 模式下的時(shí)鐘控制寄存器,同上贪嫂。
寄存器見(jiàn) SCG_CSR
寺庄。
SCG CLKOUT Configuration Register (SCG_CLKOUTCNFG)
這個(gè)寄存器控制哪一個(gè) SCG 時(shí)鐘源被輸出到 CLKOUT 管腳。
Field | Name | Description |
---|---|---|
27-24 | SCS |
選擇 SCG 系統(tǒng)時(shí)鐘作為 CLKOUT 0001 System OSC (SOSC_CLK) 0010 Slow IRC (SIRC_CLK) 0011 Fast IRC (FIRC_CLK) 0110 System PLL (SPLL_CLK) 其余的值無(wú)效 |
System OSC Control Status Register (SCG_SOSCCSR)
這個(gè)寄存器控制 SCG 模塊中的 SOSC 工作狀態(tài)力崇。
Field | Name | Description |
---|---|---|
26 | SOSCERR |
System OSC Clock Error 此位只能被單片機(jī)的上電復(fù)位重置斗塘,但是軟件也可以通過(guò)向此位寫(xiě)入 1 清零 0 SOSC 檢測(cè)器被關(guān)閉或者沒(méi)有檢測(cè)到錯(cuò)誤 1 SOSC 檢測(cè)器被開(kāi)啟并且檢測(cè)到一個(gè)錯(cuò)誤 |
25 | SOSCSEL |
System OSC Selected 此位不可寫(xiě)入 0 SOSC 不是系統(tǒng)時(shí)鐘源 1 SOSC 是系統(tǒng)時(shí)鐘源 |
24 | SOSCVLD |
System OSC Valid 此位不可寫(xiě)入 0 SOSC 無(wú)效或者沒(méi)有啟用 1 SOSC 有效并且輸出有效 |
23 | LK |
Lock Register 此位可以在任何時(shí)候清零或者置 1 0 CSR 寄存器可以寫(xiě)入 1 CSR 寄存器不可以寫(xiě)入 |
17 | SOSCCMRE |
System OSC Clock Monitor Reset Enable SOSC 監(jiān)測(cè)器中斷/重置開(kāi)關(guān) 0 當(dāng)錯(cuò)誤被檢測(cè),監(jiān)測(cè)器產(chǎn)生中斷 1 當(dāng)錯(cuò)誤被檢測(cè)亮靴,監(jiān)測(cè)器產(chǎn)生重啟 |
16 | SOSCCM |
System OSC Clock Monitor SOSC 監(jiān)測(cè)器開(kāi)關(guān) 0 SOSC 監(jiān)測(cè)器關(guān) 1 SOSC 監(jiān)測(cè)器開(kāi) |
0 | SOSCEN |
System OSC Enable SOSC 使能 0 SOSC 關(guān) 1 SOSC 開(kāi) |
System OSC Divide Register (SCG_SOSCDIV)
這個(gè)寄存器控制兩個(gè)時(shí)鐘輸出馍盟,既可以用作外圍器件的功能時(shí)鐘,也可以作為時(shí)鐘模塊使用茧吊,每一路輸出都有分頻器提供分頻贞岭,應(yīng)該在 SOSC 被關(guān)閉的情況下更改該寄存器的值以避免輸出的值出現(xiàn)錯(cuò)誤。
Field | Name | Description |
---|---|---|
10-8 | SOSCDIV2 |
System OSC Clock Divide 2 設(shè)置 SOSC 第二路輸出的分頻比率 分頻比率 = 2^(SOSCDIV2-1) 0 時(shí)關(guān)閉時(shí)鐘輸出 |
2-1 | SOSCDIV1 |
System OSC Clock Divide 1 設(shè)置 SOSC 第一路輸出的分頻比率 分頻比率 = 2^(SOSCDIV1-1) 0 時(shí)關(guān)閉時(shí)鐘輸出 |
System Oscillator Configuration Register (SCG_SOSCCFG)
此寄存器控制振蕩器的工作狀態(tài)饱狂,在 SOSC 運(yùn)行的時(shí)候無(wú)法被寫(xiě)入曹步,強(qiáng)行寫(xiě)入會(huì)被忽略并不會(huì)報(bào)賦值錯(cuò)誤。
Field | Name | Description |
---|---|---|
5-4 | RANGE |
System OSC Range Select 選擇 SOSC 外接晶振的頻率范圍 10 中頻 (4 MHz to 8MHz) 11 高頻 (8 MHz to 40 MHz) |
3 | HGO |
High Gain Oscillator Select 高增益振蕩器選擇 0 低增益運(yùn)行振蕩器 1 高增益運(yùn)行振蕩器 |
2 | EREFS |
External Reference Select 外部參考時(shí)鐘選擇 0 外部參考時(shí)鐘 1 SOSC 內(nèi)部晶體振蕩器 |
Slow IRC Control Status Register (SCG_SIRCCSR)
Field | Name | Description |
---|---|---|
25 | SIRCSEL |
Slow IRC Selected 選擇 SIRC 是否作為系統(tǒng)時(shí)鐘源 0 Slow IRC 是系統(tǒng)時(shí)鐘源 1 Slow IRC 不是系統(tǒng)時(shí)鐘源 |
24 | SIRCVLD |
Slow IRC Valid Slow IRC 有效位 0 Slow IRC 無(wú)效或者沒(méi)有啟動(dòng) 1 Slow IRC 啟動(dòng)并且有效 |
2 | SIRCLPEN |
Slow IRC Low Power Enable Slow IRC 低功率模式開(kāi)關(guān) 0 Slow IRC 在 VLP 模式不啟動(dòng)下 1 Slow IRC 在 VLP 模式下啟動(dòng) |
1 | SIRCSTEN |
Slow IRC Stop Enable Slow IRC 停止模式開(kāi)關(guān) 0 Slow IRC 在 Stop modes 下不工作 1 Slow IRC 在 Stop modes 下工作 |
0 | SIRCEN |
Slow IRC Enable Slow IRC 使能 0 Slow IRC 關(guān)閉 1 Slow IRC 開(kāi)啟 |
Slow IRC Divide Register (SCG_SIRCDIV)
該寄存器控制 SIRC 的分頻器工作狀態(tài)休讳,請(qǐng)確保該寄存器在改變前讲婚,SIRC 是關(guān)閉著的,以防止出現(xiàn)錯(cuò)誤俊柔。
Field | Name | Description |
---|---|---|
10-8 | SIRCDIV2 |
Slow IRC Clock Divide 2 提供給需要異步時(shí)鐘的模塊的分頻器 2 分頻比率 = 2^(SIRCDIV2-1) 0 時(shí)關(guān)閉時(shí)鐘輸出 |
2-0 | SIRCDIV1 |
Slow IRC Clock Divide 1 提供給需要異步時(shí)鐘的模塊的分頻器 1 分頻比率 = 2^(SIRCDIV1-1) 0 時(shí)關(guān)閉時(shí)鐘輸出 |
Slow IRC Configuration Register (SCG_SIRCCFG)
此寄存器控制振蕩器的工作狀態(tài)筹麸,在 SIRC 運(yùn)行的時(shí)候無(wú)法被寫(xiě)入活合,強(qiáng)行寫(xiě)入會(huì)被忽略并不會(huì)報(bào)賦值錯(cuò)誤。
Field | Name | Description |
---|---|---|
0 | RANGE |
Frequency Range 頻率范圍 0 Slow IRC low range clock (2 MHz) 1 Slow IRC high range clock (8 MHz) |
剩余的 FIRC 跟這個(gè)差不多物赶,但是有一部分細(xì)微的變化白指,到用的時(shí)候請(qǐng)查詢(xún)對(duì)應(yīng)的用戶(hù)手冊(cè)。