해보기는 했어?

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

MEGAWIN

MG82F6D Series TIM_T2_Mode2_Capture

롬돌이 2022. 11. 22. 16:47
반응형

 

1. 프로그램 개요

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

타이머 2의 모드 2는 캡쳐모드이다. EXEN2 비트를 셋(1) 시키게 되면 Timer 2는 그대로 동작하고, T2EXI(타이머 2 외부 인터럽트 입력 핀)의 입력이 1(High)에서 0(Low)으로 변경될 때 Timer 2의 레지스터 값을 RCAP2H, RCAP2L에 저장한다. 이 때 T2EXIT2CON레지스터의 EXF2 비트를 셋 시키고, Timer 2 Overflow와 같은 인터럽트 벡터를 사용하는 인터럽트가 발생한다.

 

두 신호 사이의 시간차를 구할 때 이 기능을 많이 사용한다.

 

T2EXI 핀인 P11에 버튼을 연결하고, 버튼이 눌릴 때 마다 T2 레지스터의 값을 버퍼에 저장한다. 저장된 숫자가 일정 개수가 되면 그 값을 시리얼로 전송한다.

 

 

 

2. 회로도

                         

 

3. Code

main routine

 

void main()

{

           u8 i;

InitSystem();                                      // 시스템 초기화

           SendStr("\nHello!");                             // 시리얼로 프로그램 시작을 알리는 Hello 전송

          LED_G_0=0;LED_G_1=0;LED_R=0;              // LED ALL ON

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

          LED_G_0=1;LED_G_1=1;LED_R=1;              // LED ALL OFF

           INT_EnAll();                                       // Enable global interrupt flag

 

          

    while(1)

    {

          DelayXms(100);                                   // 100ms delay

          LED_R=!LED_R;                                   // LED_R Toggle

          if(bT2Capture)                                    // bT2Capture가 셋 되었으면

          {

                     SendStr("\nT2 Caputre:");           // 시리얼로

                     for(i=0;i<CAPTURE_BUF_SIZE;i++)  // 캡쳐 버퍼 개수까지 아래의 루틴 반복

                     {

                                SendByte('0');                // 0xhhhh

                                SendByte('x');

                                SendHex(wT2CaptureData[i].B.BHigh);

                                SendHex(wT2CaptureData[i].B.BLow);

                                SendByte(' ');                // space 전송

                     }

                     T2CaptureCnt=0;                      // T2CaptureCnt 클리어

                     bT2Capture=0;                         // bT2Capture 클리어

          }

    }

}

 

⑵ 시스템 초기화 루틴

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

*Function:   void InitSystem(void)

*Description:           Initialize MCU

*Input:  

*Output:    

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

void InitSystem(void)

{

           InitPort();

           InitClock();

           InitUart0_T1();

           InitTimer2();                         

 

           InitInterrupt();                                                                            // Initialize Interrupt

}

- 포트 설정을 수행한다.

- 클럭을 설정한다.

- 시리얼포트를 초기화한다.

- 타이머 2를 초기화 시킨다.

- 인터럽트를 초기화한다.

 

 

 

Port 초기화

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

*Function:   void InitPort(void)

*Description:  Initialize IO Port

*Input:  

*Output:    

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

void InitPort(void)

{

           PORT_SetP2PushPull(BIT2|BIT4|BIT6);                                        // Set P22,P24,P26 as Push-Pull,For LED.

è P22, P24, P26 LED용으로 사용한다.

 

           PORT_SetP1OpenDrainPu(BIT1);                                                 // set P11 as open-drain with pull-high for T2EX

è P11Pull-Up을 가지고 있는 OpenDrain타입으로 설정하여 T2EX 신호 입력으로 사용할 수 있도록 한다.

}

*** 사용된 매크로함수는 “API_Macro_MG82FG6D16.H”에서 찾아볼 수 있다.

\Megawin 8051\(EN)MG82F6D16_SampleCode_v1.20\MG82F6D16_GPIO_TIM_T2_Mode2_Capture\code\include

 

 

⑷ 클럭 초기화 루틴 è 시스템 클럭 및 내부 클럭을 설정한다.

프로그램의 루틴 자체는 복잡하게 많이 설정해 두었으나 그 구조는 아래와 같다.

