|
先前发在 这里http://www.amobbs.com/thread-5573477-1-1.html
#define SEI_TX UCSRB|=(1<<TXEN)|(1<<TXCIE)|(1<<UDRIE)//
#define CLI_TX UCSRB&=~((1<<TXEN)|(1<<UDRIE)|(1<<TXCIE))//
u8 WriteDataToTxdBuff(u8 *Data,u8 Datalengt)
{
if((MY_UartTxdBuff.UartDataHead==MY_UartTxdBuff.UartDataTail)&&(MY_UartTxdBuff.UartDataCounter==UartTxdBuffSize))
return 1;//缓冲区数据满返回1退出
if(Datalengt>(UartTxdBuffSize-MY_UartTxdBuff.UartDataCounter))
return 1;//要接收的数据宽度不够
while(Datalengt--)
{
MY_UartTxdBuff.UartTxdBuf[MY_UartTxdBuff.UartDataHead++]=*Data++;
MY_UartTxdBuff.UartDataCounter++;
}
if(MY_UartTxdBuff.UartDataHead>=UartTxdBuffSize)
{
MY_UartTxdBuff.UartDataHead=0;
}
SEI_TX;
return 0;
}
ISR(USART_UDRE_vect)
{
if((MY_UartTxdBuff.UartDataHead==MY_UartTxdBuff.UartDataTail)&&(MY_UartTxdBuff.UartDataCounter==0))
{ CLI_TX;
return;}//缓冲区数据空,可能性很少
UDR=MY_UartTxdBuff.UartTxdBuf[MY_UartTxdBuff.UartDataTail++];
MY_UartTxdBuff.UartDataCounter--;
if(MY_UartTxdBuff.UartDataTail>=UartTxdBuffSize)//
{MY_UartTxdBuff.UartDataTail=0;
}
else
SEI_TX;
}
ISR(USART_TXC_vect)
{
// CLI_TX;
}
while(1)
{
delay_ms(100);
WriteDataToTxdBuff(a,3);
delay_ms(100)
}
现在现象是 刚开机时发时时间和间隔都很正常,当发送200左右之后 发送的速度就很快 完全没有时间间隔,全速发送数据都是a数组里面的数据 !
家里面有一本你的书 回去看看有没关于中断发送的
我看龙芯里面的例程 改了一下 也不行 连发都发不出去 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|