[NXP]/LPC1k2016. 8. 29. 15:16

LPC1113 / LPC1114 UART 인터럽트 테스트

LPC1113 / LPC1114 UART 인터럽트 테스트



LPC1114 UART 인터럽트 초기화 함수

void U0_SetInt(void)

{

    NVIC_EnableIRQ(UART_IRQn);


    LPC_UART->IER = IER_RBR | IER_RLS; /* Enable UART interrupt */

}




LPC1114 인터럽트 핸들러 함수


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//-----------------------------------------------------------------------------
#pragma diag_suppress=Pa082
void UART_IRQHandler(void)
{
    uint8_t IIRValue, LSRValue;
    unsigned char temp;
    
    IIRValue = LPC_UART->IIR;
 
    IIRValue >>= 1;            /* skip pending bit in IIR */
    IIRValue &= 0x07;            /* check bit 1~3, interrupt identification */
    
    if (IIRValue == IIR_RLS)        /* Receive Line Status */
    {
 
    }
    else if (IIRValue == IIR_RDA)    /* Receive Data Available */
    {
        temp = LPC_UART->RBR;
        U0_PutByte(temp);
    }
    else if (IIRValue == IIR_CTI)    /* Character timeout indicator */
    {
 
    }
    else if (IIRValue == IIR_THRE)    /* THRE, transmit holding register empty */
    {
 
    }
}
#pragma diag_default=Pa082
//-----------------------------------------------------------------------------
cs





Posted by nexp

댓글을 달아 주세요

[NXP]/LPC1k2013. 10. 4. 12:11

LPC1113 내부클럭 사용하기

LPC1113 내부클럭 사용하기

LPC1K의 클럭은 외부 X-TAL 및 내부 RC OSC로 구동 가능하다. 

정밀 클럭이 필요없는 시스템에서 저렴하게 보드 구성할때 사용하면 좋을것 같다.


내부 클럭으로 설정하고 UART통신 잘되는것을 확인했다.



LPC1K 클럭 시스템 블록도

SYSPLLCLKSEL 레지스터를 이용하여 내부클럭 외부 클럭을 설정할 수 있다. MAINCLKSEL 레지스터에서 PLL 설정 여부를 선택할수 있다.












config.h 파일에서 클럭을 설정할수 있도록 수정했다.

#define SEL_IRC                         0
#define SEL_XTAL                        1
#define SYSPLLCLKSEL_Val                SEL_IRC 



system.c 파일도 수정이 좀 필요하다.

void SystemInit(void)

