[NXP]/LPC8002014. 3. 16. 23:30

LPC812 EVM - 16bit ADC ADS8320 테스트

LPC812 EVM - 16bit ADC ADS8320 테스트




LPC800 시리즈에는 ADC가 없기 때문에 아쉬운 점이 있어 별도의 소형 16bit ADC (ADS8320) 칩을 실장 할 수 있도록 설계 했다.




LPC812 ADS8320 드리아버 코드

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

//ADS8320 Driver

#define AD8320_CS_INIT() GPIOSetDir( 0, 7, 1 );\

AD8320_CS0_DEASSERT();



#define AD8320_CS0_ASSERT() cbi(PORT0, BIT7)

#define AD8320_CS0_DEASSERT() sbi(PORT0, BIT7)

#define AD8320_CS1_ASSERT() cbi(PORT0, BIT4)

#define AD8320_CS1_DEASSERT() sbi(PORT0, BIT4)


#define AD8320_SPI_READ SPI0_WriteReadByte

#define AD8320_SPI_INIT() SPI0_Init()

#define AD8320_SPI_SPEED() SPI0_SetSpeed(SPI_SPEED_4MHZ)

#define AD8320_SPI_MODE0() SPI0_SetMode(SPI_MODE0)

#define AD8320_SPI_MODE2() SPI0_SetMode(SPI_MODE2)

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




LPC812 ADC테스트 동영상

LPC812 EVM보드에 있는 ADS8320의 16bit ADC값을 전송하여 0~3300mV로 표시하는 테스트




LPC812 ADC테스트 PC 프로그램

ADS8320의 ADC값을 전송하여 0~3.300mV의 전압값으로 출력하는 예제



Posted by nexp

댓글을 달아 주세요

[NXP]/LPC8002014. 3. 9. 22:30

LPC812 EVM - SPI 테스트

LPC812 EVM - SPI 테스트

LPC812는 2개의 SPI를 내장하고 있다. 저가격 소형 칩이라도 기능은 막강하다. 특히 SWITCH MATRIX 방식으로 SPI 핀맵을 원하는 형태로 할당 할 수 있기 때문에 상상히 유연성이 좋은것 같다.

SPI의 최대 클럭 속도는 메인클럭인 30Mhz까지 출력 가능하다. 


LPC812 SPI 블록도





LPC812 EVM 에서 SPI 핀맵할당

LPC812 EVM에서 SPI핀맵은 아래와같이 할당 했고 Switch Matrix Tool을 이용하여 코드 생성을 쉽게 할 수 있다.





LPC812 SPI 초기화 함수

void SPI0_Init(void)

{

    /* Enable SWM clock */

    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);


    /* Pin Assign 8 bit Configuration */

    /* SPI0_SCK */

    LPC_SWM->PINASSIGN3 = 0x07ffffffUL; 

    /* SPI0_MOSI */

    /* SPI0_MISO */

    LPC_SWM->PINASSIGN4 = 0xffff0203UL; 


    

    /* Enable SPI clock */

    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<11);


    /* Bring SPI out of reset */

    LPC_SYSCON->PRESETCTRL &= ~(0x1<<0);

    LPC_SYSCON->PRESETCTRL |= (0x1<<0);


    /* Set clock speed and mode */

    LPC_SPI0->DIV = 15-1;

    LPC_SPI0->DLY = 0;

    LPC_SPI0->CFG = (SPI_CFG_MASTER & ~SPI_CFG_ENABLE);

    LPC_SPI0->CFG |= SPI_CFG_ENABLE;    

}




LPC812 SPI 송수신 함수

unsigned char SPI0_WriteReadByte(unsigned char Data)

{

while ( (LPC_SPI0->STAT & SPI_STAT_TXRDY) == 0 );


    LPC_SPI0->TXDATCTL = SPI_TXDATCTL_FSIZE(8-1) | SPI_TXDATCTL_EOT | Data;

    while ( (LPC_SPI0->STAT & SPI_STAT_RXRDY) == 0 );

    

    return LPC_SPI0->RXDAT;   

}





LPC812 모드 설정







void SPI0_SetMode(int Mode)

{

switch(Mode)

{

case _SPI_MODE0:

            Cbi(LPC_SPI0->CFG, SPI_CFG_CPOL);

            Cbi(LPC_SPI0->CFG, SPI_CFG_CHPA);

break;

            

case _SPI_MODE1:

            Cbi(LPC_SPI0->CFG, SPI_CFG_CPOL);

            Sbi(LPC_SPI0->CFG, SPI_CFG_CHPA);

break;


case _SPI_MODE2:

            Sbi(LPC_SPI0->CFG, SPI_CFG_CPOL);

            Cbi(LPC_SPI0->CFG, SPI_CFG_CHPA);

break;


case _SPI_MODE3:

            Sbi(LPC_SPI0->CFG, SPI_CFG_CPOL);

            Sbi(LPC_SPI0->CFG, SPI_CFG_CHPA);

break;            

}

}




Posted by nexp

댓글을 달아 주세요

