본문 바로가기

[NXP]/LPC1k

[LPC1K EVM] SPI 테스트 - 가속도 센서 테스트

[LPC1K EVM] SPI 테스트 - 가속도 센서 테스트

LCP1K SPI 특징
- Maximum SPI speed of 25 Mbit/s (master) or 4.17 Mbit/s (slave) (in SSP mode)
- Compatible with Motorola SPI, 4-wire Texas Instruments SSI, and National Semiconductor Microwire buses
- Synchronous serial communication
- Master or slave operation
- 8-frame FIFOs for both transmit and receive
- 4-bit to 16-bit frame


SPI SLK핀은 P0.10, 2.11, P0.6포트에 리맵이 가능한데 [LPC1K EVM] 보드는 0.6에 되어 있으므로 아래와 같이 설정할 수 있다.
#define IOCON_SCKLOC_SCKPIN_PIO0_10               0 // Set SCK function to pin 0.10
#define IOCON_SCKLOC_SCKPIN_PIO2_11               1 // Set SCK function to pin 2.11
#define IOCON_SCKLOC_SCKPIN_PIO0_6                1 // Set SCK function to pin 0.6

 //Set 0.6 to SSP SCK (2.11 and 0.10 can also be used)
    LPC_IOCON->SCK_LOC = IOCON_SCKLOC_SCKPIN_PIO0_6;
    LPC_IOCON->PIO0_6 = IOCON_PIO0_6_FUNC_SCK; 
    LPC_IOCON->PIO0_6  |= IOCON_PIO0_6_MODE_PULLUP;



SPI 드라이버 함수(spi.c)의 초기화 함수 및 송수신 함수를 수정하면 기존 코드를 그대로 사용할 수 있다.
void SPI0_Init(void)
{
 LPC_SYSCON->PRESETCTRL    |=  (1 <<  0);
 LPC_SYSCON->SSP0CLKDIV    =  SCB_SSP0CLKDIV_DIV4;
 LPC_SYSCON->SYSAHBCLKCTRL |= SCB_SYSAHBCLKCTRL_SSP0;

    /* Set P0.8 to SSP MISO */
    LPC_IOCON->PIO0_8 &= ~IOCON_PIO0_8_FUNC_MASK;
    LPC_IOCON->PIO0_8 |= IOCON_PIO0_8_FUNC_MISO0;
    LPC_IOCON->PIO0_8  |= IOCON_PIO0_8_MODE_PULLUP; 
 
    /* Set P0.9 to SSP MOSI */
    LPC_IOCON->PIO0_9  &= ~IOCON_PIO0_9_FUNC_MASK;
    LPC_IOCON->PIO0_9  |= IOCON_PIO0_9_FUNC_MOSI0;
    LPC_IOCON->PIO0_9  |= IOCON_PIO0_9_MODE_PULLUP;

 //Set 0.6 to SSP SCK (2.11 and 0.10 can also be used)
    LPC_IOCON->SCK_LOC = IOCON_SCKLOC_SCKPIN_PIO0_6;
    LPC_IOCON->PIO0_6 = IOCON_PIO0_6_FUNC_SCK; 
    LPC_IOCON->PIO0_6  |= IOCON_PIO0_6_MODE_PULLUP;
  
    // Set clock polarity
 Cbi(LPC_SSP0->CR0, SSP_SSP0CR0_CPOL_MASK);

 // Set edge transition
 Sbi(LPC_SSP0->CR0, SSP_SSP0CR0_CPHA_SECOND); 


 /* Master mode */
 LPC_SSP0->CR1 = SSP_SSP0CR1_SSE_ENABLED | SSP_SSP0CR1_MS_MASTER | SSP_SSP0CR1_LBM_NORMAL;
 
    /* Clock prescale register must be even and at least 2 in master mode */ 
    LPC_SSP0->CPSR = 2;
}


SUINT SPI0_WriteReadByte(SUINT Data)
{
 /* Move on only if NOT busy and TX FIFO not full. */
 while ((LPC_SSP0->SR & (SSP_SSP0SR_TNF_NOTFULL | SSP_SSP0SR_BSY_BUSY)) != SSP_SSP0SR_TNF_NOTFULL);
 LPC_SSP0->DR = Data;
 
 while ( (LPC_SSP0->SR & (SSP_SSP0SR_BSY_BUSY|SSP_SSP0SR_RNE_NOTEMPTY)) != SSP_SSP0SR_RNE_NOTEMPTY );
 return(LPC_SSP0->DR);  
}


LPC1113 SPI 가속도 센서 테스트
가속도 센서를 테스트하기 위해 [NET-EVM]보드를 이용하였다. [NET-EVM]보드의 가속도 센서 CS는 CN7의 P8에 연결되어 있는데 LPC1K EVM보드는 핀수가 적어 할당되어 있지 않다.
그래서 점퍼를 이용하여 P3.5에 연결하여 테스트 하였다.


반응형