[求助]PIC24串口红外通信问题???急!!
下面是我在用串口2做红外通信时写的程序,不知为何连接收中断都进不去??请高手帮我看看,那个地方有问题???
谢谢!!
void URTCF(void) //配置串口2,将串口2用于红外发送和接收
{
...
// IrDA Configure
RPINR19bits.U2CTSR=18; //Assign U2CTS To Pin RPI18
RPINR19bits.U2RXR=39; //Assign U2RX To Pin RPI39
RPOR12bits.RP24R=5; //Assign U2TX To Pin RP24
RPOR9bits.RP18R=6; //Assign U2RTS(BLCK2) to Pin RP18
...
}
void Uart2Init(void) //串口2初始化
{
FRxDHW=1; //设置红外相应引脚的方向
FTxDHW=0;
FHWZB=0;
U2MODE=0x3082; //use Rx and Tx only, BRGH=0, parity check = 0x01, stop bits = 1
U2BRG=0xCF; //baud rate = 1200bps
IPC7bits.U2RXIP=7;//receiver interrupt priority = 7
IPC7bits.U2TXIP=7;//send interrupt priority = 7
U2STAbits.URXISEL=0;//receive interrupt mode
U2STAbits.UTXISEL0=0;
U2STAbits.UTXISEL1=0;//send interrupt mode
U2STAbits.UTXINV=0; // enable IrDA code send convert bit
IEC1bits.U2TXIE=0; //receive interrupt enable
IEC1bits.U2RXIE=1;
U2MODEbits.UARTEN=1; //enable UART
_U2TXIF=0;
_U2RXIF=0;
U2STAbits.UTXEN=1;
flag=1;
RevcCount=0;
SendCount=0;
RNum=0;
}
void __attribute__((interrupt,no_auto_psv)) _U2TXInterrupt(void) //发送中断
{
_U2TXIF=0;
if(SendCount<TNum)
{
U2TXREG=RevcBuff;
SendCount++;
}
else
{
CTL=0;
RevcCount=0;
RNum=0;
TNum=0;
SendCount=0;
U2STAbits.UTXEN=0;
IEC1bits.U2RXIE=1;
}
flag=1;
}
void __attribute__((interrupt,no_auto_psv)) _U2RXInterrupt(void) //接收中断
{
_U2RXIF=0;
RevcBuff=U2RXREG;
data2=RevcBuff;
if(RevcBuff==0xFE && RevcCount<7)
{
RevcCount=0;
RevcBuff=0xFF;
}
if(RevcCount==9)
RNum=RevcBuff+11;
else if(RevcCount==7)
{
if(RevcBuff!=0x68)
{
RevcCount=0;
RNum=0;
RevcBuff=0xFF;
}
}
if(RevcCount==RNum && RevcCount>9 && RevcBuff==0x16)
{
flag=0;
IEC1bits.U2TXIE=1; //Send interrupt enable
IEC1bits.U2RXIE=0;
}
else if(RevcBuff==0x68)
RevcCount++;
}
中断进不去,还是查查配置吧。你的晶振是4M的吧?串口的奇偶校验这个也确认下
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=cn528001
这里有官方的协议栈,可以参考看看!
页:
[1]