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

📄 sysserial.c

📁 Tornado 2.0 BSP for HaeDong HD860-R3 韩国HaeDong公司开发的基于Motorola的MPC860处理器的开发板的BSP
💻 C
字号:
/****************************************************************************/
/*                                                                          */
/* Filename : sysSerial.c                                                   */
/*                                                                          */
/* Purpose. : This module provides the board specific routines required by  */
/*            the vxWorks OS for support.                                   */
/*                                                                          */
/****************************************************************************/

/*********************************/
/*                               */
/* Include files                 */
/*                               */
/*********************************/

#include "vxWorks.h"
#include "iv.h"
#include "intLib.h"
#include "config.h"
#include "sysLib.h"
#include "drv/sio/ppc860Sio.h"
#include "drv/multi/ppc860Cpm.h"
#include "hd860r3.h"

/*********************************/
/*                               */
/* Global data defined here      */
/*                               */
/*********************************/

static PPC860SMC_CHAN ppcChn ;

/****************************************************************************/
/*                                                                          */
/* Function : sysSerialHwInit( void )                                       */
/*                                                                          */
/* Purpose. : Initialize the BSP serial devices to a quiet state.           */
/*                                                                          */
/* Returns. : N/A                                                           */
/*                                                                          */
/* Notes... : Called from sysHwInit()                                       */
/*                                                                          */
/* Data Parameter Ram layout:                                               */
/*                                                                          */
/*   +---------------------------+                                          */
/*   |                           | DPRAM base (address = 0)                 */
/*   |                           |                                          */
/*   |                           |                                          */
/*   |                           |                                          */
/*   +---------------------------+                                          */
/*   | 8 bytes per descriptor    | Tx Buffer Descriptor (0x2200)            */
/*   +---------------------------+                                          */
/*   |                           |                                          */
/*   +---------------------------+                                          */
/*   | 16 descriptors @          | Rx Buffer Descriptors (0x2210)           */
/*   | 8 bytes per descriptor    |                                          */
/*   |                           |                                          */
/*   +---------------------------+                                          */
/*   |                           | end Rx BDs (0x2290)                      */
/*   |                           |                                          */
/*   |                           |                                          */
/*   +---------------------------+                                          */
/*   | 80 bytes allowed          | Tx Buffer (0x2300 + DPRAM base address)  */
/*   +---------------------------+                                          */
/*   | one receive char/buffer   | Rx Buffer (0x2380 + DPRAM base address)  */
/*   +---------------------------+                                          */
/*   |                           |                                          */
/*   |                           |                                          */
/*   |                           |                                          */
/*   +---------------------------+                                          */
/*   | 34 bytes of parameter info| SMC1 Parameter Area (0x1e80)             */
/*   | including Rx and Tx BD    |                                          */
/*   | pointers, func codes      |                                          */
/*   | etc...                    |                                          */
/*   +---------------------------+                                          */
/*                                                                          */
/****************************************************************************/

void sysSerialHwInit( void )
{
  /*                                                                        */
  /* intialize the chips device descriptors                                 */
  /*                                                                        */

  ppcChn.regBase        = vxImmrGet()        ; /* IMMR reg has base adr     */
  ppcChn.clockRate      = SYS_CPU_FREQ       ; /* CPU clock freq (Hz)       */
  ppcChn.bgrNum         = 1                  ; /* use BRG1                  */
  ppcChn.uart.smcNum    = 1                  ; /* SMC1 wired for rs232      */
  ppcChn.uart.txBdNum   = 1                  ; /* use 1 transmit BD         */
  ppcChn.uart.rxBdNum   = 0x10               ; /* use 16 receive BD         */
  ppcChn.uart.txBdBase  = (SMC_BUF *) 0x2200 ; /* transmit BD base adrs     */
  ppcChn.uart.rxBdBase  = (SMC_BUF *) 0x2210 ; /* receive BD base adrs      */
  ppcChn.uart.txBufSize = 0x1                ; /* transmit buffer size      */

  ppcChn.uart.txBufBase = (u_char *) 

    ( MPC860_DPRAM_BASE( ppcChn.regBase ) + 0x300 ) ;
                                                    
  ppcChn.uart.rxBufBase = (u_char *) 

    ( MPC860_DPRAM_BASE( ppcChn.regBase ) + 0x380 ) ;

  ppcChn.uart.pSmc = (SMC *) ( (UINT32)        /* DPRAM addr of SMC1 params */

    PPC860_DPR_SMC1( MPC860_DPRAM_BASE( ppcChn.regBase ) ) ) ;
                                                  
  /*                                                                        */
  /* SMCMR1 for SMC1                                                        */
  /*                                                                        */

  ppcChn.uart.pSmcReg = (SMC_REG *) ( (UINT32) MPC860_SMCMR1( ppcChn.regBase ) ) ;

  ppcChn.pBaud       = (UINT32 *) MPC860_BRGC1(ppcChn.regBase) ;
  ppcChn.channelMode = 0                                       ;

  * MPC860_PBPAR( ppcChn.regBase ) = 0xC0 ;    /* select RS232 pins         */
  * MPC860_SDCR ( ppcChn.regBase ) = 0x00004001;

  /*                                                                        */
  /* reset the chip                                                         */
  /*                                                                        */

  ppc860DevInit( &ppcChn ) ;
}

/****************************************************************************/
/*                                                                          */
/* Function : sysSerialHwInit2( void )                                      */
/*                                                                          */
/* Purpose. : Connects the BSP Serial device interrupts.                    */
/*                                                                          */
/*                                                                          */
/*                                                                          */
/*                                                                          */
/* Returns. : N/A                                                           */
/*                                                                          */
/* Notes... : Called from sysHwInit2()                                      */
/*                                                                          */
/****************************************************************************/

void sysSerialHwInit2( void )
{
    /*                                                                      */
    /* Connect serial interrupts                                            */
    /*                                                                      */

    (void) intConnect( IV_SMC1, (VOIDFUNCPTR) ppc860Int, (int) &ppcChn ) ;

    * CIMR( vxImmrGet() ) |= CIMR_SMC1 ;
}

/****************************************************************************/
/*                                                                          */
/* Function : sysSerialChanGet( int channnel )                              */
/*                                                                          */
/* Purpose. : Gets the SIO_CHAN device which is associated with the given   */
/*            serial channel. In this case only one exists.                 */
/*                                                                          */
/* Returns. : Pointer to SIO_CHAN space for the device.                     */
/*                                                                          */
/* Notes... : None                                                          */
/*                                                                          */
/****************************************************************************/

SIO_CHAN * sysSerialChanGet
    (
       int channel		/* serial channel                           */
    )
{
    /*                                                                      */
    /* Check the parameters for validity.                                   */
    /*                                                                      */

    if ( channel )
    {
	return( (SIO_CHAN *) ERROR ) ;
    }

    /*                                                                      */
    /* Return a pointer to the private space.                               */
    /*                                                                      */

    return( (SIO_CHAN *) &ppcChn ) ;
}

/****************************************************************************/
/*                                                                          */
/* Function : sysSerialReset( void )                                        */
/*                                                                          */
/* Purpose. : Reset the serial device.                                      */
/*                                                                          */
/* Returns. : None                                                          */
/*                                                                          */
/* Notes... : None                                                          */
/*                                                                          */
/****************************************************************************/

void sysSerialReset( void )
{
    sysSerialHwInit() ;
}

⌨️ 快捷键说明

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