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