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

📄 serial.h

📁 這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU
💻 H
字号:
/************************************************************************************ * serial.h * *   Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. *   Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. Neither the name NuttX nor the names of its contributors may be *    used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ************************************************************************************/#ifndef __SERIAL_H#define __SERIAL_H/************************************************************************************ * Included Files ************************************************************************************/#include <nuttx/config.h>#include <sys/types.h>#include <semaphore.h>#include <nuttx/fs.h>/************************************************************************************ * Definitions ************************************************************************************/#define uart_setup(dev)          dev->ops->setup(dev)#define uart_shutdown(dev)       dev->ops->shutdown(dev)#define uart_attach(dev)         dev->ops->attach(dev)#define uart_detach(dev)         dev->ops->detach(dev)#define uart_enabletxint(dev)    dev->ops->txint(dev, TRUE)#define uart_disabletxint(dev)   dev->ops->txint(dev, FALSE)#define uart_enablerxint(dev)    dev->ops->rxint(dev, TRUE)#define uart_disablerxint(dev)   dev->ops->rxint(dev, FALSE)#define uart_rxavailable(dev)    dev->ops->rxavailable(dev)#define uart_txready(dev)        dev->ops->txready(dev)#define uart_txempty(dev)        dev->ops->txempty(dev)#define uart_send(dev,ch)        dev->ops->send(dev,ch)#define uart_receive(dev,s)      dev->ops->receive(dev,s)/************************************************************************************ * Private Types ************************************************************************************//* This structure defines one serial I/O buffer.  The serial infrastructure will * initialize the 'sem' field but all other fields must be initialized by the * caller of uart_register(). */struct uart_buffer_s{  sem_t     sem;    /* Used to control exclusive access to the buffer */  sint16    head;   /* Index to the head [IN] index in the buffer */  sint16    tail;   /* Index to the tail [OUT] index in the buffer */  sint16    size;   /* The allocated size of the buffer */  FAR char *buffer; /* Pointer to the allocated buffer memory */};/* This structure defines all of the operations providd by the architecture specific * logic.  All fields must be provided with non-NULL function pointers by the * caller of uart_register(). */struct uart_dev_s;struct uart_ops_s{  /* Configure the UART baud, bits, parity, fifos, etc. This method is called   * the first time that the serial port is opened.  For the serial console,   * this will occur very early in initialization; for other serial ports this   * will occur when the port is first opened.  This setup does not include   * attaching or enabling interrupts.  That portion of the UART setup is   * performed when the attach() method is called.   */  CODE int (*setup)(FAR struct uart_dev_s *dev);  /* Disable the UART.  This method is called when the serial port is closed.   * This method reverses the operation the setup method.  NOTE that the serial   * console is never shutdown.   */  CODE void (*shutdown)(FAR struct uart_dev_s *dev);  /* Configure the UART to operation in interrupt driven mode.  This method is   * called when the serial port is opened.  Normally, this is just after the   * the setup() method is called, however, the serial console may operate in   * a non-interrupt driven mode during the boot phase.   *   * RX and TX interrupts are not enabled when by the attach method (unless the   * hardware supports multiple levels of interrupt enabling).  The RX and TX   * interrupts are not enabled until the txint() and rxint() methods are called.   */  CODE int (*attach)(FAR struct uart_dev_s *dev);  /* Detach UART interrupts.  This method is called when the serial port is   * closed normally just before the shutdown method is called.  The exception is   * the serial console which is never shutdown.   */  CODE void (*detach)(FAR struct uart_dev_s *dev);  /* All ioctl calls will be routed through this method */  CODE int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg);  /* Called (usually) from the interrupt level to receive one character from   * the UART.  Error bits associated with the receipt are provided in the   * the return 'status'.   */  CODE int (*receive)(FAR struct uart_dev_s *dev, unsigned int *status);  /* Call to enable or disable RX interrupts */  CODE void (*rxint)(FAR struct uart_dev_s *dev, boolean enable);  /* Return TRUE if the receive data is available */  CODE boolean (*rxavailable)(FAR struct uart_dev_s *dev);  /* This method will send one byte on the UART */  CODE void (*send)(FAR struct uart_dev_s *dev, int ch);  /* Call to enable or disable TX interrupts */  CODE void (*txint)(FAR struct uart_dev_s *dev, boolean enable);  /* Return TRUE if the tranmsit hardware is ready to send another byte.  This   * is used to determine if send() method can be called.   */  CODE boolean (*txready)(FAR struct uart_dev_s *dev);  /* Return TRUE if all characters have been sent.  If for example, the UART   * hardware implements FIFOs, then this would mean the the transmit FIFO is   * empty.  This method is called when the driver needs to make sure that   * all characters are "drained" from the TX hardware.   */  CODE boolean (*txempty)(FAR struct uart_dev_s *dev);};/* This is the device structure used by the driver.  The caller of * uart_register() must allocate and initialize this structure.  The * calling logic need only set all fields to zero except: * *   'isconsole', 'xmit.buffer', 'rcv.buffer', the elements *   of 'ops', and 'private' * * The common logic will initialize all semaphores. */struct uart_dev_s{  ubyte     open_count;			/* The number of times					 * the device has been opened */  boolean   xmitwaiting;		/* TRUE: User is waiting					 * for space in xmit.buffer */  boolean   recvwaiting;		/* TRUE: User is waiting					 * for space in recv.buffer */  boolean   isconsole;			/* TRUE: This is the serial console */  sem_t     closesem;			/* Locks out new opens while					 * close is in progress */  sem_t     xmitsem;			/* Used to wakeup user waiting					 * for space in xmit.buffer */  sem_t     recvsem;			/* Used to wakeup user waiting					 * for sapce in recv.buffer */  struct uart_buffer_s xmit;		/* Describes transmit buffer */  struct uart_buffer_s recv;		/* Describes receive buffer */  FAR const struct uart_ops_s *ops;	/* Arch-specific operations */  FAR void *priv;			/* Used by the arch-specific logic */};typedef struct uart_dev_s uart_dev_t;/************************************************************************************ * Public Data ************************************************************************************//************************************************************************************ * Public Functions ************************************************************************************/#undef EXTERN#if defined(__cplusplus)#define EXTERN extern "C"extern "C" {#else#define EXTERN extern#endif/************************************************************************************ * Name: uart_register * * Description: *   Register serial console and serial ports. * ************************************************************************************/EXTERN int uart_register(FAR const char *path, FAR uart_dev_t *dev);/************************************************************************************ * Name: uart_xmitchars * * Description: *   This function is called from the UART interrupt handler when an interrupt *   is received indicating that there is more space in the transmit FIFO.  This *   function will send characters from the tail of the xmit buffer while the driver *   write() logic adds data to the head of the xmit buffer. * ************************************************************************************/EXTERN void uart_xmitchars(FAR uart_dev_t *dev);/************************************************************************************ * Name: uart_receivechars * * Description: *   This function is called from the UART interrupt handler when an interrupt *   is received indicating that are bytes available to be received.  This *   function will add chars to head of receive buffer.  Driver read() logic will take *   characters from the tail of the buffer. * ************************************************************************************/EXTERN void uart_recvchars(FAR uart_dev_t *dev);#undef EXTERN#if defined(__cplusplus)}#endif#endif /* __SERIAL_H */

⌨️ 快捷键说明

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