?? uart_vfifo.c
字號:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART3,PDN_UART3);
#endif
break;
#endif /*__UART3_SUPPORT__*/
default:
ASSERT(0);
break;
}
}
real_count = DMA_GetVFIFO_Roomleft(ch);
#ifdef VFIFO_DBG
{
kal_char s[50];
sprintf(s,"uart_putbytes,len %d,left %d",Length,real_count);
kal_print(s);
}
#endif
if (real_count >= Length)
{
real_count = Length;
}
else
{
send_Txilm[port] = KAL_TRUE;
DMA_EnableINT(ch);
}
if(ownerid==MOD_TST_READER)
{
for (index = 0; index < real_count; index++)
{
savedMask = SaveAndSetIRQMask();
if(!IS_VFIFO_FULL(ch))
{
DMA_PUSH(ch,*(Buffaddr+index));
}
else
{
real_count=index;
send_Txilm[port] = KAL_TRUE;
DMA_EnableINT(ch);
RestoreIRQMask(savedMask);
break;
}
RestoreIRQMask(savedMask);
}
}
else/*not TST */
{
for (index = 0; index < real_count; index++)
{
DMA_PUSH(ch,*(Buffaddr+index));
}
}
/*invoke THRE interrupt*/
//EnableTxIntr(UART_BaseAddr[port]);
return real_count;
#else /*DRV_DEBUG*/
return Length;
#endif /*DRV_DEBUG*/
}
kal_uint16 U_PutISRBytes_VFIFO(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length, module_type ownerid)
{
kal_uint8 ch = UARTPort[port].Tx_DMA_Ch;
#ifndef DRV_DEBUG
kal_uint16 real_count,index;
EXT_ASSERT( (UARTPort[port].ownerid == ownerid), (kal_uint32) ownerid, (kal_uint32)port, (kal_uint32)UARTPort[port].ownerid);
if(UARTPort[port].EnableTX == KAL_FALSE)
{
return Length;
}
if (UARTPort[port].sleep_on_tx == uart_sleep_on_tx_forbid)
{
switch(port)
{
case uart_port1:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART1,PDN_UART1);
break;
case uart_port2:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART2,PDN_UART2);
break;
#ifdef __UART3_SUPPORT__
case uart_port3:
#if ( (defined(MT6219))||defined(MT6226M)||(defined(MT6228))|| defined(MT6229)|| (defined(MT6226))|| (defined(MT6227)) )
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART3,PDN_UART3);
#endif
break;
#endif /*__UART3_SUPPORT__*/
default:
ASSERT(0);
break;
}
}
real_count = DMA_GetVFIFO_Roomleft(ch);
#ifdef VFIFO_DBG
{
kal_char s[50];
sprintf(s,"uart_putbytes,len %d,left %d",Length,real_count);
kal_print(s);
}
#endif
if (real_count >= Length)
{
real_count = Length;
}
else
{
send_Txilm[port] = KAL_TRUE;
DMA_EnableINT(ch);
}
for (index = 0; index < real_count; index++)
{
DMA_PUSH(ch,*(Buffaddr+index));
}
/*invoke THRE interrupt*/
//EnableTxIntr(UART_BaseAddr[port]);
return real_count;
#else /*DRV_DEBUG*/
return Length;
#endif /*DRV_DEBUG*/
}
kal_uint16 U_SendData_VFIFO(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length,kal_uint8 mode,kal_uint8 escape_char, module_type ownerid)
{
#ifndef DRV_DEBUG
kal_int16 real_count,index;
kal_uint8 data;
kal_uint8 ch = UARTPort[port].Tx_DMA_Ch;
kal_uint32 savedMask;
EXT_ASSERT( (UARTPort[port].ownerid == ownerid), (kal_uint32) ownerid, (kal_uint32)port, (kal_uint32)UARTPort[port].ownerid);
if(UARTPort[port].EnableTX == KAL_FALSE)
{
return Length;
}
if( (stack_query_boot_mode()== FACTORY_BOOT && UARTPort[port].DCB.flowControl==fc_sw)||
(uart_support_autoescape()==KAL_FALSE) )
{
if(mode == 0)
real_count = UART_PutBytes(port, Buffaddr, Length, ownerid);
else
{
if (UARTPort[port].sleep_on_tx == uart_sleep_on_tx_forbid)
{
switch(port)
{
case uart_port1:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART1,PDN_UART1);
break;
case uart_port2:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART2,PDN_UART2);
break;
#ifdef __UART3_SUPPORT__
case uart_port3:
#if ( (defined(MT6219))||defined(MT6226M)||(defined(MT6228))|| defined(MT6229)|| (defined(MT6226))|| (defined(MT6227)) )
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART3,PDN_UART3);
#endif
break;
#endif /*__UART3_SUPPORT__*/
default:
ASSERT(0);
break;
}
}
real_count = DMA_GetVFIFO_Roomleft(ch);
#ifdef VFIFO_DBG
{
char s[50];
sprintf(s,"uart_SendData,len %d,left %d",Length,real_count);
kal_print(s);
}
#endif
if (real_count > Length)
{
real_count = Length;
}
else
{
send_Txilm[port] = KAL_TRUE;
DMA_EnableINT(ch);
}
for (index = 0; index < real_count; index++)
{
data = *(Buffaddr+index);
if (data == UARTPort[port].DCB.xonChar)
{
savedMask = SaveAndSetIRQMask();
if(!IS_VFIFO_FULL(ch))
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x01);
}
else
{
RestoreIRQMask(savedMask);
break;
}
RestoreIRQMask(savedMask);
}
else if (data == UARTPort[port].DCB.xoffChar)
{
savedMask = SaveAndSetIRQMask();
if(!IS_VFIFO_FULL(ch))
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x02);
}
else
{
RestoreIRQMask(savedMask);
break;
}
RestoreIRQMask(savedMask);
}
else if (data == escape_char)
{
savedMask = SaveAndSetIRQMask();
if(!IS_VFIFO_FULL(ch))
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x03);
}
else
{
RestoreIRQMask(savedMask);
break;
}
RestoreIRQMask(savedMask);
}
else
{
savedMask = SaveAndSetIRQMask();
if(!IS_VFIFO_FULL(ch))
{
DMA_PUSH(ch,data);
}
else
{
RestoreIRQMask(savedMask);
break;
}
RestoreIRQMask(savedMask);
}
}
real_count = index;
}
}
else
{
real_count = UART_PutBytes(port, Buffaddr, Length, ownerid);
}
/*invoke THRE interrupt*/
//EnableTxIntr(UART_BaseAddr[port]);
return real_count;
#else
return Length;
#endif
}
kal_uint16 U_SendISRData_VFIFO(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length,kal_uint8 mode,kal_uint8 escape_char, module_type ownerid)
{
#ifndef DRV_DEBUG
kal_int16 real_count,index;
kal_uint8 data;
kal_uint8 ch = UARTPort[port].Tx_DMA_Ch;
EXT_ASSERT( (UARTPort[port].ownerid == ownerid), (kal_uint32) ownerid, (kal_uint32)port, (kal_uint32)UARTPort[port].ownerid);
if(UARTPort[port].EnableTX == KAL_FALSE)
{
return Length;
}
if( (stack_query_boot_mode()== FACTORY_BOOT && UARTPort[port].DCB.flowControl==fc_sw)||
(uart_support_autoescape()==KAL_FALSE) )
{
if(mode == 0)
real_count = UART_PutISRBytes(port, Buffaddr, Length, ownerid);
else
{
if (UARTPort[port].sleep_on_tx == uart_sleep_on_tx_forbid)
{
switch(port)
{
case uart_port1:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART1,PDN_UART1);
break;
case uart_port2:
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART2,PDN_UART2);
break;
#ifdef __UART3_SUPPORT__
case uart_port3:
#if ( (defined(MT6219))||defined(MT6226M)||(defined(MT6228))|| defined(MT6229)|| (defined(MT6226))|| (defined(MT6227)) )
DRVPDN_Disable(DRVPDN_CON1,DRVPDN_CON1_UART3,PDN_UART3);
#endif
break;
#endif /*__UART3_SUPPORT__*/
default:
ASSERT(0);
break;
}
}
real_count = DMA_GetVFIFO_Roomleft(ch);
#ifdef VFIFO_DBG
{
char s[50];
sprintf(s,"uart_SendData,len %d,left %d",Length,real_count);
kal_print(s);
}
#endif
if (real_count > Length)
{
real_count = Length;
}
else
{
send_Txilm[port] = KAL_TRUE;
DMA_EnableINT(ch);
}
for (index = 0; index < real_count; index++)
{
data = *(Buffaddr+index);
if (data == UARTPort[port].DCB.xonChar)
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x01);
}
else if (data == UARTPort[port].DCB.xoffChar)
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x02);
}
else if (data == escape_char)
{
DMA_PUSH(ch,escape_char);
DMA_PUSH(ch,0x03);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -