???????????????????????????????????????
??????
N76E003????3??????????????: ???????/?????????????????????????????????????N76E003???????????????????????????????????????P3.0/XIN ??
???????
N76E003?????????RC?????????????16MHz??HIRC???????????10 kHz??LIRC????????????????????????????????HIRCEN (CKEN.5)λ???HIRC???豸????LIRC???????????????OSC[1:0] (CKSWT[2:1])?[0,0]???HIRC?????????????OSC[1:0](CKSWT [1:0])?[1,0]???LIRC????????????
N76E003????HIRC ?? LIRC?????????????????HIRC???????????????????????????????XIN ?????????I/O P3.0????????????I/O?????????????????P3M1??P3M2??????????P3.0?????????
23.2 ??????л?
N76E003???????????????CKSWT ?? CKEN??????л??????????????????????????Щ??????????д?Ч?????????TA???????????
?????????????????????????????????????????????????????????????л???
??????л??????????????????л????????????????????????????????ò????????????????л???
???????????????CKEN????????????????????????CKSWT??????ж??????λ????????????????????????дOSC[1:0] (CKSWT[2:1])?л????????????
??Щ???????????????л?????????????????????????????????????????????????????????裬??????????????Щ??????????ЩΥ????????
1.????????????CKEN?????????????????豸????????????????????????????CKEN?????
2.????????????OSC[1:0]??????л????????????л???????δ?????OSC[1:0]?????????????????????????????CKSWTF (CLKEN.0)???????λ??
3.???????л?????????????????????????????????????????????????????л??????????????豸???????????????????????CKSWTF????1???????????????????λ(?? CKSWT[7:3])????λ???????????л???CKSWTF??????????0??
???????
?????(FOSC)??????ó???????CKDIV?????????????1/510??????????????????????(FSYS)??????????????????MCU??????????????????????????????????????MCU?????????????????????????У?????估????????ж??????????????????????ж??????????????п??????????????硣??????????????????????????????????????????????CKDIV??????????κ????????????????????ж???????????
????????
N76E003?????CLO(P1.1)???????????????????????FSYS ???????????????CLOEN (CKCON.1)λ???????????????????CLO????????????????????????????и?????????ǹ???????????????ù??CLO?????
???????????????CKEN???????????????? ????????CKSWT??????ж??????λ????????????????????????дOSC[1:0] (CKSWT[2:1])?л????????????
#include "N76E003.h" #include "SFR_Macro.h" #include "Function_define.h" #include "Common.h" #include "Delay.h" //======================================================================== // The test process: // 1. Power on is run as default HIRC, show LED Fsys tickle faster // 2. toggle P3.0 to GND. // 2. call modify Fsys code to LIRC. // 3. LED tickle speed slowly than before. //======================================================================== void main(void) { /* Note MCU power on system clock is HIRC (16 MHz) Please keep P3.0 HIGH before you want to modify Fsys to LIRC */ Set_All_GPIO_Quasi_Mode; // In Common.h define set_CLOEN; // Also can check P1.1 CLO pin for clock to find the Fsys change. set_P30; while (P30) // when P3.0 keep high, clock out HIRC { clr_GPIO1; // Check LED output tickle time Timer0_Delay1ms(200); set_GPIO1; Timer0_Delay1ms(200); } ////------------------------------------------------------------------------------------------------------ ///*********************************** Change system closk source ***************************************/ ////------------------------------------------------------------------------------------------------------ ////***** HIRC enable part ***** // set_HIRCEN; //step1: enable HIRC clock source run // while((CKSWT&SET_BIT5)==0); //step2: check ready // clr_OSC1; //step3: switching system clock source if needed // clr_OSC0; // while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG // ////***** LIRC enable part***** ////** Since LIRC is always enable, switch to LIRC directly set_OSC1; //step3: switching system clock source if needed clr_OSC0; while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG clr_HIRCEN; ////-------------------------------------------------------------------------------------------------------- /* Now Fsys = LIRC , LED tickle slowly. */ while(1) { clr_GPIO1; // Check LED output tickle time clr_P00; set_GPIO1; set_P00; } /* =================== */ }
#define set_CLOEN CKCON |= SET_BIT1
set_CLOEN;
#define set_P30 P30 = 1 #define clr_P30 P30 = 0
////***** HIRC enable part ***** // set_HIRCEN; //step1: enable HIRC clock source run // while((CKSWT&SET_BIT5)==0); //step2: check ready // clr_OSC1; //step3: switching system clock source if needed // clr_OSC0; // while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG // ////***** LIRC enable part***** ////** Since LIRC is always enable, switch to LIRC directly set_OSC1; //step3: switching system clock source if needed clr_OSC0; while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG clr_HIRCEN;
set_HIRCEN;
???????????????CKEN??????????????
#define set_HIRCEN BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKEN|=SET_BIT5;EA=BIT_TMP;
while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG
?????????????
???????дOSC[1:0] (CKSWT[2:1])?л??????????
set_OSC1; //step3: switching system clock source if needed
clr_OSC0;
#define set_HIRCST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT|=SET_BIT5;EA=BIT_TMP; #define set_LIRCST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT|=SET_BIT4;EA=BIT_TMP; #define set_ECLKST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT|=SET_BIT3;EA=BIT_TMP; #define set_OSC1 BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT|=SET_BIT2;EA=BIT_TMP; #define set_OSC0 BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT|=SET_BIT1;EA=BIT_TMP; #define clr_HIRCST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT&=~SET_BIT5;EA=BIT_TMP; #define clr_LIRCST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT&=~SET_BIT4;EA=BIT_TMP; #define clr_ECLKST BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT&=~SET_BIT3;EA=BIT_TMP; #define clr_OSC1 BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT&=~SET_BIT2;EA=BIT_TMP; #define clr_OSC0 BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CKSWT&=~SET_BIT1;EA=BIT_TMP;
while((CKEN&SET_BIT0)==1); //step4: check system clock switching OK or NG ?ж???????
972369124