嵌入式 – 当RXIF标志置1时,不会调用PIC32 SPI ISR?
发布时间:2020-12-15 02:33:27 所属栏目:Java 来源:网络整理
导读:我在从机模式下使用PIC32MX795F512L SPI3模块.我的主人通过SPI线路发送数据,但我的奴隶的中断服务程序从未被调用. RX中断标志在从机侧的硬件中设置,我可以读取SPI3BUF并获得正确的值,但ISR仍未被调用. 这是我的spi init代码: void InitSPI3(){ int rData; I
我在从机模式下使用PIC32MX795F512L SPI3模块.我的主人通过SPI线路发送数据,但我的奴隶的中断服务程序从未被调用. RX中断标志在从机侧的硬件中设置,我可以读取SPI3BUF并获得正确的值,但ISR仍未被调用.
这是我的spi init代码: void InitSPI3() { int rData; IEC0CLR=0x1c000000;//Disable Rx Tx,Error interrupts SPI3CON = 0; // Stops and resets the SPI3. SPI3BRG = 0; rData=SPI3BUF;// clears the receive buffer IFS0CLR = 0x1c000000;//Clear interrupt flags IPC6CLR=0x0000001f;// clear the priority //ipl7,subpri 0 IPC6bits.SPI3IP = 7; IPC6bits.SPI3IS = 0; //Enable Rx Tx,Error interrupts IEC0bits.SPI3RXIE = 1; IEC0bits.SPI3TXIE = 1; //IEC0bits.SPI3EIE = 1; SPI3CONbits.CKE = 1; SPI3CONbits.SSEN = 1; SPI3STATbits.SPIROV = 0;// clear the Overflow //Enable SPI SPI3CONbits.ON = 1; //** from now on,the device is ready to receive and transmit data (slave mode)... } 这是我的ISR void __ISR(_SPI_3_VECTOR,ipl7) _SPI3Interrupt() { SET_D2(); SET_D1(); // RX INTERRUPT if(IFS0bits.SPI3RXIF) // receive data available in SPI3BUF Rx buffer { SPI_Rx_Interrupt(); } // TX INTERRUPT if(IFS0bits.SPI3TXIF) // space available in SPI3BUF Tx buffer { SPI_Tx_Interrupt(); } IFS0CLR = 0x1c000000; // clear SPI3 interrupts } // end ISR 我正在使用MPLAB X和C32编译器.我一直在撞墙4个小时. 解决方法
要检查的事项: 1 – 是否需要修改全局中断掩码以使其工作? 2 – 是否需要修改中断级别/优先级掩码? 3 – 您是否给中断一个唯一的级别/优先级,一些微型不允许两个中断共享相同的级别和优先级,一些将默认为垃圾或非工作值.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容