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

📄 serial.h

📁 ecos为实时嵌入式操作系统
💻 H
字号:
#ifndef CYGONCE_SERIAL_H#define CYGONCE_SERIAL_H// ====================================================================////      serial.h////      Device I/O //// ====================================================================//####COPYRIGHTBEGIN####//// -------------------------------------------// The contents of this file are subject to the Cygnus eCos Public License// Version 1.0 (the "License"); you may not use this file except in// compliance with the License.  You may obtain a copy of the License at// http://sourceware.cygnus.com/ecos// // Software distributed under the License is distributed on an "AS IS"// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the// License for the specific language governing rights and limitations under// the License.// // The Original Code is eCos - Embedded Cygnus Operating System, released// September 30, 1998.// // The Initial Developer of the Original Code is Cygnus.  Portions created// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.// -------------------------------------------////####COPYRIGHTEND####// ====================================================================//#####DESCRIPTIONBEGIN####//// Author(s):   gthomas// Contributors:        gthomas// Date:        1999-02-04// Purpose:     Internal interfaces for serial I/O drivers// Description:////####DESCRIPTIONEND####//// ====================================================================// Serial I/O interfaces#include <pkgconf/system.h>#include <cyg/infra/cyg_type.h>#include <cyg/io/io.h>#include <cyg/io/serialio.h>#include <cyg/hal/drv_api.h>typedef struct serial_channel serial_channel;typedef struct serial_funs serial_funs;// Pointers into upper-level driver which interrupt handlers needtypedef struct {    // Initialize the channel    void (*serial_init)(serial_channel *chan);    // Cause an additional character to be output if one is available    void (*xmt_char)(serial_channel *chan);    // Consume an input character    void (*rcv_char)(serial_channel *chan, unsigned char c);} serial_callbacks_t;#define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char)  \serial_callbacks_t _l = {                               \    _init,                                              \    _xmt_char,                                          \    _rcv_char                                           \};extern serial_callbacks_t serial_callbacks;typedef struct {    unsigned char           *data;    volatile int             put;    volatile int             get;    int                      len;    int                      low_water;   // Min space in buffer before restart    cyg_drv_cond_t           wait;    cyg_drv_mutex_t          lock;    bool                     waiting;    bool                     abort;       // Set by an outsider to kill processing    volatile cyg_int32       pending;     // This many bytes waiting to be sent} cbuf_t;#define CBUF_INIT(_data, _len) \   {_data, 0, 0, _len}// Private data which describes this channelstruct serial_channel {    serial_funs        *funs;    serial_callbacks_t *callbacks;    void               *dev_priv;  // Whatever is needed by actual device routines    cyg_serial_info_t   config;    // Current configuration    bool                init;    cbuf_t              out_cbuf;    cbuf_t              in_cbuf;};// Initialization macro for serial channel#define SERIAL_CHANNEL(_l,                                              \                       _funs,                                           \                       _dev_priv,                                       \                       _baud, _stop, _parity, _word_length, _flags)     \serial_channel _l = {                                                   \    &_funs,                                                             \    &serial_callbacks,                                                  \    &(_dev_priv),                                                       \    CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags),  \};#define SERIAL_CHANNEL_USING_INTERRUPTS(_l,                             \                       _funs,                                           \                       _dev_priv,                                       \                       _baud, _stop, _parity, _word_length, _flags,     \                       _out_buf, _out_buflen,                           \                       _in_buf, _in_buflen)                             \serial_channel _l = {                                                   \    &_funs,                                                             \    &serial_callbacks,                                                  \    &(_dev_priv),                                                       \    CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags),  \    false,                                                              \    CBUF_INIT(_out_buf, _out_buflen),                                   \    CBUF_INIT(_in_buf, _in_buflen)                                      \};// Low level interface functionsstruct serial_funs {    // Send one character to the output device, return true if consumed    bool (*putc)(serial_channel *priv, unsigned char c);    // Fetch one character from the device    unsigned char (*getc)(serial_channel *priv);        // Change hardware configuration (baud rate, etc)    bool (*set_config)(serial_channel *priv, cyg_serial_info_t *config);    // Enable the transmit channel and turn on transmit interrupts    void (*start_xmit)(serial_channel *priv);    // Disable the transmit channel and turn transmit interrupts off    void (*stop_xmit)(serial_channel *priv);};#define SERIAL_FUNS(_l,_putc,_getc,_set_config,_start_xmit,_stop_xmit)  \serial_funs _l = {                                                      \  _putc,                                                                \  _getc,                                                                \  _set_config,                                                          \  _start_xmit,                                                          \  _stop_xmit                                                            \};extern cyg_devio_table_t serial_devio;#endif // CYGONCE_SERIAL_H

⌨️ 快捷键说明

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