MCU_SYSCLK의 값은 11059200, 12000000, 22118400, 24000000, 29491200, 32000000, 44236800, 48000000로 설정이 가능하며, 각각 프로그램 상단에

#define        MCU_SYSCLK          12000000

와 같이 선언해주었다. 그리고, 바로

#define        MCU_CPUCLK          (MCU_SYSCLK)

로 선언하여 System 클럭과 CPU 클럭을 동일하게 사용하기로 선언하였다. 물론 사용자의 선택에 따라 틀려질 수 있으므로 어플리케이션에 따라 선언하면 된다.

#if (MCU_SYSCLK==12000000)                        // System Clock12MHz로 선언되어 있으면

#if (MCU_CPUCLK==MCU_SYSCLK)                    // CPU ClockSystem Clock와 동일하면

         // SysClk=12MHz CpuClk=12MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1);         // 이와 같이 설정하고

        

#else

         // SysClk=12MHz CpuClk=6MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1);         // CPU clockSystem Clock와 같거나 1/2로 설정할

// 수 있다.

#endif

#endif

- CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1);

CKCON0 레지스터의 각 비트를 설정한다.

CKCON0.7 : AFS, Alternated Frequency Selection, 내부 클럭 IHRCO12MHz(AFS = 0), 또는 11.059MHz(AFS = 1)로 설정함

CKCON0.3 : CCKS, CPU Clock Select, 0:CPU CLOCK = System Clock, 1:CPU CLOCK = System Clock/2

CKCON0.0 ~ 2 : Programable System Clock Select. SYSCLK_MCKDO_DIV_1(System Clock = Master Clock Divider Output)

 

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

*Function:   void InitClock(void)

*Description: 

*                                  Initialize clock

*Input:  

*Output:    

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

void InitClock(void)

{

#if (MCU_SYSCLK==11059200)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // SysClk=11.0592MHz CpuClk=11.0592MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1);

        

#else

         // SysClk=11.0592MHz CpuClk=5.5296MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1);

#endif

#endif

 

#if (MCU_SYSCLK==12000000)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // SysClk=12MHz CpuClk=12MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1);

        

#else

         // SysClk=12MHz CpuClk=6MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1);

#endif

#endif

 

#if (MCU_SYSCLK==22118400)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // SysClk=22.1184MHz CpuClk=22.1184MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx4, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X4|OSCIn_IHRCO);

#else

         // SysClk=22.1184MHz CpuClk=11.0592MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx4, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X4|OSCIn_IHRCO);

#endif

#endif

 

#if (MCU_SYSCLK==24000000)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // SysClk=24MHz CpuClk=24MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx4, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X4|OSCIn_IHRCO);

#else

         // SysClk=24MHz CpuClk=12MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx4, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X4|OSCIn_IHRCO);

#endif

#endif

 

#if (MCU_SYSCLK==29491200)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // Cpuclk high speed

         CLK_SetCpuCLK_HighSpeed();

         // SysClk=29.491200MHz CpuClk=29.491200MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx5.33, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X533|OSCIn_IHRCO);

#else

         // SysClk=29.491200MHz CpuClk=14.7456MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx5.33, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X533|OSCIn_IHRCO);

#endif

#endif

 

#if (MCU_SYSCLK==32000000)

#if (MCU_CPUCLK==MCU_SYSCLK)

         // Cpuclk high speed

         CLK_SetCpuCLK_HighSpeed();

         // SysClk=32MHz CpuClk=32MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx5.33, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X533|OSCIn_IHRCO);

#else

         // SysClk=32MHz CpuClk=16MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx5.33, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X533|OSCIn_IHRCO);

#endif

#endif

 

#if (MCU_SYSCLK==44236800)

         // SysClk=44.2368MHz CpuClk=22.1184MHz

         CLK_SetCKCON0(IHRCO_110592MHz|CPUCLK_SYSCLK_DIV_1|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx8, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X8|OSCIn_IHRCO);

#endif

 

#if (MCU_SYSCLK==48000000)

         // SysClk=48MHz CpuClk=24MHz

         CLK_SetCKCON0(IHRCO_12MHz|CPUCLK_SYSCLK_DIV_2|SYSCLK_MCKDO_DIV_1|ENABLE_CKM|CKM_OSCIN_DIV_2);

         DelayXus(100);

         // IHRCO, MCK=CKMIx8, OSCin=IHRCO

         CLK_SetCKCON2(ENABLE_IHRCO|MCK_CKMI_X8|OSCIn_IHRCO);

#endif

 

         // P60 Output MCK/4

         //CLK_P60OC_MCKDiv4();

}

 

