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

📄 serial.h

📁 TMS320VC33的应用程序 、TMS320VC33的应用程序
💻 H
字号:
/********************************************************************************/
/* serial.h	v1.00																*/
/* 版权(c)	2003-   	北京合众达电子技术有限责任公司							*/
/* 设计者:	刘宁																*/
/********************************************************************************/
/******************************************************************************/
/*  serial.h - serial port routines header file.                                 */
/*                                                                            */
/*     This module provides the implementation for the serial ports                  */
/*     on the TMS320vc33 DSP.                                                 */

/******************************************************************************/
                                                                 
/******************************************************************/
/* This header file  defines the data structures and macros to    */
/* necessary to address the Serial Port             */
/******************************************************************/
#ifndef _serial
#define _serial

#ifndef gcontrol
#define gcontrol            _gctrl._intval
#endif

#ifndef gcontrol_bit
#define gcontrol_bit        _gctrl._bitval
#endif

#define s_x_control       _xctrl._intval
#define s_x_control_bit   _xctrl._bitval
#define s_r_control       _rctrl._intval
#define s_r_control_bit   _rctrl._bitval
#define s_rxt_control     _rxtctrl._intval
#define s_rxt_control_bit _rxtctrl._bitval
#define s_rxt_counter     _rxtcounter._intval
#define s_rxt_counter_bit _rxtcounter._bitval
#define s_rxt_period      _rxtperiod._intval
#define s_rxt_period_bit  _rxtperiod._bitval


/**************************************************************************/
/* MACRO DEFINITIONS FOR SERIAL PORT BASE ADDRESS                         */
/**************************************************************************/
#define SERIAL_PORT_ZERO    0
#define SERIAL_PORT_ONE     1
#define SERIAL_PORT_BASE    0x808040
#define SERIAL_PORT_SIZE    16
#define SERIAL_PORT_ADDR(n) ((volatile SERIAL_PORT_REG *) ((char *) \
                            SERIAL_PORT_BASE + (n)*SERIAL_PORT_SIZE))

/**************************************************************************/
/* STRUCTURE DEFINTION FOR SERIAL PORT GLOBAL CONTROL REGISTER            */
/**************************************************************************/
typedef union
{
    unsigned int _intval;
    struct
    {
         unsigned int rrdy     :1;                  /* Receive ready flag */
         unsigned int xrdy     :1;                /* Transmitt ready flag */
         unsigned int fsxout   :1;                   /* FSX configuration */
         unsigned int xsrempty :1;              /* Transm shift reg empty */
         unsigned int rsrfull  :1;              /* Receive registers full */
         unsigned int hs       :1;             /* Handshaking mode enable */
         unsigned int xclksrce :1;                 /* Transm clock source */
         unsigned int rclksrce :1;                /* Receive clock source */
         unsigned int xvaren   :1;          /* Transm data rate signaling */
         unsigned int rvaren   :1;          /* Receiv data rate signaling */
         unsigned int xfsm     :1;              /* Transm frame sync mode */
         unsigned int rfsm     :1;              /* Receiv frame sync mode */
         unsigned int clkxp    :1;               /* Transm clock polarity */
         unsigned int clkrp    :1;               /* Receiv clock polarity */
         unsigned int dxp      :1;                /* Transm data polarity */
         unsigned int drp      :1;                /* Receiv data priority */
         unsigned int fsxp     :1;          /* Transm frame sync polarity */
         unsigned int fsrp     :1;          /* Receiv frame sync polarity */
         unsigned int xlen     :2;             /* Transm data word length */
         unsigned int rlen     :2;             /* Receiv data word length */
         unsigned int xtint    :1;       /* Transm timer interrupt enable */
         unsigned int xint     :1;             /* Transm interrupt enable */
         unsigned int rtint    :1;       /* Receiv timer interrupt enable */
         unsigned int rint     :1;             /* Receiv interrupt enable */
         unsigned int xreset   :1;                        /* Transm reset */
         unsigned int rreset   :1;                        /* Receiv reset */
         unsigned int r_rest   :4;                            /* reserved */
    } _bitval;
} SERIAL_PORT_CONTROL;