{

_SystemInit();


SetMainClockFreq(48);

              :



Posted by nexp

댓글을 달아 주세요

[NXP]/LPC1k2013. 8. 20. 23:00

LPC1114 외부 인터럽트 테스트 예제

LPC1114 외부 인터럽트 테스트 예제

외부 인터럽트 소스 테스트 하려는데 잘 동작을 안한다.

다른 인터럽트는 다 잘 동작하는데... 외부 인터럽트만 이상하다.


확인결과 IAR에서 제공하는 startup code가 두가지인데 코드가 약간 다르다. 이부분에서 문제가 있었던것 같다. 제공 예제에 설정되어 있는 startup code는 안되고 CMSIS 폴더의 startup code를 적용하니 잘 동작한다.

..IAR Systems\Embedded Workbench 6.4 Kickstart\arm\examples\NXP\LPC11xx\CMSIS\Device\NXP\LPC11xx\Source\IAR



startup_LPC11xx.s




LPC1113 GPIO관련 레지스터







레벨, 에지 인터럽트 유형 설정 






폴링 라이징 에지 유형 설정 레지스터






단일 에지, 복수(상승 하강) 에지 설정 레지스터






LPC1113 외부 인터럽트 핸들러

void PIOINT0_IRQHandler(void)

{

uint32_t regVal;

Led2Toggle();


regVal = GPIOIntStatus(0, 1);

if( regVal )

{

GPIOIntClear( 0, 1 );


//Led1Off();

}

return;

}




LPC1113 외부 인터럽트 테스트 

LPC1K EVM 보드의 P0.1 에 연결되어 있는 스위치를 누르면 인터럽트 발생해서 LED깜박이는 예제를 테스트 해 보았다.


int main()

{

    SystemInit();


    Led1Init();

    Led1Off();

    

    Led2Init();

    Led2Off();


    //SysTick 설정    

    //SysTick_Config( SYSTICK_DELAY );


//외부 인터럽트 초기화

    NVIC_EnableIRQ(EINT0_IRQn);

GPIOSetInterrupt(0, 1, 0, 0, 0);

GPIOIntEnable(0, 1);

    while(1)

    {


    

    }

    return 0;

}


Posted by nexp

댓글을 달아 주세요

[NXP]/LPC1k2011. 10. 25. 22:30

[LPC1K-SM EVM] VS1033 을이용한 MP3 출력 테스트

[LPC1K-SM EVM] VS1033 을이용한 MP3 출력 테스트


VS1033 MP3 디코드모률을 이용하면 LPC1100과 같은 저가형 MCU에서 쉽게 MP3출력이 가능하다. [EXP-DSP EVM] 보드는 VS1033모듈을 쉽게 연결하여 테스트 할 수 있다.

VS1033 모듈 핀맵
SPI를 위한 3개핀과 아래 제어핀 4개가 필요하다.



LPC1111을 사용할 때는 아래 두 핀은 점퍼로 할당이 필요하다.
DREQ     -> P_A3(P1.11)
MP3_CS -> P_A4(P0.10)







Posted by nexp

댓글을 달아 주세요

[NXP]/LPC1k2011. 10. 24. 23:51

[LPC1K EVM] LPC1100 TFT LCD테스트 (LCD_IF_P Board)

[LPC1K EVM] LPC1100 TFT LCD테스트 (LCD_IF_P Board)


소형에 저렴한 (현재 쇼핑몰에서 1000원대에 판매하고 있다. 링크) MCU에도 불구 하고 기능이 좋아 여러곳에 사용기 좋은것 같다. SD Card의 이미지 파일을 TFT LCD에 출력하는 테스트를 해 보았다.





[LPC1113 EVM] TFT-LCD 테스트 동영상

보드 특성상 Data가 0~7의 순서로 되어 있지 않아 추가적인 비트 조작이 필요 하고  SPI클럭이 최대 12Mhz이기 때문에 속도는 조금 느려 보이는데 가격대비 성능비로는 아주 만족할만하다.




LPC1100에서 일부 핀들은 디폴트가 JTAG으로 할당되어 있기 때문에 GPIO로 설정할 필요가 있다.

    LPC_IOCON->JTAG_TDO_PIO1_1  &= ~0x07;
    LPC_IOCON->JTAG_TDO_PIO1_1  |= 0x01;

    LPC_IOCON->JTAG_TMS_PIO1_0  &= ~0x07;
    LPC_IOCON->JTAG_TMS_PIO1_0  |= 0x01;

    LPC_IOCON->JTAG_nTRST_PIO1_2  &= ~0x07;
    LPC_IOCON->JTAG_nTRST_PIO1_2  |= 0x01;
   
    LPC_IOCON->ARM_SWDIO_PIO1_3  &= ~0x07;
    LPC_IOCON->ARM_SWDIO_PIO1_3  |= 0x01;
   
    LPC_IOCON->PIO0_7  &= ~0x07;
    LPC_IOCON->PIO0_3  &= ~0x07;
    LPC_IOCON->PIO3_2  &= ~0x07; 




TFT LCD제어 드라이버 코드

//-----------------------------------------------------------------------------
//TFT LCD
#define TFT_DRV_HD66791                 0
#define TFT_DRV_COM44                   1

#define LCD_LAT_BIT      BIT5
#define LCD_LAT_PORT     PORT3
#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT3
#define LCD_EN_PORT      PORT0
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      //BIT8
#define LCD_RST_PORT     //PORTB
#define LCD_RST_ON()     //Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     //Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT7
#define LCD_RS_PORT      PORT0
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT2
#define LCD_WR_PORT      PORT3
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      //BIT5
#define LCD_RD_PORT      //LATD
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      PORT3
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    DataOut((Data>>8));\
                                     LCD_DATA_LATCH();\
                                     DataOut(Data&0xFF);

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

Posted by nexp

댓글을 달아 주세요