UART0초기화 èTimer 1 Overflow를 이용한 Baud Rate 설정

 

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

*Function:   void InitUart0_T1(void)

*Description:          Initialize Uart0, The source of baud rate was T1

*Input:  

*Output:    

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

void InitUart0_T1(void)

{

         UART0_SetMode8bitUARTVar();                       // UART0 Mode: 8-bit, Variable B.R.

         UART0_EnReception();                                            // Enable reception

         UART0_SetBRGFromT1();                                // B.R. source:T1

         UART0_SetT1BaudRateX2();                            // B.R. x2

 

         TM_SetT1Mode_2_8BIT_AUTORELOAD();

         TM_SetT1Clock_SYSCLK();

         TM_SetT1Gate_Disable();

 

    // Sets B.R. value

         TM_SetT1HighByte(T1_BRGRL_9600_2X_12000000_1T);

         TM_SetT1LowByte(T1_BRGRL_9600_2X_12000000_1T);

 

         TM_EnableT1();

}

 

- UART0 MODE 설정

#define UART0_SetMode8bitUARTVar()                       S0CFG=S0CFG&(~SM30);SM00_FE=0;SM10=1

S0CFG 레지스터의 SM30bit, S0CON 레지스터의 SM00/FE, SM10 비트의 조합으로 여러가지 시리얼 포트 동작 모드를 설정할 수 있다. 그 중 본 예제는 8-bit UART, Variable Baud Rate 특성인 MODE 1을 사용한다.

 

- UART0 Receive Enable

#define UART0_EnReception()                                           REN0=1

UART0이 시리얼 통신으로 데이터를 받아들일 수 있도록 설정한다. S0CON 레지스터의 REN0를 셋(=1) 시킨다.

- UART0 Baud RateTimer 1을 이용해서 만든다.

#define UART0_SetBRGFromT1()                                        SFRPI=1;T2MOD1=T2MOD1&(~TL2IS);SFRPI=0;RCLK_TF2L=0;TCLK_TL2IE=0

SFR PAGE 1에 위치한 T2MOD1 레지스터의 TL2IS 플래그를 클리어 시켜 T2CON5, 4번 비트가 RCLK, TCLK 제어 비트로 동작 할 수 있도록 한다.

RCLK 비트를 0으로 만들어 Timer 1 Overflow UART0의 수신 Clock으로 사용될 수 있도록 설정한다.

TCLK 비트를 0으로 만들어 Timer 1OverflowUART0의 송신 Clock으로 사용될 수 있도록 설정한다.

 

- Double Baud Rate 설정

#define UART0_SetT1BaudRateX2()                            PCON0=PCON0|(SMOD1);S0CFG=S0CFG&(~SMOD2)

PCON0 레지스터의 SMOD1 플래그를 셋 시켜 UART0 MODE 1, 2, 3Double Baud RateEnable 시킨다.

S0CFG 레지스터의 SMOD2 플래그를 클리어 시켜 USRT0 Extra Double Baud Rate Disable 시킨다.

 

- Timer 1을 모드 2 8-bit Auto Reload 모드로 설정.

#define TM_SetT1Mode_2_8BIT_AUTORELOAD()            TMOD=(TMOD&(~(T1M0|T1M1)))|(T1M1)

타이머 1을 모드 2로 설정한다.(T1M0 = 0, T1M1 = 1) 8-bit 타이머로 자동 재적재 기능(Automatic Reload)으로 동작한다.

 

- Timer 1의 클럭 설정

#define TM_SetT1Clock_SYSCLK()                                       AUXR2=(AUXR2|(T1X12));TMOD=(TMOD&(~T1C_T))

AUXR2 레지스터의 T1X12를 셋, TMOD 레지스터의 T1C/TClear 시킴으로써 Timer 1Clock Source SYSCLK로 설정한다.

