MG82F6D Series CLK ILRCO P60OC
1. 프로그램 개요
P22는 Green 0 LED, P24는 Red LED, P26은 Green 1 LED가 연결되어 있다.
내부 클럭인 ILRCO의 동작을 확인해 본다. 클럭을 설정하고 P60으로 (MCK/4)의 주파수로 확인해 본다.
ILRCO가 32kHz이므로 P60에는 8kHz 구형파가 출력해야한다.
IHRCO와 ILRCO 두 가지를 확인해 본다. IHRCO는 12MHz, ILRCO는 32kHz이다.
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으로 MCK의 4분주 된 신호가 나올 수 있도록 한다.
#define CLK_P60OC_MCKDiv4() AUXR0=AUXR0|((P60OC0|P60OC1))
AUXR0의 6, 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 |
ISPCR에 0x80을 저장하여 ISP/IAP/Page-P 동작을 활성화시킨다. 접근할 어드레스에 CKCON2_P의 어드레스를 저장한다. ISP 동작은 Page P에 쓰기동작임을 선언한다. 선택된 Page P 어드레스에 입력 받은 데이터를 저장한다. SCMD 레시스터에 0x46, 0xB9를 순차적으로 입력하면 동작이 종료된다. ISPCR에 0x00을 저장하여 ISP/IAP/Page-P 동작을 비활성화시킨다. |
클럭 제어용 레지스터들 중 CKCON2는 SFR Page P에 접근해야 제어가 된다. 위의 매크로는 그 방법을 설정해 둔 것이다.
클럭 설정 시 IHRCO를 Enable 시켰다가 Disable 시켜야한다. 만약 IHRCO를 Enable 시키지 않게 되면 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 Board에 USB 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 |