dsPIC33E - UART 테스트
dsPIC33E UART 블록도
dsPIC33E UART 초기화 코드
UART도 약간의 레지스터 변화가 있어 코드수정이 필요하다.
void U0_Init(unsigned char baud)
{
U0_TXINIT();
U0_RXINIT();
U0_SetBaud(baud);
U1MODEbits.STSEL = 0; // 1 스톱 비트
U1MODEbits.PDSEL = 0; // No 패리티, 8비트 데이터 전송
U1MODEbits.ABAUD = 0; // Autobaud 중지
U1MODEbits.BRGH = 1;
U1STAbits.UTXISEL1 = 1; //인터럽트 사용 중지
U1STAbits.UTXISEL0 = 1; //인터럽트 사용 중지
U1STAbits.URXISEL = 0; //1 문자 수신후, 인터럽트 발생
U1MODEbits.UARTEN = 1; //UART1 모듈 동작 시작 설정
U1STAbits.UTXEN = 1; //UART1 Tx 동작 설정
IFS0bits.U1TXIF = 0; //UART1 송신 인터럽트 플래그 클리어
IFS0bits.U1RXIF = 0; //UART1 수신 인터럽트 플래그 클리어
IEC0bits.U1TXIE = 0; //UART1 송신 인터럽트 중지
IEC0bits.U1RXIE = 0; //UART1 수신 인터럽트 중지
IEC4bits.U1EIE = 0; //UART1 에러 인터럽트 중지
}
dsPIC33E UART 송수신 함수
#define u0_WaitForReceive() while(!IFS0bits.U1RXIF);(IFS0bits.U1RXIF = 0)
#define u0_RxData() (U1RXREG)
#define u0_TxData(Data) (U1TXREG = Data)
#define u0_WaitForSend() while(!U1STAbits.TRMT)
#define u0_IsReceiveData() (IFS0bits.U1RXIF)
unsigned char U0_GetByte(void)
{
u0_WaitForReceive();
return u0_RxData();
}
void U0_PutByte(unsigned char Data)
{
u0_TxData(Data);
u0_WaitForSend();
}