TI中文支持网
TI专业的中文技术问题搜集分享网站

关于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));

VV:

#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循环是执行了,但是实际只有第一次发出去了,后面的只是做了一个拷贝而已。

赞(0)
未经允许不得转载:TI中文支持网 » 关于CC2530串口发送数据单步调试输出正常,全速只打印一个字符的疑问
分享到: 更多 (0)