|
发表于 2013-4-12 10:11:33
|
显示全部楼层
unsigned char USART3WriteDataToBuffer(unsigned char *buffer,unsigned char count)
{
unsigned char i=count;
u8 num;
u8 err;
/*´Ë´¦¿ÉÒÔ¼ÓÈëÐźŵƻòÕ߹رÕÖжÏ*/
if(count==0)return 0;
USART3StopSendISR();
/*¼ÆËã·ÅÈëcount¸öÊý¾ÝÐèÒª¶àÉÙ¸öÄÚ´æ¿é*/
if(count%USART3_SEND_MAX_Q)num=count/USART3_SEND_MAX_Q+1;
else num=count/USART3_SEND_MAX_Q;
/*ÐèÒªnum¸öÊý¾Ý¿é*/
/*Èç¹ûÄÚ´æ²»×㣬ֱ½Ó·µ»Ø*/
if(USART3SendQFree<num){USART3StartSendISR();return ERR_NO_SPACE;}
//Ê×ÏÈÉêÇëÄÚ´æ¿é£¬USART3SendQBoxHostÔÚÏÂÒ»¸öÄÚ´æÉêÇëºó²Å¼ÓÒ»
USART3SendTCB[USART3SendQBoxHost].Index=(u8 *)OSMemGet(OSQUSARTIndex,&err);
USART3SendQFree--;
num--;
if(USART3SendQBoxHost>=USART3_SEND_MAX_BOX)USART3SendQBoxHost=0;
count=0;
while(i!='\0')
{
*(USART3SendTCB[USART3SendQBoxHost].Index+count)=*buffer;
count++;
if(count>=USART3_SEND_MAX_Q)
{
USART3SendTCB[USART3SendQBoxHost].Num=USART3_SEND_MAX_Q;
//ÐèÒªÒ»¸öеÄÄÚ´æ¿é´æ·Å½ÓÏÂÀ´µÄÊý¾Ý£¬ËùÒÔ¸üÐÂUSART3SendQBoxHost
if(++USART3SendQBoxHost>=USART3_SEND_MAX_BOX)USART3SendQBoxHost=0;
//ÐèÒªÒ»¸öеÄÄÚ´æ¿é´æ·Å½ÓÏÂÀ´µÄÊý¾Ý
if (num != 0) //´Ë´¦Èç¹û²»¼ÓÕâ¸öÅжϵĻ°£¬ÓÐÖÖÇé¿ö»á³öÏÖ´íÎ󣬼´·¢Ë͵ÄÊý¾Ý¸ÕºÃÊÇ
//Ò»¸ö´æ´¢¿é´óСʱ£¬Èç¹ûûÓÐÕâ¸öÅжÏϵͳÓÐÉêÇëÁËÒ»¿éÄڴ棬µ«Õâ¸öÄڴ沢ûÓб»Ê¹Ó㬵«ÊÇ
//¿ÕÄÚ´æ¼ÆÊýÆ÷ÒѾ¼õÁË1£¬Ï´ÎÔÙ½øÀ´Ê±ÓÖÉêÇëÁËÒ»´Î£¬ÕâÑùʱ¼ä³¤ÁË¿ÕÄÚ´æ¼ÆÊýÆ÷±äΪ0¾Í»á·¢Éú´íÎó¡£
{
USART3SendTCB[USART3SendQBoxHost].Index=(u8 *)OSMemGet(OSQUSARTIndex,&err);
//¿ÕµÄ·¢ËÍÈÎÎñ¿é¼õÒ»
USART3SendQFree--;
}
count=0;
}
buffer++;
i--;
}
//´Ë´¦ÊÇÉÐδÕû¿é´æÍêµÄÊý¾Ý£¬ËüÃÇÒ²Òª´æ·ÅÔÚÒ»¸öеÄÄÚ´æ¿éÀï
if(count!=0)
{
USART3SendTCB[USART3SendQBoxHost].Num=count;
if(++USART3SendQBoxHost>=USART3_SEND_MAX_BOX)USART3SendQBoxHost=0;
}
//Èç¹ûÊǵÚÒ»´Î£¬¾ÍÆô¶¯·¢ËÍ£¬Èç¹ûÊÇÒѾÆô¶¯¾ÍûÓÐÕâ¸ö±ØÒªÁË
if(USART3RunningFlag==0)
{
#if DMA_MODE
USART3DMAConfig(USART3SendTCB[USART3SendQBoxTail].Index,USART3SendTCB[USART3SendQBoxTail].Num);
#else
USART3SendUpdate();
#endif
USART3RunningFlag=1;
}
/*´Ë´¦¿ÉÒÔ¿ªÆôÐźŵƻòÕß´ò¿ªÖжÏ*/
USART3StartSendISR();
return 0x00;
} |
|