[NXP]/LPC8002014. 3. 9. 21:00

LPC812 EVM - UART 테스트

LPC812 EVM -  UART 테스트


LPC812 는 3채널의 UART가 있다. 20핀 소형 페키지 임에도 불구하고 3개의 UART가 있어 유용하게 사용될곳이 많을것 같다.

그리고 스위치 메트릭스라는 기능을 이용하여 UART핀을 자유롭게 맵핑할 수 있는것도 상당히 마음에 든다.


아래 그림은 LPC812의 UART 블록도 이다.



LPC812 UART 핀맵핑 


#if 1

  /* connect the UART0 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN0 = regVal | ( 4 << 0 ); /* P0.4 is UART0 TXD, ASSIGN0(7:0) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN0 = regVal | ( 0 << 8 ); /* P0.0 is UART0 RXD. ASSIGN0(15:8) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN0 = regVal | ( 12 << 16 ); /* P0.12 is UART0 RTS, ASSIGN0(23:16) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN0 = regVal | ( 13 << 24 ); /* P0.13 is UART0 CTS. ASSIGN0(31:24) */

#endif


#if 0

  /* connect the UART1 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN1 = regVal | ( 4 << 8 ); /* P0.4 is UART1 TXD, ASSIGN1(15:8) */

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN1 = regVal | ( 0 << 16 ); /* P0.0 is UART1 RXD. ASSIGN1(23:16) */

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN1 = regVal | ( 12 << 24 ); /* P0.12 is UART1 RTS. ASSIGN1(31:24) */

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN2 = regVal | ( 13 << 0 ); /* P0.13 is UART1 RTS, ASSIGN2(7:0) */

#endif


#if 0

/* connect the UART2 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN2 = regVal | ( 4 << 16 ); /* P0.4 is UART2 TXD, ASSIGN2(23:16) */

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN2 = regVal | ( 0 << 24 ); /* P0.0 is UART2 RXD. ASSIGN2(31:24) */

regVal = LPC_SWM->PINASSIGN3 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN3 = regVal | ( 12 << 0 ); /* P0.12 is UART2 RTS. ASSIGN1(7:0) */

regVal = LPC_SWM->PINASSIGN3 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN3 = regVal | ( 13 << 8 ); /* P0.13 is UART2 RTS, ASSIGN2(15:8) */

#endif



LPC812의 UART는 스위치 메트릭스로 원하는 포트에 할당가능하다. 다만 부트로드의 경우 디폴트로 P0.0, P1.4에 할당되어 있다.부트로더를 이용한다면 하드웨어 설계시주의가 필요하다.





LPC812 UART Status Register

RXDATSTAT의 RXRDY 비트가 1이면 수신버퍼로부터 데이터르 읽어 올 수 있다. 데이터를 읽어오면 자동으로 0이 된다.




LPC812 UART 송수신 함수

void U0_PutByte(unsigned char Data)

{

    while ( !(LPC_USART0->STAT & TXRDY) );

    LPC_USART0->TXDATA = Data;    

}



unsigned char U0_GetByte(void)

{

    while(!(LPC_USART0->STAT & RXRDY));     

    return LPC_USART0->RXDATA;

}



Posted by nexp

댓글을 달아 주세요

[NXP]/LPC8002014. 3. 9. 20:00

LPC812 EVM 보드 제작 - NXP Cortex-M0+ Core

LPC812 EVM 보드 제작 - NXP Cortex-M0+ Core




NXP사의 Cortex-M0+ 코어의 저렴한 LPC812 테스트를 위한 보드를 S-Type EVM 보드 형태로 제작했다.

LPC812는 1$ 이하의 32bit Cortex-M0+ 코어로 30Mhz로 동작하고 UART 3채널, SPI2채널 등의 화려한 페리를 자랑한다. 뿐만아니라 핀맵핑을 소프트웨어적으로 원하는 형태로 할당 가능하므로 하드웨어의 유연성이 뛰어나다.


다만 아쉬운점은 ADC가 없는것인데 가격을 생각하면 ADC없는 어플리케이션에서는 아주 매리트가 있다. LPC812 EVM 보드에는 소형의 16비트 ADC인 ADS8320을 실장 할 수 있도록 했다.






LPC812 핀맵 회로도

LPC812 회로도 - LED 및 스위치



LPC800 시리즈에는 ADC가 없기 때문에 아쉬운 점이 있어 별도의 소형 16bit ADC (ADS8320) 칩을 실장 할 수 있도록 설계 했다.




LPC812 확장 테스트 보드








Posted by nexp

댓글을 달아 주세요

[NXP]/LPC8002014. 3. 8. 23:30

LPC812 - JTAG (ISP) 모드 주의사항

LPC812 - JTAG (ISP) 모드 주의사항


LPC1K와 LPC800시리즈의 부트모드 설정을 위한 GPIO핀이 칩 버전에 따라 변경되었다고 한다. 

하드웨서 제작시 유의해야 할것 같다.







LPC812 SWD 핀맵





Posted by nexp
TAG LPC812

댓글을 달아 주세요