- Gate Disable(타이머클럭선택, 타이머 트리거 방법 선택)

#define TM_SetT1Gate_Disable()                                        TMOD=TMOD&(~T1GATE)

TMOD레지스터의 T1GATE 비트는 TIMER 1의 클럭 소스를 결정하는 곳과 TIMER 1의 트리거 방법을 설정하는 곳에 사용된다. T1GATE Clear 시킴으로써 TIMER 1 클럭 소스를 System Clock or (System Clock/12) 중 하나로 선택할 수 있고, 클럭이 타이머에 입력되는 것(트리거시그널)을 제어하는 것을 TR1비트로 설정할 수도 있다.

 

- 타이머 1의 상/하위 레지스터의 값을 저장

TM_SetT1HighByte(T1_BRGRL_9600_2X_12000000_1T);

TM_SetT1LowByte(T1_BRGRL_9600_2X_12000000_1T);

타이머 1 UP Counter로 동작하고 0xFF에서 0x00으로 바뀔 때 Overflow 이벤트가 발생한다.

자동 재적재 기능을 갖는 Mode 2 8-bit timer로 설정하였기 때문에 실제 동작하는 카운터는 TL1레지스터이고, TH1은 재적재할 카운터 값을 저장한다. TL1레지스터의 값이 0xFF에서 0x00으로 변하면서 Overflow 이벤트가 발생하면 TH1에 저장되어 있는 데이터가 자동으로 TL1에 재적재 된다.

12MHz 클럭을 사용하고, T1X12=1, SMOD2=0, SMOD1 = 1으로 설정하였으므로 재적재 될 값은 178(0xB2)이다.(데이터시트상의 표 참조)

 

- 타이머 1 Enable(시작)

TM_EnableT1();

마지막으로 TR1 비트를 셋 시켜 타이머 1을 동작 시킨다.

 

è (EN)MG82F6D16_Datasheet_V051.PDF17. Serial Port 0(UART0)를 참조한다.

è (EN)MG82F6D17_Datasheet_V051.PDF18. Serial Port 0(UART0)를 참조한다.

è (EN)MG82F6D64/32_Datasheet_V051.PDF18. Serial Port 0(UART0)를 참조한다.

 

 

 

 

 

 

 

 

 

Timer 2 설정

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

*Function:   void InitTimer2(void)

*Description:   Initialize Timer2

*Input:  

*Output:    

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

void InitTimer2(void)

{

           TM_SetT2Mode_Capture();                                                                    // T2 mode: capture

           TM_SetT2Clock_SYSCLKDiv12();                                                 // T2 clock source: SYSCLK/12

 

           TM_SetT2LowByte(0);                                                                          // T2 low byte

           TM_SetT2HighByte(0);                                                                // T2 high byte

           TM_SetT2RLHighByte(0);                                                                       // T2 reload high byte

           TM_SetT2RLLowByte(0);                                                                       // T2 reload low byte

 

 

           TM_SetT2Capture_T2EXPin();                                                      // T2 EXI: T2EX pin

           TM_SetT2CKOT2EX_P10P11();                                                               // T2EX pin: P11

           TM_EnableT2EX_DetectFalling();                                                 // T2EX detect: Falling

 

           TM_EnableT2();                                                                                              // Enable T2

}

 

- Timer 2 Capture 모드로 설정

#define TM_SetT2Mode_Capture()                                   CP_RL2=1;T2MOD=T2MOD&(~T2MS0)

T2SPL, T2MS1, CP/RL2, T2MS0 비트들을 이용해서 Timer 2의 모드를 설정한다.

각 비트들은 모두 default 0이고, Mode 2 Capture모드 설정은 CP_RL2만 셋(1)이되면 된다.

 

- Timer 2용 클럭 설정

#define TM_SetT2Clock_SYSCLKDiv12()                 C_T2=0;T2MOD=T2MOD&(~T2X12);SFRPI=1;T2MOD1=T2MOD1&(~T2CKS);SFRPI=0

T2CKS, T2X12, C/T2 비트를 이용해서 Timer 2의 클럭을 설정한다. 본 예제에서는 SYSCLK/12Timer 2의 클럭으로 설정한다.

