微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 关于CC2530串口发送数据单步调试输出正常,全速只打印一个字符的疑问

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

时间:10-02 整理:3721RD 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top