본문 바로가기

[Microchip]/PIC32

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

[PIC32-SM EVM] SPI 테스트


PIC32의 SPI는 최대 25Mhz로 동작하며 8, 16, 32비트로 설정가능하다.
[PIC32-SM EVM] 보드에는 SPI핀이 SPI2 RG6(SCLK), RG7(MISO), RG8(MOSI)에 할당되어 있다.

PIC32 블록도



PIC32 SPI초기화
void SPI0_Init(void)
{
 SPI2CONbits.ON  = 1;  // Enable 
 SPI2CONbits.FRZ  = 0;
 SPI2CONbits.SIDL  = 0;
 SPI2CONbits.DISSDO = 0;
 SPI2CONbits.MODE32  = 0;
 SPI2CONbits.MODE16 = 0;  //8비트 모드

//SPI 모드 설정
 SPI2CONbits.SMP  = 0;  //위상 설정
 SPI2CONbits.CKE  = 1;  // 0: Idle에서 active로 갈 때 data transaction 1: 반대
 SPI2CONbits.SSEN = 1;  // Slave select enable
 SPI2CONbits.CKP  = 0;  // 0: active high 1: 반대
 SPI2CONbits.MSTEN = 1;
 
 SPI2STATbits.SPIROV = 0;  //수신 오버플로우 초기화

 SPI0_SetSpeed(SPI_SPEED_4MHZ);
}

SPICON 레지스터




SPI모드 설정



PIC32 SPI클럭 설정



PIC32 SPI데이터 송수신 드라이버 함수 작성
SUINT SPI0_WriteReadByte(SUINT Data)
{
 //SPI포트로 데이터 출력
 SPI2BUF = Data;                   
 while( !SPI2STATbits.SPIRBF); // 전송대기

 //데이터 수신
 return SPI2BUF;
}



가속도 센서 테스트 드라이버
NET-EVM 보드의 가속도 센서는 SPI0, CS ->RB13에 연결되어 있으므로 아래와 같이 드라이버 코드를 작성할 수 있다.
#define _SPI0_ENABLE    1

//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

#define ACCEL_CS_BIT     BIT13
#define ACCEL_CS_PORT     LATB
#define ACCEL_CS_INIT()    (TRISBbits.TRISB13 = 0)
          
#define ACCEL_CS_ASSERT()    Cbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_CS_DEASSERT()   Sbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_SPI_INIT()    SPI0_Init()
#define ACCEL_Read      SPI0_WriteReadByte
#define ACCEL_Write      SPI0_WriteReadByte
//-----------------------------------------------------------------------------

반응형