Cortex-M/EFM322013. 5. 1. 20:00

EFM32G210 EVM - SD Card를 이용한 TFT LCD 전자액자 테스트 (SPI 제어 방식)

EFM32G210 EVM - SD Card를 이용한 TFT LCD 전자액자 테스트 (SPI 제어 방식)



EFM32의 최대 장점은 저전력 동작이면서 Cortex-M3의 성능을 가지고 있는것이다. 저전력이 요구되는 휴대용 전자 액자를 만들어 보면 좋을것 같다.

[I1511 TFT LCD] 모듈을 이용하여 TFT LCD 테스트를 해 보았다.


[Xmega32-EX] 확장 보드에서 SD Card는 1번부터 PB8(SD_CS), MISO, MOSI, SCLK, PF2(LCD_CS)로 연결되어 있다.




SPI방식의 TFT LCD 모듈 핀맵







EFM32 TFT LCD 드라이버 코드

//-----------------------------------------------------------------------------

// SHIFT Driver

#define _SHIFT_GPIO_EN                    0

#define _SHIFT_SPI_EN                      1


#if _SHIFT_SPI_EN

#define _SPI0_ENABLE 1


#define SHIFT_CS_BIT BIT2

#define SHIFT_CS_PORT GPIOF


#define SHIFT_PORT_INIT() GPIO_PinModeSet(gpioPortF, 2, gpioModePushPull, 1);\

SHIFT_CSon();SHIFT_SpiInit();SPI0_SetSpeed(SPI_SPEED_MAX);

#define SHIFT_CSoff() cbi(SHIFT_CS_PORT, SHIFT_CS_BIT)

#define SHIFT_CSon() sbi(SHIFT_CS_PORT, SHIFT_CS_BIT)



#define SHIFT_SpiInit SPI0_Init

#define SHIFT_SpiSendData SPI0_WriteReadByte

#endif

//-----------------------------------------------------------------------------



EFM32 TFT LCD 테스트 동영상

SD Card의 BMP이미지 출력 예제





Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 4. 30. 23:30

EFM32G210 EVM - PWM테스트 (RGB LED 제어)

EFM32G210 EVM - PWM테스트 (RGB LED 제어)





EFM32는 6개의 PWM출력을 할수 있다. PWM을 이용하여  [Xmega32-EX EVM] 확장 테스트 보드에서 RGB LED 조면제어 테스트를 해 보았다.


EFM32 PWM 기능

- Up-count PWM

- Up/down-count PWM

- Predictable initial PWM output state (configured by SW)

- Buffered compare register to ensure glitch-free update of compare values




EFM32 PWM 출력 핀맵

EFM32는 PWM출력을 위한 2개의 타이머가 있고 각각 3채널, 6개의 PWM을 출력할 수 있다.






EFM32G210F128 Timer 블록도




3채널 PWM 출력 테스트를 위해 Xmega32-EX 확장 테스트 보드의 3색 컬러 LED를 이용하였다.




EFM32 PWM테스트 동영상





EFM32 PWM 초기화 코드

void InitPwm0(void)

{   

    //Enable clock for TIMER0 module

    CMU_ClockEnable(cmuClock_TIMER0, true);

   

    //Set CC0 location 4 pin (PA0) as output

    GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 0);    

    // Set CC1 location 4 pin (PA1) as output 

    GPIO_PinModeSet(gpioPortA, 1, gpioModePushPull, 0);

    // Set CC2 location 4 pin (PA2) as output 

    GPIO_PinModeSet(gpioPortA, 2, gpioModePushPull, 1);      

  

    

    // Route CC0 to location 3 (PD1) and enable pin

    TIMER0->ROUTE |= (TIMER_ROUTE_CC0PEN | TIMER_ROUTE_CC1PEN |TIMER_ROUTE_CC2PEN | TIMER_ROUTE_LOCATION_LOC1); 


  

    /* Select CC channel parameters */

    TIMER_InitCC_TypeDef timerCCInit = 

    {

    .eventCtrl  = timerEventEveryEdge,

    .edge       = timerEdgeBoth,

    .prsSel     = timerPRSSELCh0,

    .cufoa      = timerOutputActionNone,

    .cofoa      = timerOutputActionNone,

    .cmoa       = timerOutputActionToggle,

    .mode       = timerCCModePWM,

    .filter     = false,

    .prsInput   = false,

    .coist      = false,

    .outInvert  = false,

    };


    

    /* Configure CC channel 0 */

    TIMER_InitCC(TIMER0, 0, &timerCCInit);

    /* Configure CC channel 1 */

    TIMER_InitCC(TIMER0, 1, &timerCCInit);

    /* Configure CC channel 2 */

    TIMER_InitCC(TIMER0, 2, &timerCCInit);

    

    

    /* Set Top Value */

    TIMER_TopSet(TIMER0, TOP);

    

    TIMER_CompareBufSet(TIMER0, 0, 0x7F);

    TIMER_CompareBufSet(TIMER0, 1, 0x7F);

    TIMER_CompareBufSet(TIMER0, 2, 0x7F);

  

    /* Select timer parameters */  

    

    /* With a clock of 48MHZ, a divider of 512 and a resolution of

     256/8 bit the PWM period frequency is approx  366 hz */

    

    TIMER_Init_TypeDef timerInit =

    {

    .enable     = true,

    .debugRun   = true,

    .prescale   = timerPrescale512,

    .clkSel     = timerClkSelHFPerClk,

    .fallAction = timerInputActionNone,

    .riseAction = timerInputActionNone,

    .mode       = timerModeUp,

    .dmaClrAct  = false,

    .quadModeX4 = false,

    .oneShot    = false,

    .sync       = false,

    };

    

    /* Configure timer */

    TIMER_Init(TIMER0, &timerInit);  

}



