본문 바로가기

[Microchip]/PIC32MZ

PIC32MZ 개발 환경 설정

PIC32MZ 개발 환경 설정




PIC32MZ 개발을 위해서는  MCU펌웨어 개발 프레임워크인 MPLAB® Harmony 라는 툴이 필요하다.

이거 언제 또 공부하나?


그런데 막상 사용해 보니 상당히 간단하고 편리한것 같다.


우선 프로그램을 다운로드 하고 설치 해보자

MPLAB

http://www.microchip.com/mplab/mplab-ide-home


하모니 페키지

http://www.microchip.com/mplab/mplab-harmony




MPLABX 프로그램 실행하고 새로운 프로젝트롤 생성한다.

하모니 프로젝트를 선택하고 위자드로 클릭 몇번하면 쉽게 새로운 프로젝트 생성이 가능하다.






디바이스 선택

[PIC32MZ EVM] 보드는 PIC32MZ 시리즈 PIC32MZ2048EFM144 이므로 이 장치를 선택한다.





생성이 되면 기본으로 MPLAB Harmony Configurator 가 실행되고 다양한 페리 설정을 간편하게 할수 있다.




PIC32MZ 구동에 기본이 되는 클럭 설정을 해 보면 아래 그림과 같이 클럭 소스나, 속도 및 다양한 설정을 쉽게 설정 할 수 있다.





이렇게 해서 코드를 생성하면 자동으로 아래와 같은 파일들을 생성해 준다.




생성된 파일중 app.c 파일을 수정하면 원하는 기능을 수행 할 수 있다.

초기화 함수

void APP_Initialize ( void )

{

    /* Place the App state machine in its initial state. */

    appData.state = APP_STATE_INIT;


    /* TODO: Initialize your application's state machine and other

     * parameters.

    */

}





그리고 APP_Tasks() 함수에서 사용자 코드를 작성해 주면 된다. RTOS 같은 구조 인데 실제는 RTOS는 아니고 추후 RTOS를 사용 하더라고 동일한 구조를 사용하기 위해 이런 형태의 코드가 생성되는것 같다.

코드의 호환성은 좋아지겠지만 성능 측면은 양보를 해야 할것 같다. 물론 PIC32MZ 속도가 200Mhz로 구동되기 때문에 큰 차이는 없어 보인다.


간단한 예제로 [PIC32MZ EVM] 보드의 LED를 깜박이는 예제를 작성해 보면 아래와 같다.

void APP_Tasks ( void )

{


    /* Check the application's current state. */

    switch ( appData.state )

    {

        /* Application's initial state. */

        case APP_STATE_INIT:

        {

            bool appInitialized = true;

       

            if (appInitialized)

            {

            

                appData.state = APP_STATE_SERVICE_TASKS;

            }

            break;

        }


        case APP_STATE_SERVICE_TASKS:

        {

            //사용자 코드 작성 부분

            PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_H, 10 );

            Delay(100);

            break;

        }


        /* TODO: implement your application state machine.*/

        


        /* The default state should never be executed. */

        default:

        {

            /* TODO: Handle error in application's state machine. */

            break;

        }

    }

}




참고로 MPLAB Harmony Configurator에서 GPIO설정을 해 주면 초기화 코드를 생성해 준다.





MPLAB Harmony Configurator 는 Tools 메뉴에서 실행 할 수 있다. (처음에 이창이 사라져서 찾기 힘들었다.)




sys_ports_static.c 파일을 보면 GPIO관련 초기화된 코드가 생성된것을 확인 할 수 있다.


void SYS_PORTS_Initialize(void)

{

    /* PORT H Initialization */

    PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_ODC);

    PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_H,  SYS_PORT_H_LAT);

    PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_H,  SYS_PORT_H_TRIS ^ 0xFFFF);

    PLIB_PORTS_ChangeNoticePerPortTurnOn(PORTS_ID_0, PORT_CHANNEL_H);

    PLIB_PORTS_ChannelModeSelect(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_ANSEL ^ 0xFFFF, PORTS_PIN_MODE_DIGITAL);

    PLIB_PORTS_ChannelChangeNoticeEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNEN);

    PLIB_PORTS_ChannelChangeNoticePullUpEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNPU);

    PLIB_PORTS_ChannelChangeNoticePullDownEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNPD);






마이크로 칩사의 새로운 IDE툴인 MPLABX와 하모니 툴을 이용하여 PIC32MZ 개발 환경을 테슽 해 보았는데...

결론적으로는 상당히 잘 만들어진 툴 같고 편리한것 같다.

특히 USB나 이더넷, TFT LCD같은 복잡한 페리를 사용하는데 있어서 자동 코드 생성툴이 상당히 편리 한것 같은데 마이크로 칩에서 제공하는 기본 구조를 지켜야 한다는 제약이 어떤 문제가 있을지 좀더 테스트 해 보아야 할것 같다.


쉽고 빠르게 기본 구조를 생성 할 수 있다는 점은 상당히 마음에 든다.





반응형