This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

芯片tms320C6726b,使用dmax作为spi从模式传输数据,程序接收缺不进中断

将spi0配置为三线传输,并且使用dmax进行接收,但是我的dmax事件中断却一直进不去,不清楚是什么原因,查看了芯片资料,在芯片资料中,提到spibuf的数据会自动更新到0x10001000的内部存储空间,但是我的spibuf有数据接收到,内部存储空间并没有,不明白哪里出了问题,望回复。

程序如下:

void SPIO_Init()
{


Dmax_spi_Init();
hSpi->regs->SPIGCR0 = 0x00;//reset spi0;
//SPI0_GCR0=0x00;//reset spi;
delay(100);
hSpi->regs->SPIGCR0 = 0x01;
//SPI0_GCR0=0x01;
/* 2. Configure SPI0 for slave */
hSpi->regs->SPIGCR1 = 0x00;

//SPI0_GCR1=0x00;
/* 3. Configure SPI0 mode */
hSpi->regs->SPIPC0 = 0x00000E00;

//SPI0_PC0 =pinmsk;
/* 4. Chose SPI0 SPIFMT0 */
hSpi->regs->SPIDAT1 = 0x00000000;

//SPI0_DAT1=0x00000000;
/* 5. Configure SPI0 for SHIFTDIR=0,POLARITY=1,PHASE=0,
CHARLEN=8 8bit CHARLEN=10 16bit*/
hSpi->regs->SPIFMT[0] = 0x00020008;

//SPI0_FMT0=0x00020010;
/* 6. SPIDELAY for SPI0 not relevant in slave mode */
hSpi->regs->SPIDELAY = 0x00;

//SPI0_DELAY =0x00;
/* 7. Configure SPI0 for error notifications for OVR,BITERR and DESEL */

hSpi->regs->SPIINT0 = 0x00000000;

//SPI0_INT0 =0x00000000;
hSpi->regs->SPILVL = 0x000; //0x00;

//SPI0_LVL =0x00;
/* 8. Enable SPI0 communication */

hSpi->regs->SPIGCR1 |= 0x01000000;

//SPI0_GCR1 |=0x01000000;
/* 9. Configure SPI0 for dmax servicing of spi events*/
hSpi->regs->SPIINT0 |= 0x000100000;//0x00010000;

//SPI0_INT0 |=0x00010000;
/* 10. Let dMAX handle SPI data transfer and interrupt service routine handle
SPI error cases */
/* Configure dMAX channel to service SPI data transfers */
/* Perform any other processing */

}

void Dmax_spi_Init()
{

//dMAX event low priority
*(int*)(DMAX_CONTREG_BASE_ADD + DMAX_DELPR)= (0x1 << 13);
//EHP14 set as a low-priority event for SPI1
//dMAX event polarity
*(int*)(DMAX_CONTREG_BASE_ADD + DMAX_DEPR)= (0x1 << 13);
//event flag is set on rising edge

/********************* SPI1 RX EVENT ENTRY *****************************/

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+13*4 )= (0x02<<0)|(1<<5)|(1<<6)|(0xA0<<8)|(6<<24) |(1<<28)|(0<<29);
//ETYPE 0x02 ,as a SPI RX transfer event.
//PTE = 0x28, pointer to transfer entry #6
//ESIZE = 01,8-bit element
//RELOAD=1;
//TCINT = 1 ;
//TCC = 0110;TCC6
//SYNC:0
//QTSL:00

/********************* SPI0 RX TRANSFER ENTRY *****************************/

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+0*4 )= (unsigned int)(&tx_buf);
//tx src

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+1*4 )=(unsigned int)(&rx_buf);
//rx dst

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+2*4 )= 8|(0x00 << 31);
//COUNT ACTIVE = 8
//PP = 0

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+3*4 )= 16;
//COUNT REFERENCE= 16

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+4*4 )= (unsigned int)(&tx_buf);
//SRC0 = 1

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+5*4 )= (unsigned int)(&rx_buf);
//DST0 = 1

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+6*4 )= (unsigned int)(&tx_buf);
//SRC1 = 1

*(int *)( DMAX1_TRANSFER_ENTRY_BASE+7*4 )= (unsigned int)(&rx_buf);
//DST1 = 1

*(int *)( DMAX_CONTREG_BASE_ADD+DMAX_DEDR )=(1<<13);
*(int *)( DMAX_CONTREG_BASE_ADD+DMAX_DEER )=(1<<13);

}

其中配置8中断为传输中断

CSL_intcHookIsr( CSL_INTC_EVENTID_DMAXEVTOUT1, (Uint32)dmax_isr );
CSL_intcEventEnable( CSL_INTC_EVENTID_DMAXEVTOUT1, &eventstat );

#define CSL_INTC_EVENTID_DMAXEVTOUT1     (8)      /**<dMAXEVTOUT[1]*/

但是程序根本不进中断,不知道什么原因,也不知道是不是哪里没有配置好。