请教UART5的接收进不了中断,可以发送数据,UART1、2、3、4都调试完毕,只有UART5进不了接收中断,调试PIC32MX795F512L的时候UART5是可以进入接收中断的,直接移植到到512H上面就进不了接收中断了,原理图和程序如下:
恳请各位指点一二,谢谢!
#include <plib.h>
#include "uart5.h"
#include "coretime.h"
unsigned int actualDataRate; //波特率
unsigned char U5RXData[10]; //存放接收到的数据
unsigned char U5RXFlag=0; //接收数据完成标志
unsigned char U5_i=0; //接收数据计数用
void UART5_Init(void)
{
U5MODEbits.ON = 1;
//U4MODEbits.UEN0 = 0;
//U4MODEbits.UEN1 = 0;
U5MODEbits.PDSEL0 = 0;
U5MODEbits.PDSEL1 = 0;
U5MODEbits.STSEL = 0;
U5MODEbits.BRGH = 1;
U5STAbits.UTXISEL0 = 1;
U5STAbits.UTXISEL1 = 1;
U5STAbits.UTXEN = 1;
U5STAbits.URXEN = 1;
U5STAbits.URXISEL0 = 0;
U5STAbits.URXISEL1 = 0;
U5BRG = 64; //115200
IFS2bits.U5TXIF = 0;
IFS2bits.U5RXIF = 0;
IFS2bits.U5EIF = 0;
IEC2bits.U5EIE = 1;
IEC2bits.U5RXIE = 1;
IPC12bits.U5IP = 2;
IPC12bits.U5IS = 2;
// UARTConfigure(UART5, UART_ENABLE_PINS_TX_RX_ONLY);
// UARTEnable(UART5, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX)); //
// UARTSetFifoMode(UART5, UART_INTERRUPT_ON_TX_DONE|UART_INTERRUPT_ON_RX_NOT_EMPTY); //控制UART模块TX和RX FIFO操作。
// actualDataRate = UARTSetDataRate(UART5, 30000000, 9600);
// UARTSetLineControl(UART5, UART_DATA_SIZE_8_BITS|UART_PARITY_NONE|UART_STOP_BITS_1); //8 bit ,不校验, 1个停止位
//
// INTSetVectorPriority(INT_UART_5_VECTOR, INT_PRIORITY_LEVEL_3); //设置 UART5 中断优先级 3
// INTSetVectorSubPriority(INT_UART_5_VECTOR, INT_SUB_PRIORITY_LEVEL_0); //中断子优先级 0
//
// INTClearFlag(INT_U5E|INT_U5RX|INT_U5|INT_U5TX);
// INTEnable(INT_U5RX, INT_ENABLED); //使能发送中断
}
//
//发送一个字节
void U5SendAByte(unsigned char data)
{
UARTSendDataByte(UART5, data);
while(!UARTTransmissionHasCompleted(UART5));
}
//
//发送n个字节
//
void U5SendSomeByte(unsigned char *Buffer, unsigned char Num)
{
unsigned char j;
for(j=0;j<Num;j++)
{
U5SendAByte(Buffer[j]);
}
}
void __ISR(_UART_5_VECTOR, IPL2SOFT) Uart5_Handler(void)
//void __ISR(_UART_5_VECTOR, IPL3) UART5_Handler(void)
{
// if(IFS0bits.U1RXIF)
if(INTGetFlag(INT_U5RX))
{
do
{
U5RXData[U5_i++] = U5RXREG;
}while(U5STAbits.URXDA);
if(U5_i>=10)
{
U5_i=0;
D4_Open();
U5RXFlag=1;
}
INTClearFlag(INT_U5RX);
}
}
此帖出自
小平头技术问答
可能是UART5与其它串口模块设计的功能有区别吧.
这在PIC芯片上较为常见,
比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.
一周热门 更多>