해보기는 했어?

오늘 안됐다고 포기하지 말고 용기내서 내일 다시 해 보자.

MEGAWIN

MG82F6D Series CLK ILRCO P60OC

롬돌이 2022. 11. 11. 11:58
반응형

MG82F6D Series CLK ILRCO P60OC

1. 프로그램 개요

P22Green 0 LED, P24 Red LED, P26Green 1 LED가 연결되어 있다.

내부 클럭인 ILRCO의 동작을 확인해 본다. 클럭을 설정하고 P60으로 (MCK/4)의 주파수로 확인해 본다.

ILRCO가 32kHz이므로 P60에는 8kHz 구형파가 출력해야한다.

IHRCOILRCO 두 가지를 확인해 본다. IHRCO12MHz, ILRCO32kHz이다.

 

 

 

2. 회로도

/* LED 부분 회로도 추가 */

 

3. Code

main routine

void main()

{

InitSystem();                                              // 시스템 초기화, Clock 초기화 부분을 확인해야함

       

LED_G_0=0;LED_G_1=0;LED_R=0;                      // LED를 모두 ON 시키고

DelayXms(1000);                                          // 1초 딜레이

LED_G_0=1;LED_G_1=1;LED_R=1;                      // LED를 모두 OFF 시킨다.

                                                 

while(1)

{

LED_G_0=0;                                  // LED를 순차적으로 ON/OFF 시킨다.

DelayXms(200);

LED_G_0=1;

LED_G_1=0;

DelayXms(200);

LED_G_1=1;

LED_R=0;

DelayXms(200);

LED_R=1;

}

}

 

⑵ 시스템 초기화 루틴

/***********************************************************************************

*Function:   void InitSystem(void)

*Description:           Initialize MCU

*Input:  

*Output:    

*************************************************************************************/

void InitSystem(void)

{

          

           InitClock_ILRCO();                 // ILRCO 클럭 설정

           InitPort();                             // Port 초기화

 

}

 

ILRCO 설정

/***********************************************************************************

*Function:   void InitClock_ILRCO(void)

*Description:           Initialize clock for ILRCO

*Input:  

*Output:    

*************************************************************************************/

void InitClock_ILRCO(void)

{

           // P60 Output MCK/4

           CLK_P60OC_MCKDiv4();

           // IHRCO Enable, MCK=OSCin, OSCin=ILRCO

           CLK_SetCKCON2(ENABLE_IHRCO|MCK_OSCin|OSCIn_ILRCO);

           nop();

           // IHRCO Disable, MCK=OSCin, OSCin=ILRCO

           CLK_SetCKCON2(DISABLE_IHRCO|MCK_OSCin|OSCIn_ILRCO);

 

}

 

- P60으로 MCK4분주 된 신호가 나올 수 있도록 한다.

#define CLK_P60OC_MCKDiv4()           AUXR0=AUXR0|((P60OC0|P60OC1))

AUXR06, 7번 비트가 P60OC0, P60OC1 비트이고, 두 비트 모두 셋 설정 시 MCK/4의 주파수 파형이 P6.0에 출력된다.

 

- IHRCO Enable, MCK = OSCin, OSCin = ILRCO로 설정

#define CLK_SetCKCON2(x)
ISPCR=0x80;
IFADRH=0x0;
IFADRL=CKCON2_P;
IFMT=ISP_WRITE_P;
IFD=x;
SCMD=0x46;
SCMD=0xB9;
_nop_();
IFMT=0;
ISPCR=0x0
 
ISPCR0x80을 저장하여 ISP/IAP/Page-P 동작을 활성화시킨다.
접근할 어드레스에 CKCON2_P의 어드레스를 저장한다.
 
ISP 동작은 Page P에 쓰기동작임을 선언한다.
선택된 Page P 어드레스에 입력 받은 데이터를 저장한다.
SCMD 레시스터에 0x46, 0xB9를 순차적으로 입력하면 동작이 종료된다.
 
 
 
ISPCR0x00을 저장하여 ISP/IAP/Page-P 동작을 비활성화시킨다.

클럭 제어용 레지스터들 중 CKCON2SFR Page P에 접근해야 제어가 된다. 위의 매크로는 그 방법을 설정해 둔 것이다.

 

클럭 설정 시 IHRCO Enable 시켰다가 Disable 시켜야한다. 만약 IHRCOEnable 시키지 않게 되면 IC가 동작하지 않는다.

이 때에는 프로그램을 OCD ICE에 다운로드 한 뒤 리셋 버튼을 누른 상태에서 IC에 프로그램을 다운로드 시켜야한다.

 

 

 

 

 

4. 프로그램 실행

*** Keil compiler가 인스톨되어 있어야함 ***

해당 Example 폴더를 찾아가 KeilPrj폴더를 Open 한다.

\Megawin 8051\(EN)MG82F6D16_SampleCode_v1.20\ MG82F6D16_CLK_ILRCO_P60OC\KeilPrj

해당 폴더의 Keil project 파일을 더블클릭하여 실행시킨다.(MG82F6D16_DEMO.uvproj)

Rebuild 아이콘을 클릭하여 프로젝트를 컴파일 한다.

Demo BoardUSB Connector를 연결하여 전원을 인가하고, 전원 스위치를 ON시키고, OCD ICE를 연결한 상태에서 위 이미지의 Start/Stop Debug Session(Ctrl+F5) 버튼을 눌러 컴파일된 프로젝트의 디버그 데이터를 다운로드 시킨다.(컴파일 시 에러가 발생하지 않아야함)

 

다운로드 후 Run(F5) 버튼을 클릭하면 프로그램이 동작한다.

5. 동작 영상

https://www.youtube.com/shorts/vUkxFuRD5-w

 

 

 

 

반응형

'MEGAWIN' 카테고리의 다른 글

MG82F6D Series WDT Int.  (0) 2022.11.17
MG82F6D Series GPIO P44P45P47  (0) 2022.11.14
MG82F6D Series CLK xtal  (0) 2022.11.10
MG82F6D Series GPIO P6  (0) 2022.11.09
MG82F6D Series ADC with Interrupt - 4  (0) 2022.11.08