본문 바로가기

[MCU]/adStar

[adStar EVM] SPI 테스트

[adStar EVM] SPI 테스트

adStar는 2채널의 SPI가 있다. CANTUS에서는 HDSC와 핀이 겹쳐서 아쉬울 때가 있었는데... 2채널이 되어 상당히 편해 졌다.

핀맵은 아래와 같다.

 

P0.0/SPWM2L_P/SPI0_nCS/TWI_SCL
P0.1/SPWM2L_N/SPI0_MISO/TWI_SDA
P0.2/SPWM2R_P/SPI0_MOSI/nCS1
P0.3/SPWM2R_N/SPI0_SCK/nCS2

 

P5.1/IIS_LRCLK0/SPI_MOSI1/A1

P5.0/IIS_SCLK0/SPI_MISO1/A0

P4.7/IIS_SDI0/SPI_CS1/TMO3

P4.6/IIS_MCLK/SPI_SCK1/CAP3

 

 

CANTUS와 코어는 동일하지만 2개의 SPI가 존재 하므로 기존 코드어세 약간의 수정이 필요하다.

 

adStar SPI초기화 함수

void SPI1_Init(void) // SPI 통신 초기화 함수
{
  Cbi(*R_PAF5, 0x0F); // SPI_SCK, SPI_MISO, SPI_MOSI
 Cbi(*R_PAF4, 0xF000);

 Sbi(*R_PAF5, F_PAF5_0_SPI_MISO1 | F_PAF5_1_SPI_MOSI1); // SPI_SCK, SPI_MISO, SPI_MOSI
 Sbi(*R_PAF4, F_PAF4_7_SPI_CS1 | F_PAF4_6_SPI_SCK1);

 

 *R_SPI0CON(1) = SPICON_MSTR | SPICON_MSBF | SPICON_EN; 
 
    int baud = spi_set_freq(1, SPI_MASTER, W25Xxx_SPI_FREQ);
}

 

 

adStar SPI송수신 함수

unsigned char SPI1_WriteReadByte(unsigned char Data)
{
 //SPI포트로 데이터 출력 
 *R_SPI0DATA(1) = Data;
 
 // 전송대기
 while (!(*R_SPI0STAT(1) & SPISTAT_SPIF));
 
 //데이터 수신
 return *R_SPI0DATA(1);
}

 

 

기존 CANTUS로 작성된  3축 가속도 센서 구동시 잘 동작하는것을 확인할 수 있다.

 

반응형