3826|4

79

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求助PIC32MX795F512H的UART5接收中断 [复制链接]

请教UART5的接收进不了中断,可以发送数据,UART1、2、3、4都调试完毕,只有UART5进不了接收中断,调试PIC32MX795F512L的时候UART5是可以进入接收中断的,直接移植到到512H上面就进不了接收中断了,原理图和程序如下:
恳请各位指点一二,谢谢!




#include
#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     {
        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);
    }
}



1486542448(1).png (64.14 KB, 下载次数: 1)

原理图

原理图

最新回复

可能是UART5与其它串口模块设计的功能有区别吧. 这在PIC芯片上较为常见, 比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.  详情 回复 发表于 2017-2-10 13:22
点赞 关注
 

回复
举报

419

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
帮顶,没用过这个片子
 
 
 

回复

637

帖子

2

TA的资源

版主

板凳
 
如果调试是通过官方的调试器完成的,那么实际移植到产品上要注意:
1.看原理图,UART5是不是与CAN模块复用的?是否存在相互的干扰?(UART5RX与CAN2TX;UART5TX与CAN2RX一个是发送,另一个是接收,而接在一个管脚上?)
2.接收中断是在完成数据接收动作才会出现,那么UART5RX的IO配置为输入否?硬件部分是否正常连接?此IO是否有其它模块使用?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

4
 
dingzy_2002 发表于 2017-2-9 10:22
如果调试是通过官方的调试器完成的,那么实际移植到产品上要注意:
1.看原理图,UART5是不是与CAN模块复用的? ...

多谢,确实把RX引脚配置为输入,问题解决了,搞不明白其他的UART口不用设置IO的方向,手册也没讲到,这点有点郁闷

点评

可能是UART5与其它串口模块设计的功能有区别吧. 这在PIC芯片上较为常见, 比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.  详情 回复 发表于 2017-2-10 13:22
 
 
 

回复

637

帖子

2

TA的资源

版主

5
 
lzgztm521 发表于 2017-2-9 17:04
多谢,确实把RX引脚配置为输入,问题解决了,搞不明白其他的UART口不用设置IO的方向,手册也没讲到,这点 ...

可能是UART5与其它串口模块设计的功能有区别吧.
这在PIC芯片上较为常见,
比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表