[X]关闭

使用两个uart,其中一个使用了EMIO端口,两个uart中断只能触发一个。

文档创建者:江苏-天文
浏览次数:6243
最后更新:2019-07-18
本帖最后由 江苏-天文 于 2019-7-18 17:18 编辑

程序在附件中,在教程的基础上修改。中断的触发与初始化程序中这两段的顺序有关,在后面的这段能正常触发。
https://pan.baidu.com/s/1OxKoE0PxGQY5dqOwHzQVMw提取码:kcdx
int i;
void init_intr_sys(void)
{

        Init_UartPsIntr1(&UartPs1,XPAR_XUARTPS_0_DEVICE_ID);
        Init_Intr_System1(&Intc1);
        Setup_Intr_Exception(&Intc1);
        UartPs_Setup_IntrSystem1(&Intc1, &UartPs1, XPAR_XUARTPS_0_INTR);

        Init_UartPsIntr(&UartPs,XPAR_XUARTPS_1_DEVICE_ID);
        Init_Intr_System(&Intc);
        Setup_Intr_Exception(&Intc);
        UartPs_Setup_IntrSystem(&Intc, &UartPs, XPAR_XUARTPS_1_INTR);

}


int main(void)
{

        init_intr_sys();

        XUartPs_Recv1(&UartPs1, RecvBuffer1, TEST_BUFFER_SIZE1);
        XUartPs_Recv(&UartPs, RecvBuffer, TEST_BUFFER_SIZE);
        while(1)

}


发表评论已发布 2

uisrc

发表于 2019-7-18 17:31:33 | 显示全部楼层

因为ZYNQ SDK程序中共用一个总的中断实例,所有的中断是绑定到一个中断实例,然后根据优先级,依次处理,所各个中断,但是总的intc只能有一个,改成这样试下试试,
void init_intr_sys(void)
{

        Init_UartPsIntr1(&UartPs1,XPAR_XUARTPS_0_DEVICE_ID);           Init_UartPsIntr(&UartPs,XPAR_XUARTPS_1_DEVICE_ID);

       UartPs_Setup_IntrSystem1(&Intc, &UartPs1, XPAR_XUARTPS_0_INTR);
       UartPs_Setup_IntrSystem(&Intc, &UartPs, XPAR_XUARTPS_1_INTR);

        Init_Intr_System1(&Intc);
        Setup_Intr_Exception(&Intc);
        
}

越努力越幸运!加油!

江苏-天文

发表于 2019-7-18 19:36:57 | 显示全部楼层

汤老师一针见写,程序按汤老师的修改之后果然两个中断就都响应了!
多谢汤老师
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则