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