/**************************************************************************/
/* STRUCTURE DEFINTION FOR SERIAL PORT RECEIVE/TRANSMIT PORT CONTROL      */
/* REGISTER                                                               */
/**************************************************************************/
typedef union
{
    unsigned int _intval;
    struct
    {
         unsigned int clkfunc  :1;              /* Clock function control */
         unsigned int clki_o   :1;                   /* Clock i/o control */
         unsigned int clkdato  :1;                /* Data output on clock */
         unsigned int clkdati  :1;                 /* Data input on clock */
         unsigned int dfunc    :1;               /* Data function control */
         unsigned int di_o     :1;                    /* Data i/o control */
         unsigned int ddatout  :1;                 /* Data output on data */
         unsigned int ddatin   :1;                  /* Data input on data */
         unsigned int fsfunc   :1;         /* Frame sync function control */
         unsigned int fsi_o    :1;              /* Frame sync i/o control */
         unsigned int fsdatout :1;           /* Data output on frame sync */
         unsigned int fsdatin  :1;            /* Data input on frame sync */
         unsigned int r_rest   :20;                           /* reserved */
    } _bitval;
} RX_PORT_CONTROL;

/**************************************************************************/
/* STRUCTURE DEFINTION FOR SERIAL PORT RECEIVE/TRANSMIT TIMER CONTROL     */
/* REGISTER                                                               */
/**************************************************************************/
typedef union
{
    unsigned int _intval;
    struct
    {
         unsigned int xgo      :1;      /* Reset and start transmit timer */
         unsigned int xhld_    :1;                   /* Transm timer hold */
         unsigned int xcp_     :1;                   /* Transm clock mode */
         unsigned int xclksrc  :1;                 /* Transm clock source */
         unsigned int r_4      :1;                            /* reserved */
         unsigned int xtstat   :1;                 /* Transmit timer stat */
         unsigned int rgo      :1;       /* Reset and start receive timer */
         unsigned int rhld_    :1;                  /* Receive timer hold */
         unsigned int rcp_     :1;                  /* Receive clock mode */
         unsigned int rclksrc  :1;                /* Receive clock source */
         unsigned int r_10     :1;                            /* reserved */
         unsigned int rtstat   :1;                  /* Receive timer stat */
         unsigned int r_rest   :20;                           /* reserved */
    } _bitval;
} RX_TIMER_CONTROL;

/**************************************************************************/
/* STRUCTURE DEFINTION FOR SERIAL PORT RECEIVE/TRANSMIT TIMER COUNTER     */
/* REGISTER                                                               */
/**************************************************************************/
typedef union
{
    unsigned int _intval;
    struct
    {
         unsigned int x_counter:16;             /* Transmit timer counter */
         unsigned int r_counter:16;              /* Receive timer counter */
    } _bitval;
} RX_TIMER_COUNTER;

/**************************************************************************/
/* STRUCTURE DEFINTION FOR SERIAL PORT RECEIVE/TRANSMIT TIMER PERIOD      */
/* REGISTER                                                               */
/**************************************************************************/
typedef union
{
    unsigned int _intval;
    struct
    {
         unsigned int x_period :16;              /* Transmit timer period */
         unsigned int r_period :16;               /* Receive timer period */
    } _bitval;
} RX_TIMER_PERIOD;

/**************************************************************************/
/* STRUCTURE DEFINITION FOR SERIAL PORT REGISTERS                         */
/**************************************************************************/
typedef struct
{
    SERIAL_PORT_CONTROL _gctrl;             /* Serial port global control */
    unsigned int        reserved1;                            /* reserved */
    RX_PORT_CONTROL     _xctrl;                    /* Transm port control */
    RX_PORT_CONTROL     _rctrl;                  /* Receive port control */
    RX_TIMER_CONTROL    _rxtctrl;      /* Receive/transmit timer control */
    RX_TIMER_COUNTER    _rxtcounter;   /* Receive/transmit timer counter */
    RX_TIMER_PERIOD     _rxtperiod;     /* Receive/transmit timer period */
    unsigned int        reserved2;                           /* reserved */
    unsigned int        x_data;             /* Serial port transmit data */
    unsigned int        reserved3[3];                        /* reserved */
    unsigned int        r_data;              /* Serial port receive data */
    unsigned int        reserved4[3];                        /* reserved */
} SERIAL_PORT_REG;

