'LPC1700_STUDY'에 해당되는 글 2건

  1. 2011.11.06 [LPC1756 EVM] SPI 테스트
  2. 2011.11.05 [LPC1756 EVM] UART테스트
[NXP]/LPC17002011. 11. 6. 15:19

[LPC1756 EVM] SPI 테스트

[LPC1756 EVM] SPI 테스트





LPC1756 SPI 초기화 함수
void SPI0_Init(void)
{
    int i;
    volatile unsigned char Dummy;
    
    //SPI Power On
    PCONP |= (1 << 21);    

   //SPI 핀설정    
    PINSEL0 |= 0x80000000;
    PINSEL1 |= 0x28;    

    PCLKSEL1 |= 0x400;   //CCLK
//    PCLKSEL1 |= 0x800;    //    CCLK/2
//    PCLKSEL1 |= 0xC00;    //    CCLK/8

   SPI0_SetSpeed(SPI_SPEED_1MHZ);
  
  //SSP disable
  SSP0CR1_bit.SSE = 0;
   
  /* Set DSS data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0, and SCR is 15 */
  SSP0CR0 = 0x0007;

  /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */
  SSP0CPSR = 0x2;

  for ( i = 0; i < FIFOSIZE; i++ )
  {
    Dummy = SSP0DR;   /* clear the RxFIFO */
  }

  //NVIC_IntEnable(NVIC_SSP1);
  //NVIC_IntPri(NVIC_SSP1,HIGHEST_PRIORITY);

  // SSP Enabled
  SSP0CR1 = SSPCR1_SSE;
}


SPI 클럭 설정 PCLKSEL1에서 아래와 같이 설정 가능하다.
00 PCLK_peripheral = CCLK/4 00
01 PCLK_peripheral = CCLK
10 PCLK_peripheral = CCLK/2
11 PCLK_peripheral = CCLK/8, except for CAN1, CAN2, and
CAN filtering when “11” selects = CCLK/6.


LPC1756 SPI 송수신 함수
SUINT SPI0_WriteReadByte(SUINT Data)
{
    //TxFIFO is not full
    while ( !(SSP0SR & SSPSR_TNF) );
    SSP0DR = Data;

    //Wait until the Busy bit is cleared 
    while ( !(SSP0SR & SSPSR_RNE) );
    return SSP0DR;  
}


SPI 모드 설정 레지스터




Posted by nexp

댓글을 달아 주세요

[NXP]/LPC17002011. 11. 5. 21:00

[LPC1756 EVM] UART테스트

[LPC1756 EVM] UART테스트

LPC1756은 3개의 UART가 있고 16Byte의 FOFI를 내장하고 있다.




LPC1756 / LPC1768 UART 초기화 순서
1) Power
PCON 설정 : PCUART0 비트를 1로 설정해야 UART0 가 Power enable된다.

2)Peripheral clock
PCLKSEL0 레지스터에서 PCLK_UART0비트로 클럭 DIV를 설정할 수가 있다.
PCLKSEL1 레지스터는 PCLK_UART2/3

00 PCLK_peripheral = CCLK/4 00
01 PCLK_peripheral = CCLK
10 PCLK_peripheral = CCLK/2
11 PCLK_peripheral = CCLK/8, except for CAN1, CAN2, and CAN filtering when “11” selects = CCLK/6.

3)Baud rate
LCR레지스터의 DLAB 비트를 1로 설정후 보레이트 레지스터를 설정할 수 있다. 설정후 DLAB비트를 0으로 설정해야 한다.
(이것 때문에 고생했는데..  메뉴얼을 잘 읽어봐야 하는 부분이다.)

4)UART FIFO
FCR 레지스터에서 FIFO enable 해 주어야 한다.
    U0FCR = 0x07

5)Pin
    //RxD0 and TxD0 PIN Select
    PINSEL0 = 0x00000050;    


LPC1756 초기화 함수

// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned long baud)
{
    //RxD0 and TxD0 PIN Select
    PINSEL0 = 0x00000050;   

    //8 bits, no Parity, 1 Stop bit
    U0LCR = 3;   

    //UART boaud rate
    U0_SetBaud(baud);
    //Enable and reset TX and RX FIFO
    U0FCR = 0x07;
}


LPC1756 UART송수시 함수
void U0_PutByte(unsigned char Data)
{
    //Wait till U0THR and U0TSR are both empty
    while(!(U0LSR & TEMT)){};   
    U0THR = Data;
}

void U0_PutBuf(unsigned char *str, unsigned char len)
{
 unsigned char i =0;
 
    for(i=0;i<len;i++)
    {
        U0_PutByte(*(str+i));
    }
}


LPC1756 UART 테스트 프로그램
int main()
{
    unsigned int cnt = 0;
   
    SystemInit();

    Led1Init();
    Led1On();
   
    Led2Init();
    Led2Off();
   
    //UART0 초기화
    U0_Init(BAUD_115200);
 DebugPrint("LPC1700 Serial Test\r\n");
   
    while(1)
    {
        Led1Toggle();

        DebugPrint("cnt=%d\r\n", cnt++);
        Delay(500);
    }
 
    return 0;
}
Posted by nexp

댓글을 달아 주세요