[dsPIC33] SPI 테스트
dsPIC33 SPI 블록도
SPI모드 설정
SPI2CON1bits.SMP = 0; //한 주기 클럭 중간에서 데이터 출력 위상 설정
SPI2CON1bits.CKE = 0; //MODE 0,0 , 클럭이 LOW 상태에서
SPI2CON1bits.CKP = 0; //MODE 0,0 , 데이터 비트 중간에 High
SPI클럭 설정
dsPIC33 SPI 초기화 코드
dsPIC SPI 송수신 함수
dsPIC SPI 연결도
다른 MCU와 다르게 MOSI(SDI), MISO(DSO)핀 연결이 반대 이므로 주의 해야 한다.
dsPIC33 SPI 블록도
SPI모드 설정
SPI2CON1bits.SMP = 0; //한 주기 클럭 중간에서 데이터 출력 위상 설정
SPI2CON1bits.CKE = 0; //MODE 0,0 , 클럭이 LOW 상태에서
SPI2CON1bits.CKP = 0; //MODE 0,0 , 데이터 비트 중간에 High
SPI클럭 설정
dsPIC33 SPI 초기화 코드
// SPI 초기화 함수
void SPI1_Init(void)
{
SPI2CON1bits.DISSCK = 0; //내부 시리얼 클럭 사용 설정
SPI2CON1bits.DISSDO = 0; //SPI모듈 SDO2 핀 사용 설정
SPI2CON1bits.MODE16 = 0; //송수신 전송 데이터 크기 : 8비트 설정
SPI2CON1bits.SMP = 0; //한 주기 클럭 중간에서 데이터 출력 위상 설정
//SPI 모드 설정
SPI2CON1bits.CKE = 0; //MODE 0,0 , 클럭이 LOW 상태에서
SPI2CON1bits.CKP = 1; //MODE 0,0 , 데이터 비트 중간에 High
SPI2CON1bits.MSTEN = 1; //마스터 모드 설정
//SPI 보레이트 설정
SPI2CON1bits.PPRE = 1; //16:1
SPI2CON1bits.SPRE = 1; //8:1
SPI2CON2bits.FRMEN = 0; //프레임 모드 사용 중지
SPI2CON2bits.FRMPOL = 0; //프레임 동기 신호 액티브 로우
SPI2CON2bits.FRMDLY = 0; //프레임 동기 신호 첫번째 클럭 비트 전에 발생
SPI2STATbits.SPISIDL = 0; //아이들 모드시에도 계속 SPI 모듈 동작 설정
SPI2STATbits.SPIROV = 0; //수신 오버플로우 발생하지 않음
SPI2STATbits.SPIEN = 1; //SPI 모듈 사용 설정
IFS2bits.SPI2IF = 0; //SPI2 인터럽트 플래그 클리어
IEC2bits.SPI2IE = 0; //SPI2 인터럽트 사용 안함, 폴링 방식
IPC8bits.SPI2IP = 4; //SPI2 인터럽트 우선순위 = 4(디폴트 값)으로
}
void SPI1_Init(void)
{
SPI2CON1bits.DISSCK = 0; //내부 시리얼 클럭 사용 설정
SPI2CON1bits.DISSDO = 0; //SPI모듈 SDO2 핀 사용 설정
SPI2CON1bits.MODE16 = 0; //송수신 전송 데이터 크기 : 8비트 설정
SPI2CON1bits.SMP = 0; //한 주기 클럭 중간에서 데이터 출력 위상 설정
//SPI 모드 설정
SPI2CON1bits.CKE = 0; //MODE 0,0 , 클럭이 LOW 상태에서
SPI2CON1bits.CKP = 1; //MODE 0,0 , 데이터 비트 중간에 High
SPI2CON1bits.MSTEN = 1; //마스터 모드 설정
//SPI 보레이트 설정
SPI2CON1bits.PPRE = 1; //16:1
SPI2CON1bits.SPRE = 1; //8:1
SPI2CON2bits.FRMEN = 0; //프레임 모드 사용 중지
SPI2CON2bits.FRMPOL = 0; //프레임 동기 신호 액티브 로우
SPI2CON2bits.FRMDLY = 0; //프레임 동기 신호 첫번째 클럭 비트 전에 발생
SPI2STATbits.SPISIDL = 0; //아이들 모드시에도 계속 SPI 모듈 동작 설정
SPI2STATbits.SPIROV = 0; //수신 오버플로우 발생하지 않음
SPI2STATbits.SPIEN = 1; //SPI 모듈 사용 설정
IFS2bits.SPI2IF = 0; //SPI2 인터럽트 플래그 클리어
IEC2bits.SPI2IE = 0; //SPI2 인터럽트 사용 안함, 폴링 방식
IPC8bits.SPI2IP = 4; //SPI2 인터럽트 우선순위 = 4(디폴트 값)으로
}
dsPIC SPI 송수신 함수
unsigned char SPI1_WriteReadByte(unsigned char Data)
{
//전송 가능 체크
while(SPI2STATbits.SPITBF);
SPI2BUF = Data; // 데이터 송신
//수신 대기
while(SPI2STATbits.SPIRBF == 0);
return SPI2BUF; //데이터 수신
}
{
//전송 가능 체크
while(SPI2STATbits.SPITBF);
SPI2BUF = Data; // 데이터 송신
//수신 대기
while(SPI2STATbits.SPIRBF == 0);
return SPI2BUF; //데이터 수신
}
dsPIC SPI 연결도
다른 MCU와 다르게 MOSI(SDI), MISO(DSO)핀 연결이 반대 이므로 주의 해야 한다.
반응형