SYSCLK12MHz이므로 Timer2의 클럭은 1MHz이다. 그러므로 Timer 21us마다 카운트 된다.

 

- TL2, TH2, RCAP2H, RCAP2L에 초기값 0을 저장한다.

 

- T2EX Pin을 설정한다.

#define TM_SetT2Capture_T2EXPin()                     SFRPI=1;T2MOD1=T2MOD1&(0xF8);SFRPI=0

SFR Page 1에 있는 T2MODE1 레지스터의 CP2S2 ~0을 모두 0(clear)으로 저장하여 타이머 2의 캡쳐 소스를 T2EX 핀으로 선택한다.

 

- T2EX 핀 할당

#define TM_SetT2CKOT2EX_P10P11()                    SFRPI=1;AUXR4=AUXR4&(~(T2PS1|T2PS0));SFRPI=0

SFR Page 1에만 존재하는 AUXR4 레지스터의 T2PS1, T2PS0 비트를 00으로 만들어 T2/T2CKO P1.0, T2EX P11에 할당한다.

 

- T2EX의 하강에지(Falling edge)에서 동작할 수 있도록 선언 함

#define TM_EnableT2EX_DetectFalling()                                                 EXEN2=1

 

- Timer 2 동작

#define TM_EnableT2()                              TR2=1

TR2를 셋(1)시켜 타이머 2를 동작 시킨다.

 

 

 

 

 

⑺ 인터럽트 초기화

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

*Function:   void InitInterrupt(void)

*Description:   Initialize Interrupt

*Input:  

*Output:    

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

void InitInterrupt(void)

{

           INT_EnTIMER2();

}

- 타이머 2 인터럽트 설정

#define INT_EnTIMER2()                  ET2=1

IE(인터럽트 활성화 레지스터)의 비트 3ET2를 셋(1) 시켜서 타이머 2 인터럽트를 활성화시킨다.

 

⑻ 타이머 2 인터럽트 루틴

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

*Function:   void INT_T2(void)

*Description:   T2  Interrupt handler

*Input:  

*Output:    

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

void INT_T2(void) interrupt INT_VECTOR_T2

{

           if(TF2)                                            // 타이머 2 인터럽트가 발생하면

           {

                     LED_G_0=!LED_G_0;              // LED_G_0을 토글 시키고

                     TF2=0;                                 // 타이머 2 인터럽트 플래그를 클리어 시켜 다음 인터럽트를 대기한다.

           }

 

           if(EXF2)                                         // T2EX핀의 입력이 High에서 Low로 변경되어 EXF2 인터럽트 플래그가 셋이면

           {

                     EXF2=0;                               // EXF2 플래그를 클리어 시키고    

                     if(bT2Capture==0)                 // bT2Capture 비트가 0이면

                     {

                                wT2CaptureData[T2CaptureCnt].B.BLow=RCAP2L; // 캡쳐된 RCAP2L의 데이터를 버퍼에 저장한다.

                                wT2CaptureData[T2CaptureCnt].B.BHigh=RCAP2H; // 캡쳐된 RCAP2H의 데이터를 버퍼에 저장한다.

                                T2CaptureCnt++;                                                             // T2CaptureCnt 변수를 1 증가시킨다.

                                if(T2CaptureCnt>=CAPTURE_BUF_SIZE)                      // 캡쳐된 데이터 수가 버퍼사이즈 이상이면

                                {

                                          bT2Capture=TRUE;                                               // bT2Capture 비트를 True로 변경한다.

                                }

                     }

           }

}

 

4. 프로그램 실행

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

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

\Megawin 8051\(EN)MG82F6D16_SampleCode_v1.20\ MG82F6D16_TIM_T2_Mode2_Capture

 

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

 

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

 

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

 

 

 

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

5. 동작 영상

반응형

'MEGAWIN' 카테고리의 다른 글

MG82F6D Series CMP  (0) 2022.11.24
MG82F6D Series TIM_T0T1_Mode 0  (0) 2022.11.23
MG82F6D Series WDT Reset  (0) 2022.11.17
MG82F6D Series WDT Int.  (0) 2022.11.17
MG82F6D Series GPIO P44P45P47  (0) 2022.11.14