/**************************************************************************/
/* SERIAL PORT MACROS FOR BIT FIELD DEFINITIONS                           */
/**************************************************************************/
/* Serial port macros for global control register integer assignments     */
/* e.g. SERIAL_PORT_ADDR(0)->gcontrol = XVAREN | DXP | XLEN_16 set the    */
/* corresponding bits of serial port 0's global control register          */
/**************************************************************************/
#define RRDY		0x1
#define XRDY		0x2
#define FSXOUT		0x4
#define XSREMPTY	0x8
#define RSRFULL 	0x10
#define HS	    	0x20
#define XCLKSRCE	0x40
#define RCLKSRCE	0x80
#define XVAREN		0x100
#define RVAREN		0x200
#define XFSM		0x400
#define RFSM		0x800
#define CLKXP		0x1000
#define CLKRP		0x2000
#define DXP		    0x4000
#define DRP		    0x8000
#define FSXP		0x10000
#define FSRP		0x20000
#define XLEN_8		0x00000
#define XLEN_16 	0x40000
#define XLEN_24 	0x80000
#define XLEN_32 	0xC0000
#define RLEN_8		0x000000
#define RLEN_16 	0x100000
#define RLEN_24 	0x200000
#define RLEN_32 	0x300000
#define XTINT		0x400000
#define XINT		0x800000
#define RTINT		0x1000000
#define RINT		0x2000000
#define XRESET		0x4000000
#define RRESET		0x8000000

#define INPUT_PIN       0
#define OUTPUT_PIN      1
#define DISABLED        0
#define ENABLED         1
#define EXTERNAL        0
#define INTERNAL        1
#define FIXED           0
#define VARIABLE        1
#define CONTINUOUS      1
#define STANDARD        0
#define ACTIVE_HIGH     0
#define ACTIVE_LOW      1
#define EIGHT_BITS      0
#define SIXTEEN_BITS    1
#define TWENTY_FOUR_BITS 2
#define THIRTY_TWO_BITS 3
#define RESET           0
#define UN_RESET        1

/**************************************************************************/
/* Serial port macros for fsx/dx/clkx control register integer            */
/* assignments, e.g. SERIAL_PORT_ADDR(0)->s_x_control = CLKXFUNC | DXFUNC */
/* sets the corresponding bits of serial port 0's fsx/dx/clkx control     */
/* register                                                               */
/**************************************************************************/
#define CLKXFUNC	0x1
#define CLKXI_O 	0x2
#define CLKXDATOUT	0x4
#define CLKXDATIN	0x8
#define DXFUNC		0x10
#define DXI_O		0x20
#define DXDATOUT	0x40
#define DXDATIN 	0x80
#define FSXFUNC 	0x100
#define FSXI_O		0x200
#define FSXDATOUT	0x400
#define FSXDATIN	0x800

/**************************************************************************/
/* Serial port macros for fsr/dr/clkr control register integer            */
/* assignments, e.g. SERIAL_PORT_ADDR(0)->s_r_control = CLKRFUNC | DRFUNC */
/* sets the corresponding bits of serial port 0's fsr/dr/clkr control     */
/* register                                                               */
/**************************************************************************/
#define CLKRFUNC	0x1
#define CLKRI_O 	0x2
#define CLKRDATOUT	0x4
#define CLKRDATIN	0x8
#define DRFUNC		0x10
#define DRI_O		0x20
#define DRDATOUT	0x40
#define DRDATIN 	0x80
#define FSRFUNC 	0x100
#define FSRI_O		0x200
#define FSRDATOUT	0x400
#define FSRDATIN	0x800

#define GENERAL_PURPOSE_IO 0
#define SERIAL_PORT_PIN 1

/**************************************************************************/
/* Serial port macros for receive/transmit timer control register integer */
/* assignments, e.g. SERIAL_PORT_ADDR(0)->s_rxt_control = XGO | RGO       */
/* sets the corresponding bits of serial port 0's receive/transmit control*/
/* register                                                               */
/**************************************************************************/
#define XGO	    	0x1
#define XHLD_		0x2
#define XCP_		0x4
#define XCLKSRC 	0x8
#define XTSTAT		0x20
#define RGO		    0x40
#define RHLD_		0x80
#define RCP_		0x100
#define RCLKSRC 	0x200
#define RSTAT		0x800

#endif /* #ifndef _serial */



  

⌨️ 快捷键说明

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