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