设置 RXIF 标志时未调用 PIC32 SPI ISR?

Posted

技术标签:

【中文标题】设置 RXIF 标志时未调用 PIC32 SPI ISR?【英文标题】:PIC32 SPI ISR not being called when RXIF flag set? 【发布时间】:2012-05-01 14:13:09 【问题描述】:

我在从机模式下使用 PIC32MX795F512L SPI3 模块。我的主人正在通过 SPI 线路发送数据,但从未调用过我的奴隶的中断服务程序。 RX 中断标志​​正在从机侧的硬件中设置,我可以读取 SPI3BUF 并获得正确的值,但仍然没有调用 ISR。

这是我的 spi 初始化代码:

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 个小时。

【问题讨论】:

是否有其他中断发生?大多数中断控制器/处理器都有某种全局中断启用/禁用。我认为您的问题已经在microchip.com/forums/m647728-print.aspx 上得到了回答。 【参考方案1】:

检查事项: 1 - 是否需要修改全局中断掩码以使其正常工作? 2 - 是否有需要修改的中断级别/优先级掩码? 3 - 您是否为中断赋予了唯一的级别/优先级,有些微机不允许两个中断共享相同的 lev&pri,有些会默认为垃圾或无效值。

【讨论】:

只是添加 - 它可能会或可能不会重要,但有时您需要在旋转屏蔽位时屏蔽中断(设置 IPL),然后在完成后重新启用。【参考方案2】:

还有一些值得关注的地方:

    检查您的芯片的勘误表。 Microchip 有 PIC 中与 SPI 相关的硅问题的历史。

    看看这个讨论:http://www.microchip.com/forums/m573732.aspx。它主要针对外设芯片,但 SPIxSTATbits.SPITBE 和 SPIxSTATbits.SPIRBF 的讨论可能会让您有所了解。

【讨论】:

以上是关于设置 RXIF 标志时未调用 PIC32 SPI ISR?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Docker 时未加载 Keycloak SPI 提供程序和层

请教PIC单片机写I2C和SPI时,卡住在 while(!SSPIF);

linux驱动调用spi标准函数spi_sync发送速率慢的问题

STM32SPI通信仿真没问题,下载后不能接收

willBeginSending 应用程序在打开 EverNote 或任何其他扩展时未调用

由于 rustc 没有“-fPIC”标志,如何将 rust 代码编译为 PIC 二进制文件?