向各位大虾请教2812的SPI发送中断的问题。

[复制链接]
 楼主| yzzly 发表于 2009-4-25 13:27 | 显示全部楼层 |阅读模式
spi, IAR, TE, ST, ui
我的SPIA的源代码如下:<br />#include&nbsp;&quot;DSP28_Device.h&quot;<br /><br />extern&nbsp;Uint16&nbsp;volatile&nbsp;test_word;<br />extern&nbsp;Uint08&nbsp;volatile&nbsp;test_byte;<br /><br />interrupt&nbsp;void&nbsp;SPIARXINT_ISR(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SPI接收中断<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;#if(SPIA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EINT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEACK.bit.ACK6&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(SpiaRegs.SPISTS.bit.OVERRUN_FLAG)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPISTS.bit.OVERRUN_FLAG=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除接收器溢出标志位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test_byte=(Uint08)(SpiaRegs.SPIRXBUF&gt&gt8);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;#endif<br />}<br /><br />interrupt&nbsp;void&nbsp;SPIATXINT_ISR(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SPI发送中断<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;#if(SPIA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EINT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEACK.bit.ACK6&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!SpiaRegs.SPISTS.bit.BUFFULL_FLAG)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果发送缓冲器SPITXBUF没有数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPITXBUF=0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;#endif<br />}<br /><br />void&nbsp;SpiASend(Uint08&nbsp;dlen,Uint08&nbsp;*point)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;#if(SPIA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!SpiaRegs.SPISTS.bit.BUFFULL_FLAG)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果发送缓冲器SPITXBUF没有数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPITXBUF=0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;#endif<br />}<br /><br />void&nbsp;InitSpiA(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;#if(SPIA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint16&nbsp;baud;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GpioMuxRegs.GPFMUX.all&nbsp;|=0x000F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置GPIO&nbsp;F0、F1、F2、F3引脚为外设I/O功能<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPICCR.all=0x0007;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPICTL.all=0x0007;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPIBRR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0x003D;&nbsp;//500K速率<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPICCR.all=0x0097;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieVectTable.SPIRXINTA&nbsp;=&SPIARXINT_ISR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieVectTable.SPITXINTA&nbsp;=&SPIATXINT_ISR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEIER6.bit.INTx1&nbsp;=1;//允许SPIA接收中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IER&nbsp;|=M_INT6;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEIER6.bit.INTx2&nbsp;=1;//允许SPIA发送中断<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;#endif&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />我的问题是这样的:<br />无论怎么弄,就是不能进入发送中断,数据是发送出去了,从引脚上能够看到发送的波形,并且能够在接收中断内正确接收发送的数据(奇怪的是:无论SPICCR.4是什么状态都能够接收到发送的数据),请大虾们指点,万分感谢!
li173644236 发表于 2011-9-9 18:49 | 显示全部楼层
请问楼主这是自测模式吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1187

帖子

3

粉丝
快速回复 返回顶部 返回列表