Changeset 0789abef in rtems for c/src/lib/include


Ignore:
Timestamp:
08/04/97 22:17:17 (26 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
19fd334
Parents:
89a32784
Message:

new implementation of mc68681.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/include/motorola/mc68681.h

    r89a32784 r0789abef  
    11/*
    22 * mc68681-duart.h -- Low level support code for the Motorola mc68681
    3  *                   DUART. This one is one the mc68ec0x0 board.
    4  *                   Written by rob@cygnus.com (Rob Savoye)
     3 *                   DUART.
     4 *
     5 *  Originally written by rob@cygnus.com (Rob Savoye) for the libgloss
     6 *    IDP support.
    57 *
    68 *  $Id$
     
    911#ifndef __MC68681_H__
    1012#define __MC68681_H__
    11 #define DUART_ADDR      0xb00003                /* base address of the DUART */
    12 
    13 /*
    14  * mc68681 register offsets
    15  */
    16 #define DUART_MR1A      0x00                    /* Mode Register A */
    17 #define DUART_MR2A      0x00                    /* Mode Register A */
    18 #define DUART_SRA       0x04                    /* Status Register A */
    19 #define DUART_CSRA      0x04                    /* Clock-Select Register A */
    20 #define DUART_CRA       0x08                    /* Command Register A */
    21 #define DUART_RBA       0x0c                    /* Receive Buffer A */
    22 #define DUART_TBA       0x0c                    /* Transmit Buffer A */
    23 #define DUART_IPCR      0x10                    /* Input Port Change Register */
    24 #define DUART_ACR       0x10                    /* Auxiliary Control Register */
    25 #define DUART_ISR       0x14                    /* Interrupt Status Register */
    26 #define DUART_IMR       0x14                    /* Interrupt Mask Register */
    27 #define DUART_CUR       0x18                    /* Counter Mode: current MSB */
    28 #define DUART_CTUR      0x18                    /* Counter/Timer upper reg */
    29 #define DUART_CLR       0x1c                    /* Counter Mode: current LSB */
    30 #define DUART_CTLR      0x1c                    /* Counter/Timer lower reg */
    31 #define DUART_MR1B      0x20                    /* Mode Register B */
    32 #define DUART_MR2B      0x20                    /* Mode Register B */
    33 #define DUART_SRB       0x24                    /* Status Register B */
    34 #define DUART_CSRB      0x24                    /* Clock-Select Register B */
    35 #define DUART_CRB       0x28                    /* Command Register B */
    36 #define DUART_RBB       0x2c                    /* Receive Buffer B */
    37 #define DUART_TBB       0x2c                    /* Transmit Buffer A */
    38 #define DUART_IVR       0x30                    /* Interrupt Vector Register */
    39 #define DUART_IP        0x34                    /* Input Port */
    40 #define DUART_OPCR      0x34                    /* Output Port Configuration Reg. */
    41 #define DUART_STRTCC    0x38                    /* Start-Counter command */
    42 #define DUART_OPRSET    0x38                    /* Output Port Reg, SET bits */
    43 #define DUART_STOPCC    0x3c                    /* Stop-Counter command */
    44 #define DUART_OPRRST    0x3c                    /* Output Port Reg, ReSeT bits */
    45 
    46 /* this is just if you want a copy of the chip's registers */
    47 struct duart_regs {
    48   unsigned char mr1a_reg;                       /* Mode Register A */
    49   unsigned char mr2a_reg;                       /* Mode Register A */
    50   unsigned char sra_reg;                        /* Status Register A */
    51   unsigned char csra_reg;                       /* Clock-Select Register A */
    52   unsigned char cra_reg;                        /* Command Register A */
    53   unsigned char ipcr_reg;                       /* Input Port Change Register */
    54   unsigned char acr_reg;                        /* Auxiliary Control Register */
    55   unsigned char isr_reg;                        /* Interrupt Status Register */
    56   unsigned char imr_reg;                        /* Interrupt Mask Register */
    57   unsigned char cur_reg;                        /* Counter Mode: current MSB */
    58   unsigned char ctur_reg;                       /* Counter/Timer upper reg */
    59   unsigned char clr_reg;                        /* Counter Mode: current LSB */
    60   unsigned char ctlr_reg;                       /* Counter/Timer lower reg */
    61   unsigned char mr1b_reg;                       /* Mode Register B */
    62   unsigned char mr2b_reg;                       /* Mode Register B */
    63   unsigned char srb_reg;                        /* Status Register B */
    64   unsigned char csrb_reg;                       /* Clock-Select Register B */
    65   unsigned char crb_reg;                        /* Command Register B */
    66   unsigned char ivr_reg;                        /* Interrupt Vector Register */
    67   unsigned char ip_reg;                         /* Input Port */
    68   unsigned char opcr_reg;                       /* Output Port Configuration Reg. */
    69   unsigned char oprset_reg;                     /* Output Port Reg; bit SET */
    70   unsigned char strtcc_reg;                     /* Start-Counter command */
    71   unsigned char oprrst_reg;                     /* Output Port Reg; bit ReSeT */
    72   unsigned char stopcc_reg;                     /* Stop-Counter command */
    73   unsigned char pad;
    74 };
    75 
    76 /* Some RTEMS style defines: */
    77 #ifndef VOL8
    78 #define VOL8( ptr )   ((volatile rtems_unsigned8 *)(ptr))
     13
     14/*
     15 *  In the dark ages when this controller was designed, it was actually
     16 *  possible to access data on unaligned byte boundaries with no penalty.
     17 *  Now we find this chip in configurations in which the registers are
     18 *  at 16-bit, 32-bit, and 64-bit boundaries at the whim of the board
     19 *  designer.  If the registers are not at byte addresses, then
     20 *  set this multiplier before including this file to correct the offsets.
     21 */
     22
     23#ifndef MC68681_OFFSET_MULTIPLIER
     24#define MC68681_OFFSET_MULTIPLIER 1
    7925#endif
    8026
    81 #define MC68681_WRITE( reg, data ) \
    82    *(VOL8(DUART_ADDR+reg)) = (data)
    83 
    84 #define MC68681_READ( reg, data ) \
    85    (data) = *(VOL8(DUART_ADDR+reg))
    86 
     27#define __MC68681_REG(_R) ((_R) * MC68681_OFFSET_MULTIPLIER)
     28
     29/*
     30 * mc68681 register offsets Read/Write Addresses
     31 */
     32#define MC68681_MODE_REG_1A  __MC68681_REG(0)  /* MR1A-MR Prior to Read */
     33#define MC68681_MODE_REG_2A  __MC68681_REG(0)  /* MR2A-MR After Read    */
     34
     35#define MC68681_COUNT_MODE_CURRENT_MSB       __MC68681_REG(6)  /* CTU   */
     36#define MC68681_COUNTER_TIMER_UPPER_REG      __MC68681_REG(6)  /* CTU   */
     37#define MC68681_COUNT_MODE_CURRENT_LSB       __MC68681_REG(7)  /* CTL   */
     38#define MC68681_COUNTER_TIMER_LOWER_REG      __MC68681_REG(7)  /* CTL   */
     39#define MC68681_INTERRUPT_VECTOR_REG         __MC68681_REG(12) /* IVR   */
     40
     41#define MC68681_MODE_REG_1B  __MC68681_REG(8)  /* MR1B-MR Prior to Read */
     42#define MC68681_MODE_REG_2B  __MC68681_REG(8)  /* MR2BA-MR After Read   */
     43
     44/*
     45 * mc68681 register offsets Read Only  Addresses
     46 */
     47#define MC68681_STATUS_REG_A                __MC68681_REG(1)   /* SRA   */
     48#define MC68681_MASK_ISR_REG                __MC68681_REG(2)   /* MISR  */
     49#define MC68681_RECEIVE_BUFFER_A            __MC68681_REG(3)   /* RHRA  */
     50#define MC68681_INPUT_PORT_CHANGE_REG       __MC68681_REG(4)   /* IPCR  */
     51#define MC68681_INTERRUPT_STATUS_REG        __MC68681_REG(5)   /* ISR   */
     52#define MC68681_STATUS_REG_B                __MC68681_REG(9)   /* SRB   */
     53#define MC68681_RECEIVE_BUFFER_B            __MC68681_REG(11)  /* RHRB  */
     54#define MC68681_INPUT_PORT                  __MC68681_REG(13)  /* IP    */
     55#define MC68681_START_COUNT_CMD             __MC68681_REG(14)  /* SCC   */
     56#define MC68681_STOP_COUNT_CMD              __MC68681_REG(15)  /* STC   */
     57
     58/*
     59 * mc68681 register offsets Write Only  Addresses
     60 */
     61#define MC68681_CLOCK_SELECT_REG_A          __MC68681_REG(1)   /* CSRA  */
     62#define MC68681_COMMAND_REG_A               __MC68681_REG(2)   /* CRA   */
     63#define MC68681_TRANSMIT_BUFFER_A           __MC68681_REG(3)   /* THRA  */
     64#define MC68681_AUX_CTRL_REG                __MC68681_REG(4)   /* ACR   */
     65#define MC68681_INTERRUPT_MASK_REG          __MC68681_REG(5)   /* IMR   */
     66#define MC68681_CLOCK_SELECT_REG_B          __MC68681_REG(9)   /* CSRB  */
     67#define MC68681_COMMAND_REG_B               __MC68681_REG(10)  /* CRB   */
     68#define MC68681_TRANSMIT_BUFFER_B           __MC68681_REG(11)  /* THRB  */
     69#define MC68681_OUTPUT_PORT_CONFIG_REG      __MC68681_REG(13)  /* OPCR  */
     70#define MC68681_OUTPUT_PORT_SET_REG         __MC68681_REG(14)  /* SOPBC */
     71#define MC68681_OUTPUT_PORT_RESET_BITS      __MC68681_REG(15)  /* COPBC */
     72
     73
     74#ifndef MC6681_VOL
     75#define MC6681_VOL( ptr )   ((volatile unsigned char *)(ptr))
    8776#endif
     77
     78#define MC68681_WRITE( _base, _reg, _data ) \
     79   *((volatile unsigned char *)_base+_reg) = (_data)
     80
     81#define MC68681_READ( _base, _reg ) \
     82   *(((volatile unsigned char *)_base+_reg))
     83
     84
     85
     86#define  MC68681_CLEAR                                     0x00
     87
     88#define MC68681_PORT_A                                     0
     89#define MC68681_PORT_B                                     1
     90
     91/*
     92 *  DUART Command Register Definations:
     93 *
     94 *  MC68681_COMMAND_REG_A,MC68681_COMMAND_REG_B       
     95 */
     96#define MC68681_MODE_REG_ENABLE_RX                          0x01
     97#define MC68681_MODE_REG_DISABLE_RX                         0x02
     98#define MC68681_MODE_REG_ENABLE_TX                          0x04
     99#define MC68681_MODE_REG_DISABLE_TX                         0x08
     100#define MC68681_MODE_REG_RESET_MR_PTR                       0x10
     101#define MC68681_MODE_REG_RESET_RX                           0x20
     102#define MC68681_MODE_REG_RESET_TX                           0x30
     103#define MC68681_MODE_REG_RESET_ERROR                        0x40
     104#define MC68681_MODE_REG_RESET_BREAK                        0x50
     105#define MC68681_MODE_REG_START_BREAK                        0x60
     106#define MC68681_MODE_REG_STOP_BREAK                         0x70
     107#define MC68681_MODE_REG_SET_RX_BRG                         0x80
     108#define MC68681_MODE_REG_CLEAR_RX_BRG                       0x90
     109#define MC68681_MODE_REG_SET_TX_BRG                         0xa0
     110#define MC68681_MODE_REG_CLEAR_TX_BRG                       0xb0
     111#define MC68681_MODE_REG_SET_STANDBY                        0xc0
     112#define MC68681_MODE_REG_SET_ACTIVE                         0xd0
     113
     114/*
     115 * Mode Register Definations
     116 *
     117 *  MC68681_MODE_REG_1A
     118 *  MC68681_MODE_REG_1B
     119 */
     120#define MC68681_5BIT_CHARS                                  0x00
     121#define MC68681_6BIT_CHARS                                  0x01
     122#define MC68681_7BIT_CHARS                                  0x02
     123#define MC68681_8BIT_CHARS                                  0x03
     124
     125#define MC68681_ODD_PARITY                                  0x00
     126#define MC68681_EVEN_PARITY                                 0x04
     127
     128#define MC68681_WITH_PARITY                                 0x00
     129#define MC68681_FORCE_PARITY                                0x08
     130#define MC68681_NO_PARITY                                   0x10
     131#define MC68681_MULTI_DROP                                  0x18
     132
     133#define MC68681_ERR_MODE_CHAR                               0x00
     134#define MC68681_ERR_MODE_BLOCK                              0x20
     135
     136#define MC68681_RX_INTR_RX_READY                            0x00
     137#define MC68681_RX_INTR_FFULL                               0x40
     138
     139#define MC68681_NO_RX_RTS_CTL                               0x00
     140#define MC68681_RX_RTS_CTRL                                 0x80
     141
     142
     143/*
     144 * Mode Register Definations
     145 *
     146 *  MC68681_MODE_REG_2A
     147 *  MC68681_MODE_REG_2B
     148 */
     149#define MC68681_STOP_BIT_LENGTH__563                        0x00
     150#define MC68681_STOP_BIT_LENGTH__625                        0x01
     151#define MC68681_STOP_BIT_LENGTH__688                        0x02
     152#define MC68681_STOP_BIT_LENGTH__75                         0x03
     153#define MC68681_STOP_BIT_LENGTH__813                        0x04
     154#define MC68681_STOP_BIT_LENGTH__875                        0x05
     155#define MC68681_STOP_BIT_LENGTH__938                        0x06
     156#define MC68681_STOP_BIT_LENGTH_1                           0x07
     157#define MC68681_STOP_BIT_LENGTH_1_563                       0x08
     158#define MC68681_STOP_BIT_LENGTH_1_625                       0x09
     159#define MC68681_STOP_BIT_LENGTH_1_688                       0x0a
     160#define MC68681_STOP_BIT_LENGTH_1_75                        0x0b
     161#define MC68681_STOP_BIT_LENGTH_1_813                       0x0c
     162#define MC68681_STOP_BIT_LENGTH_1_875                       0x0d
     163#define MC68681_STOP_BIT_LENGTH_1_938                       0x0e
     164#define MC68681_STOP_BIT_LENGTH_2                           0x0f
     165
     166#define MC68681_CTS_ENABLE_TX                               0x10
     167#define MC68681_TX_RTS_CTRL                                 0x20
     168
     169#define MC68681_CHANNEL_MODE_NORMAL                         0x00
     170#define MC68681_CHANNEL_MODE_ECHO                           0x40
     171#define MC68681_CHANNEL_MODE_LOCAL_LOOP                     0x80
     172#define MC68681_CHANNEL_MODE_REMOTE_LOOP                    0xc0
     173
     174/*
     175 * Status Register Definations
     176 *
     177 *    MC68681_STATUS_REG_A,  MC68681_STATUS_REG_B
     178 */
     179#define MC68681_RX_READY                                    0x01
     180#define MC68681_FFULL                                       0x02
     181#define MC68681_TX_READY                                    0x04
     182#define MC68681_TX_EMPTY                                    0x08
     183#define MC68681_OVERRUN_ERROR                               0x10
     184#define MC68681_PARITY_ERROR                                0x20
     185#define MC68681_FRAMING_ERROR                               0x40
     186#define MC68681_RECEIVED_BREAK                              0x80
     187
     188
     189/*
     190 * Interupt Status Register Definations. 
     191 *
     192 * MC68681_INTERRUPT_STATUS_REG         
     193 */
     194
     195
     196/*
     197 *  Interupt Mask Register Definations     
     198 *
     199 *  MC68681_INTERRUPT_MASK_REG
     200 */
     201#define MC68681_IR_TX_READY_A                               0x01
     202#define MC68681_IR_RX_READY_A                               0x02
     203#define MC68681_IR_BREAK_A                                  0x04
     204#define MC68681_IR_COUNTER_READY                            0x08
     205#define MC68681_IR_TX_READY_B                               0x10
     206#define MC68681_IR_RX_READY_B                               0x20
     207#define MC68681_IR_BREAK_B                                  0x40
     208#define MC68681_IR_INPUT_PORT_CHANGE                        0x80
     209
     210/*
     211 * Status Register Definations. 
     212 *
     213 * MC68681_STATUS_REG_A,MC68681_STATUS_REG_B         
     214 */
     215#define MC68681_STATUS_RXRDY                                0x01
     216#define MC68681_STATUS_FFULL                                0x02
     217#define MC68681_STATUS_TXRDY                                0x04
     218#define MC68681_STATUS_TXEMT                                0x08
     219#define MC68681_STATUS_OVERRUN_ERROR                        0x10
     220#define MC68681_STATUS_PARITY_ERROR                         0x20
     221#define MC68681_STATUS_FRAMING_ERROR                        0x40
     222#define MC68681_STATUS_RECEIVED_BREAK                       0x80
     223
     224/*
     225 * Definations for the Interrupt Vector Register:
     226 *
     227 * MC68681_INTERRUPT_VECTOR_REG 
     228 */
     229#define  MC68681_INTERRUPT_VECTOR_INIT                      0x0f
     230
     231/*
     232 * Definations for the Auxiliary Control Register 
     233 *
     234 * MC68681_AUX_CTRL_REG
     235 */
     236#define MC68681_AUX_BRG_SET1                                0x00
     237#define MC68681_AUX_BRG_SET2                                0x80
     238
     239
     240/*
     241 * The following Baud rates assume the X1 clock pin is driven with a
     242 * 3.6864 MHz signal.  If a different frequency is used the DUART channel
     243 * is running at the follwoing baud rate:
     244 *       ((Table Baud Rate)*frequency)/3.6864 MHz
     245 */
     246
     247/*
     248 * Definations for the Clock Select Register:
     249 *
     250 * MC68681_CLOCK_SELECT_REG_A,MC68681_CLOCK_SELECT_REG_A
     251 *
     252 * Note:  ACR[7] is the MSB of the Auxiliary Control register
     253 *        X is the extend bit.
     254 *        CRA - 0x08  Set Rx BRG Select Extend Bit   (X=1)
     255 *        CRA - 0x09  Clear Rx BRG Select Extend Bit (X=0)
     256 *        CRB - 0x0a  Set Tx BRG Select Extend Bit   (X=1)
     257 *        CRB - 0x0b  Clear Tx BRG Select Extend Bit (x=1)
     258 */
     259#define MC68681_BAUD_RATE_MASK_50           0x00   /* ACR[7]=0,X=0 */
     260                                                   /* ARC[7]=1,X=1 */
     261#define MC68681_BAUD_RATE_MASK_75           0x00   /* ACR[7]=0,X=0 */
     262                                                   /* ARC[7]=1,X=1 */
     263#define MC68681_BAUD_RATE_MASK_110          0x01   
     264#define MC68681_BAUD_RATE_MASK_134_5        0x02   
     265#define MC68681_BAUD_RATE_MASK_150          0x03   /* ACR[7]=0,X=0 */
     266                                                   /* ARC[7]=1,X=1 */
     267#define MC68681_BAUD_RATE_MASK_200          0x03   /* ACR[7]=0,X=0 */
     268                                                   /* ARC[7]=1,X=1 */
     269#define MC68681_BAUD_RATE_MASK_300          0x04   /* ACR[7]=0,X=0 */
     270                                                   /* ARC[7]=1,X=1 */
     271#define MC68681_BAUD_RATE_MASK_600          0x05   /* ACR[7]=0,X=0 */
     272                                                   /* ARC[7]=1,X=1 */
     273#define MC68681_BAUD_RATE_MASK_1050         0x07   /* ACR[7]=0,X=0 */
     274                                                   /* ARC[7]=1,X=1 */
     275#define MC68681_BAUD_RATE_MASK_1200         0x06   /* ACR[7]=0,X=0 */
     276                                                   /* ARC[7]=1,X=1 */
     277#define MC68681_BAUD_RATE_MASK_1800         0x0a   /* ACR[7]=0,X=0 */
     278                                                   /* ARC[7]=1,X=1 */
     279#define MC68681_BAUD_RATE_MASK_2400         0x08   /* ACR[7]=0,X=0 */
     280                                                   /* ARC[7]=1,X=1 */
     281#define MC68681_BAUD_RATE_MASK_3600         0x04   /* ACR[7]=0,X=0 */
     282                                                   /* ARC[7]=1,X=1 */
     283#define MC68681_BAUD_RATE_MASK_4800         0x09   
     284#define MC68681_BAUD_RATE_MASK_7200         0x0a   /* ACR[7]=0,X=0 */
     285                                                   /* ARC[7]=1,X=1 */
     286#define MC68681_BAUD_RATE_MASK_9600         0xbb   
     287
     288#define MC68681_BAUD_RATE_MASK_14_4K        0x05   /* ACR[7]=0,X=0 */
     289                                                   /* ARC[7]=1,X=1 */
     290#define MC68681_BAUD_RATE_MASK_19_2K        0xcc   /* ACR[7]=1,X=0 */
     291                                                   /* ARC[7]=0,X=1 */
     292#define MC68681_BAUD_RATE_MASK_28_8K        0x06   /* ACR[7]=0,X=0 */
     293                                                   /* ARC[7]=1,X=1 */
     294#define MC68681_BAUD_RATE_MASK_38_4K        0xcc   /* ACR[7]=0,X=0 */
     295                                                   /* ARC[7]=1,X=1 */
     296#define MC68681_BAUD_RATE_MASK_57_6K        0x07   /* ACR[7]=0,X=0 */
     297                                                   /* ARC[7]=1,X=1 */
     298#define MC68681_BAUD_RATE_MASK_115_5K       0x08 
     299#define MC68681_BAUD_RATE_MASK_TIMER        0xdd   
     300#define MC68681_BAUD_RATE_MASK_TIMER_16X    0xee   
     301#define MC68681_BAUD_RATE_MASK_TIMER_1X     0xff   
     302
     303#endif
     304
     305
     306
Note: See TracChangeset for help on using the changeset viewer.