[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/TMO3P4.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축 가속도 센서 구동시 잘 동작하는것을 확인할 수 있다.