gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:33:17 26 4
gpt4 key购买 nike

我在从机模式下使用 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 个小时。

最佳答案

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

关于embedded - 设置 RXIF 标志时未调用 PIC32 SPI ISR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com