打印

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

[复制链接]
2852|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzzly|  楼主 | 2009-4-25 13:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
spi, IAR, TE, ST, ui
我的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是什么状态都能够接收到发送的数据),请大虾们指点,万分感谢!

相关帖子

沙发
li173644236| | 2011-9-9 18:49 | 只看该作者
请问楼主这是自测模式吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

1173

帖子

3

粉丝