Quantcast
Channel: 数字信号处理器 (DSP) & ARM® 微处理器
Viewing all articles
Browse latest Browse all 21822

帖子: TMS320C6713 MCBSP0 SPI Slave模式 接收进不了中断

$
0
0

TI专家,各位朋友:
    SPI slave模式CPU轮询可以接收到数据,并且是正确的,但是 配置为中断接收却进步了中断

中断配置代码:

void Setup_Spi_Interrupt(void) {   //point to the IRQ vector table  IRQ_setVecs(vectors);          //Globally enable interrupts   IRQ_globalEnable();                        //Enable NMI interrupt   IRQ_nmiEnable();          //Map McBSP0 RINT0 events(0x0c) to physical interrupt number         IRQ_map(IRQ_EVT_EXTINT4, IRQ_EVT_RINT0);       //Reset the ext events  IRQ_reset(IRQ_EVT_EXTINT4);    //Enable the ext events(events are disabled while resetting)     IRQ_enable(IRQ_EVT_EXTINT4);  } 

中断向量表:

*------------------------------------------------------------------------------ * Global symbols defined here and exported out of this file *------------------------------------------------------------------------------    .global _vectors    .global _c_int00    .global _vector1    .global _vector2    .global _vector3    .global _c_int04     .global _vector5    .global _vector6    .global _vector7    .global _vector8    .global _vector9       .global _vector10     .global _vector11       .global _vector12      .global _vector13       .global _vector14 ; Hookup the c_int14 ISR in main()    .global _vector15  *------------------------------------------------------------------------------ * Global symbols referenced in this file but defined somewhere else.  * Remember that your interrupt service routines need to be referenced here. *------------------------------------------------------------------------------    .ref _c_int00  *------------------------------------------------------------------------------ * This is a macro that instantiates one entry in the interrupt service table. *------------------------------------------------------------------------------ VEC_ENTRY .macro addr     STW   B0,*--B15     MVKL  addr,B0     MVKH  addr,B0     B     B0     LDW   *B15++,B0     NOP   2     NOP        NOP       .endm   *------------------------------------------------------------------------------ * This is a dummy interrupt service routine used to initialize the IST. *------------------------------------------------------------------------------ _vec_dummy:   B    B3   NOP  5  *------------------------------------------------------------------------------ * This is the actual interrupt service table (IST). It is properly aligned and * is located in the subsection .text:vecs. This means if you don't explicitly * specify this section in your linker command file, it will default and link * into the .text section. Remember to set the ISTP register to point to this * table. *------------------------------------------------------------------------------  .sect ".text:vecs"  .align 1024  _vectors: _vector0:   VEC_ENTRY _c_int00    ;RESET _vector1:   VEC_ENTRY _vec_dummy  ;NMI _vector2:   VEC_ENTRY _vec_dummy  ;RSVD _vector3:   VEC_ENTRY _vec_dummy _vector4:   VEC_ENTRY _c_int04  _vector5:   VEC_ENTRY _vec_dummy _vector6:   VEC_ENTRY _vec_dummy _vector7:   VEC_ENTRY _vec_dummy _vector8:   VEC_ENTRY _vec_dummy _vector9:   VEC_ENTRY _vec_dummy _vector10:  VEC_ENTRY _vec_dummy _vector11:  VEC_ENTRY _vec_dummy _vector12:  VEC_ENTRY _vec_dummy _vector13:  VEC_ENTRY _vec_dummy _vector14:  VEC_ENTRY _vec_dummy ; Hookup the c_int14 ISR in main() _vector15:  VEC_ENTRY _vec_dummy  *------------------------------------------------------------------------------   ******************************************************************************** * End of vecs.asm ******************************************************************************** 

MCBSP0配置:

void ConfigMcbsp(MCBSP_Handle *hMcbsp_ch0) {  MCBSP_Config MyMcbspConfig;    *hMcbsp_ch0 = MCBSP_open(0, MCBSP_OPEN_RESET);    //串口控制寄存器   MyMcbspConfig.spcr= (Uint32)                        ((MCBSP_SPCR_XINTM_XRDY      << _MCBSP_SPCR_XINTM_SHIFT   )                        |(MCBSP_SPCR_RINTM_RRDY      << _MCBSP_SPCR_RINTM_SHIFT   )                        |(MCBSP_SPCR_CLKSTP_DELAY    << _MCBSP_SPCR_CLKSTP_SHIFT  )                        |(MCBSP_SPCR_DLB_OFF         << _MCBSP_SPCR_DLB_SHIFT     )                       //|( MCBSP_SPCR_XRST_1         << _MCBSP_SPCR_XRST_SHIFT    )                       //|( MCBSP_SPCR_RINTM_FRM      << _MCBSP_SPCR_RINTM_SHIFT   )                          );  //接收控制寄存器                      MyMcbspConfig.rcr = (Uint32)                        ((MCBSP_RCR_RPHASE_SINGLE    << _MCBSP_RCR_RPHASE_SHIFT   )                        |(MCBSP_RCR_RCOMPAND_DEFAULT << _MCBSP_RCR_RCOMPAND_SHIFT )//MSB                        |(MCBSP_RCR_RFIG_YES         << _MCBSP_RCR_RFIG_SHIFT     )                        |(MCBSP_RCR_RDATDLY_0BIT     << _MCBSP_RCR_RDATDLY_SHIFT  )                        |(MCBSP_RCR_RWDLEN1_8BIT    << _MCBSP_RCR_RWDLEN1_SHIFT  )//8BIT                        |(MCBSP_RCR_RFRLEN1_DEFAULT  << _MCBSP_RCR_RFRLEN1_SHIFT  )                        );  //发送控制寄存器                                           MyMcbspConfig.xcr = (Uint32)                        ((MCBSP_XCR_XPHASE_SINGLE    << _MCBSP_XCR_XPHASE_SHIFT   )                        |(MCBSP_XCR_XCOMPAND_DEFAULT << _MCBSP_XCR_XCOMPAND_SHIFT )//MSB        //|(MCBSP_XCR_XCOMPAND_8BITLSB << _MCBSP_XCR_XCOMPAND_SHIFT )//lSB                        |(MCBSP_XCR_XFIG_YES         << _MCBSP_XCR_XFIG_SHIFT     )                        |(MCBSP_XCR_XDATDLY_0BIT     << _MCBSP_XCR_XDATDLY_SHIFT  )                        |(MCBSP_XCR_XWDLEN1_8BIT    << _MCBSP_XCR_XWDLEN1_SHIFT  )//8BIT                        |(MCBSP_XCR_XFRLEN1_DEFAULT  << _MCBSP_XCR_XFRLEN1_SHIFT  )                        );  //采样率产生寄存器                      MyMcbspConfig.srgr= (Uint32)                        ((MCBSP_SRGR_CLKSM_INTERNAL  << _MCBSP_SRGR_CLKSM_SHIFT   )                        |(MCBSP_SRGR_FSGM_DXR2XSR    << _MCBSP_SRGR_FSGM_SHIFT    )          //|(MCBSP_SRGR_FSGM_FSG    << _MCBSP_SRGR_FSGM_SHIFT    )//ERROR                        |(MCBSP_SRGR_CLKGDV_OF(0)   << _MCBSP_SRGR_CLKGDV_SHIFT  )//20M                        );  //引脚控制   MyMcbspConfig.pcr = (Uint32)                        ((MCBSP_PCR_XIOEN_SP         << _MCBSP_PCR_XIOEN_SHIFT    )                        |(MCBSP_PCR_RIOEN_SP         << _MCBSP_PCR_RIOEN_SHIFT    )                        |(MCBSP_PCR_FSXM_EXTERNAL    << _MCBSP_PCR_FSXM_SHIFT     )                        |(MCBSP_PCR_FSRM_EXTERNAL    << _MCBSP_PCR_FSRM_SHIFT     )                        |(MCBSP_PCR_CLKXM_INPUT      << _MCBSP_PCR_CLKXM_SHIFT    )//slave                        |(MCBSP_PCR_CLKRM_INPUT      << _MCBSP_PCR_CLKRM_SHIFT    )//slave                        |(MCBSP_PCR_FSXP_ACTIVELOW   << _MCBSP_PCR_FSXP_SHIFT     )                        |(MCBSP_PCR_FSRP_ACTIVELOW   << _MCBSP_PCR_FSRP_SHIFT     )                        //|(MCBSP_PCR_CLKXP_RISING     << _MCBSP_PCR_CLKXP_SHIFT  )                        |(MCBSP_PCR_CLKXP_FALLING    << _MCBSP_PCR_CLKXP_SHIFT    )                        |(MCBSP_PCR_CLKRP_FALLING    << _MCBSP_PCR_CLKRP_SHIFT    )                        );                          MCBSP_config(*hMcbsp_ch0, &MyMcbspConfig); } /* end config_mcbsp */

是否在slave模式下不能中断接收呢,请指点,谢谢!


Viewing all articles
Browse latest Browse all 21822

Trending Articles