⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 关于zigbee厂家jennic的zigbee通信模块JN5139的一些示例程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************** * * NAME: vUart_SetRxEnable *//*! *\DESCRIPTION  Set receive enabled status. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vUart_SetRxEnable(bool_t bEnable)	/**< Receive interrupt status */{	/* Changing setting ? */	if (bRxEnable != bEnable)	{		/* Set new value */		bRxEnable = bEnable;		/* Update Rx interrupt setting */	    vJPI_UartSetInterrupt(UART, bModemInt, FALSE, TRUE, bRxEnable, E_JPI_UART_FIFO_LEVEL_1);		/* Not using automatic flow control ? */		#if ! UART_AUTOFLOW	    	/* Set RTS manually */	    	vUart_SetRts(bRxEnable);		#endif	}}/**************************************************************************** * * NAME: bUart_GetRxEnable *//*! *\DESCRIPTION  Get receive enabled status. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bUart_GetRxEnable(void){	return bRxEnable;}/**************************************************************************** * * NAME: vUart_SetTxEnable *//*! *\DESCRIPTION  Set transmit enabled status. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vUart_SetTxEnable(bool_t bEnable)	/**< Transmit enabled status */{	/* Changing setting ? */	if (bTxEnable != bEnable)	{		/* Set new value */		bTxEnable = bEnable;	}}/**************************************************************************** * * NAME: bUart_GetTxEnable *//*! *\DESCRIPTION  Get transmit enabled status. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bUart_GetTxEnable(void){	return bTxEnable;}/**************************************************************************** * * NAME: vUart_SetBaudRate *//*! *\DESCRIPTION  Set baud rate for UART. * * Directly using registers. *//* PARAMETERS       Name            RW  Usage * * RETURNS: * ****************************************************************************/PRIVATE void vUart_SetBaudRate(uint32 u32BaudRate)	/**< Baud rate */{    uint8 *pu8Reg;    uint8  u8TempLcr;    uint16 u16Divisor;    uint32 u32Remainder;    /* Put UART into clock divisor setting mode */    pu8Reg    = (uint8 *)(UART_START_ADR + UART_LCR_OFFSET);    u8TempLcr = *pu8Reg;    *pu8Reg   = u8TempLcr | 0x80;    /* Write to divisor registers:       Divisor register = 16MHz / (16 x baud rate) */    u16Divisor = (uint16)(16000000UL / (16UL * u32BaudRate));    /* Correct for rounding errors */    u32Remainder = (uint32)(16000000UL % (16UL * u32BaudRate));    if (u32Remainder >= ((16UL * u32BaudRate) / 2))    {        u16Divisor += 1;    }    pu8Reg  = (uint8 *)UART_START_ADR;    *pu8Reg = (uint8)(u16Divisor & 0xFF);    pu8Reg  = (uint8 *)(UART_START_ADR + UART_DLM_OFFSET);    *pu8Reg = (uint8)(u16Divisor >> 8);    /* Put back into normal mode */    pu8Reg    = (uint8 *)(UART_START_ADR + UART_LCR_OFFSET);    u8TempLcr = *pu8Reg;    *pu8Reg   = u8TempLcr & 0x7F;}/**************************************************************************** * * NAME: vUart_SetRts *//*! *\DESCRIPTION  Set RTS pin. * * Directly using registers. *//* PARAMETERS       Name            RW  Usage * * RETURNS: * ****************************************************************************/PRIVATE void vUart_SetRts(bool_t bEnable)		/**< RTS status */{    uint8 *pu8Reg;    uint8   u8Val;    /* Get offset to Modem Control Register */    pu8Reg    = (uint8 *)(UART_START_ADR + UART_MCR_OFFSET);    /* Get content of MCR */    u8Val = *pu8Reg;    /* Enabling ? */    if (bEnable)    {    	/* Clear bit to set RTS */    	u8Val &= 0xFD;    }    else    {    	/* Set bit to clear RTS */    	u8Val |= 0x02;    }    /* Write new value back to register */    *pu8Reg   = u8Val;}/**************************************************************************** * * NAME: vUart_SetAutoFlow *//*! *\DESCRIPTION  Set automatic flow control. * * Directly using registers. *//* PARAMETERS       Name            RW  Usage * * RETURNS: * ****************************************************************************/PRIVATE void vUart_SetAutoFlow(bool_t bEnable)		/**< Automatic flow control enabled */{    uint8 *pu8Reg;    uint8   u8Val;    /* Get offset to Modem Control Register */    pu8Reg    = (uint8 *)(UART_START_ADR + UART_EFR_OFFSET);    /* Get content of MCR */    u8Val = *pu8Reg;    /* Enabling ? */    if (bEnable)    {    	/* Set automatic flow control */    	u8Val |= 0x10;    }    else    {    	/* Clear automatic flow control */    	u8Val &= 0xEF;    }    /* Write new value back to register */    *pu8Reg   = u8Val;}/**************************************************************************** * * NAME: vUart_HandleUartInterrupt *//*! *\DESCRIPTION  Handles UART interrupt. * * Adds received character to receive serial queue, if available. * * Transmits character from transmit serial queue, if available. * * Reacts to change in CTS status when not using automatic flow control. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PRIVATE void vUart_HandleUartInterrupt(uint32 u32Device, 	 /**< Interrupting device */									   uint32 u32ItemBitmap) /**< Interrupt bitmask */{	uint8 u8LineStatus;	uint8 u8ModemStatus;    if (u32Device == UART_DEVICE)    {    	/* Read line status */    	u8LineStatus = u8JPI_UartReadLineStatus(UART);    	/* Data to receive ? */        if ((u32ItemBitmap & 0x000000FF) == E_JPI_UART_INT_RXDATA)        {			/* Receive character from UART */            vUart_RxCharIsr(u8JPI_UartReadData(UART));        }		#if ! UART_AUTOFLOW			/* Modem status changed ? */			else if (u32ItemBitmap == E_JPI_UART_INT_MODEM)			{				/* Read modem status */				u8ModemStatus = u8JPI_UartReadModemStatus(UART);				/* Has CTS changed ? */				if (u8ModemStatus & E_JPI_UART_MS_DCTS)				{					/* Is CTS bit set meaning CTS has just been cleared ? */					if (u8ModemStatus & 0x10)					{						/* Disable transmit */						vUart_SetTxEnable(FALSE);					}					/* Is CTS bit is clear meaning CTS has just been set ? */					else					{						/* Enable transmit */						vUart_SetTxEnable(TRUE);						/* OK to transmit now - begin transmitting again */						if (u8LineStatus & E_JPI_UART_LS_THRE) vUart_TxCharIsr();					}				}			}		#endif        /* Ready to transmit ? */        else if (u32ItemBitmap == E_JPI_UART_INT_TX)        {           	vUart_TxCharIsr();        }    }}/****************************************************************************//***        END OF FILE                                                   ***//****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -