我的SPIA的源代码如下: #include "DSP28_Device.h"
extern Uint16 volatile test_word; extern Uint08 volatile test_byte;
interrupt void SPIARXINT_ISR(void) //SPI接收中断 { #if(SPIA) { EINT; PieCtrl.PIEACK.bit.ACK6 = 1; if(SpiaRegs.SPISTS.bit.OVERRUN_FLAG) { SpiaRegs.SPISTS.bit.OVERRUN_FLAG=1; //清除接收器溢出标志位 } test_byte=(Uint08)(SpiaRegs.SPIRXBUF>>8); } #endif }
interrupt void SPIATXINT_ISR(void) //SPI发送中断 { #if(SPIA) { EINT; PieCtrl.PIEACK.bit.ACK6 = 1; if(!SpiaRegs.SPISTS.bit.BUFFULL_FLAG) //如果发送缓冲器SPITXBUF没有数据 { SpiaRegs.SPITXBUF=0x55; } } #endif }
void SpiASend(Uint08 dlen,Uint08 *point) { #if(SPIA) { if(!SpiaRegs.SPISTS.bit.BUFFULL_FLAG) //如果发送缓冲器SPITXBUF没有数据 { SpiaRegs.SPITXBUF=0x55; } } #endif }
void InitSpiA(void) { #if(SPIA) { Uint32 temp; Uint16 baud; EALLOW; GpioMuxRegs.GPFMUX.all |=0x000F; //设置GPIO F0、F1、F2、F3引脚为外设I/O功能 EDIS; SpiaRegs.SPICCR.all=0x0007; SpiaRegs.SPICTL.all=0x0007; SpiaRegs.SPIBRR =0x003D; //500K速率 SpiaRegs.SPICCR.all=0x0097;
EALLOW; PieVectTable.SPIRXINTA =&SPIARXINT_ISR; PieVectTable.SPITXINTA =&SPIATXINT_ISR; EDIS;
PieCtrl.PIEIER6.bit.INTx1 =1;//允许SPIA接收中断 IER |=M_INT6; PieCtrl.PIEIER6.bit.INTx2 =1;//允许SPIA发送中断 } #endif } 我的问题是这样的: 无论怎么弄,就是不能进入发送中断,数据是发送出去了,从引脚上能够看到发送的波形,并且能够在接收中断内正确接收发送的数据(奇怪的是:无论SPICCR.4是什么状态都能够接收到发送的数据),请大虾们指点,万分感谢! |