EFM32 PWM 테스트 소스코드

int main(void)

{

    char r,g,b;

    unsigned int cnt = 0;


    _SystemInit();


    // Ensure core frequency has been updated 

    SystemCoreClockUpdate();

    // Setup SysTick Timer for 1 msec interrupts  

    if (SysTick_Config(SystemCoreClock / 1000)) while (1) ;



    Led1Init();

    Led1Off();

    

    DebugInit(BAUD_115200);

    DebugPrint("EFM32 PWM Test\r\m");

    

   

    InitPwm0();

    LED_RgbSet(r, g, b);

    

while(1)

{

      if(msTicks>10)

      {

          msTicks = 0;

          g= 255-r;

          b= 128-g;

          

          LED_RgbSet(r, g, b);

          if(r<=1)

          {

              r=255;

              

              

              Delay(200);

          }

          else  r -=1;

      }

  }

}




Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 4. 28. 23:00

[EFM32G EVM] 프로그램 다운로드 - 부트모드에서 UART로 다운로드하기

[EFM32G EVM] 프로그램 다운로드 - 부트모드에서 UART로 다운로드하기

 

 

 EFM32는 출하시에 UART를 통해 펌웨어를 업데이트 할수 있는 부터로더가 Wirte 되있어 특별한 장비 없이 UART를 이용하여 프로그램을 다운로드 할수 있다.

 

주의사항으로 부트로더는 0번지에 저장되어 있으므로 JTAG를 이용하여 0번지에 다운로드 했다면 부트로더가 지워진다. 그리고  X-Modem을 사용하지 않으면 부트로더가 지워질 수 있다.

지워지면 컴파일된 부트로더를 0번지에 다시 다운로드 할 수 있다.

 

bootloader-gecko.bin

 

아쉬운점이 있다면 ST사처럼 다운로드 전용 프로그램이 있으면 좋을것 같다는 생각이 든다.

 


 

기본적으로 USER 모드로 부팅되고 PF0핀이 Low 상태에서 reset 하면 부트모드로 진입한다.

[EFM32G EVM] 보드에서는 SW10을 누르상태에서 리셋하면 된다.

 

 

부트모드 진입여부를 확인하려면 UART를 연결하고 하이퍼 터미널에서 'U'를 입력하면 Chip ID를 출력해 주는것을 확인할 수 있다.

 

 

사용자 프로그램은 0x800 번지에서 시작된다. 컴파일 할 때 0x800번지에 생성되도록 icf파일을 수정해 주어야 한다.

 

EFM32G280F128_BOOT.icf

define symbol __ICFEDIT_intvec_start__ = 0x00000800;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x00000800;
define symbol __ICFEDIT_region_ROM_end__     = (0x00000800+0x00020000-1);
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = (0x20000000+0x00004000-1);

 

 

 

프로그램 다운로드

'u' 를 입력하면 프로그램을 X-Modem 프로토콜으로 다운로드 할수 있다.

 

 

 

 

 

프로그램 다운로드 후 reset 스위치를 누르면 실행되는것을 확인할 수 있다.

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 4. 28. 22:00

[EFM32G EVM] EFM32G210F128 테스트 보드 제작

 [EFM32G EVM] EFM32G210F128 테스트 보드 제작

 

 

EFM32는 Energy Micro사의 저전력 MCU로 Cortx-M3 코어 기반으로 좀더 고성능의 저전력 솔루션으로 사용할 수 있을것 같아 테스트 보드를 제작해 보았다.

 

EFM 시리즈중 GECKO 시리즈는 저렴하고 국내에서 쉽게 구할 수 있다고 해서 쉬베 테스트 할수 있도록 [S-Type  EVM] 형태로 제작했다.

 

 

 

 

 

표준화된 핀맵으로 제작해 여러 확장 테스트 보드에서 쉽게 테스트 가능하다.

 

 

 

 

[EFM32G EVM ] 회로도

 

Posted by nexp

댓글을 달아 주세요