This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于CC2530串口发送数据单步调试输出正常,全速只打印一个字符的疑问

Other Parts Discussed in Thread: CC2530

我最近在调试CC2530的串口中断发送数据,在单步调试的时候也可以进入发送数据中断函数,串口调试助手接收到的数据也是正常的,但是我的程序全速运行就只能输出一个字,百思不得其解,想请大家帮我指点迷津,谢谢,下面是我的代码

volatile unsigned char *SbufSend;            //发送缓冲区地址           

volatile unsigned char SbufLen;              //发送数据长度

void SendUchar(unsigned char *dataaddr,unsigned char datalen)      //发送数据uchar
{
    SbufLen=datalen;
    SbufSend=dataaddr;
    IEN2 |=0x04;
    U0DBUF = *SbufSend;
}

void SendChar(char *dataaddr,char datalen)                          //发送数据char
{
    SbufLen=(unsigned char)datalen;
    SbufSend=(unsigned char*)dataaddr;
    IEN2 |=0x04;
    U0DBUF = *SbufSend;
}

#pragma vector = UTX0_VECTOR
__interrupt void UART0Tx_ISR(void)
{
    EA=0;
    UTX0IF = 0;
    for(char i=0;i<SbufLen;i++)
    {       
        U0DBUF = *SbufSend;
        SbufSend++;
    }
    IEN2 &=~0x04;
    EA=1;
}

      下面是调用函数

        unsigned char abcd[]={0,1,2,3,4,5,6,7,8,9};
        char ccccc[]="15823465123";

        SendUchar(abcd,sizeof(abcd));
        SendChar(ccccc,sizeof(abcd));

  • #pragma vector = UTX0_VECTOR
    __interrupt void UART0Tx_ISR(void)

        EA=0;
        UTX0IF = 0;
        for(char i=0;i<SbufLen;i++)
        {        
            U0DBUF = *SbufSend;
            SbufSend++;
        }
        IEN2 &=~0x04;
        EA=1;
    }

    进中断的时候,把全局EA关了,发了一个数据后就没不会有产生了吧??所以你的中断里面的for循环是执行了,但是实际只有第一次发出去了,后面的只是做了一个拷贝而已。