T168_Debug222\core:HdwReg.c

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define HDWREG_C

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "Common.h"
#include "XCore.h"
#include "Xcomm.h"
#include "HdwReg.h"

/******************************************************************************
 *                                                                            *
 *                         L O C A L   D E F I N E S                          *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                        L O C A L   T Y P E D E F S                         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *             L O C A L   F U N C T I O N   P R O T O T Y P E S              *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   I N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   U N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

#if defined(__HITACHI__)
#pragma section ISR
#endif

/******************************************************************************
 *
 * Function:
 *    OutPin
 *
 * Description: 
 *        This global function out data to IO pin.
 *
 * Input:
 *      None
 *
 * Output:
 *      None.
 *
 ******************************************************************************/
VOID OutPin(_eIOPort port, BYTE pin, INT data)
{
    INT imask;

    imask = DisableInterrupt(INTERRUPT_MASK);

    IOPort[port].Data = *IOPort[port].In;

    if ( data )
        IOPort[port].Data |= pin;
    else
        IOPort[port].Data &= ~pin;

    *IOPort[port].Out = IOPort[port].Data;

    EnableInterrupt(imask);
}

VOID EnableInterrupt(INT priority)
{
#if defined(__HITACHI__)
    set_imask(priority);
#elif defined(__ICCARM__)||defined(__MDKARM__)
    if ( !priority )
        __enable_interrupt();
#endif
}

INT DisableInterrupt(INT priority)
{
#if defined(__HITACHI__)
    INT imask = get_imask();
    if ( priority > imask )
        set_imask(priority);
    CLOSE_WATCH_DOG;
    return imask;

#elif defined(__ICCARM__)||defined(__MDKARM__)
    INT imask = (__get_CPSR() & 0x80);
    if ( priority )
        __disable_interrupt();
    CLOSE_WATCH_DOG;
    return imask;

#endif
}

VOID ProcessorReset(VOID)
{
#if defined(AT91SAM9260)
    DisableInterrupt(INTERRUPT_MASK);
    AT91F_RSTSoftReset(AT91C_BASE_RSTC, AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_RSTC_EXTRST);
    while ( 1 ){}

#elif defined(SH7040)
    DisableInterrupt(INTERRUPT_MASK);
    WDT_TCNT = 0x5AFE;
    WDT_RSTCSR = 0x5A40;
    WDT_TCSR = 0xA5E0;
    while ( 1 ){}
#elif defined(N3290)
    DisableInterrupt(INTERRUPT_MASK);
    outpw(REG_WTCR, inpw(REG_WTCR) | 0x80);//ENABLE WDT
    outpw(REG_WTCR, inpw(REG_WTCR) | 0x02);//ENABLE WDT RESET
    while (1){};

#endif
}

#if defined(__HITACHI__)
#pragma section 
#endif

以下为.h文件                           

#ifndef HWDREG_H

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define HWDREG_H

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif    /* __cplusplus */

/******************************************************************************
 *                                                                            *
 *                        G L O B A L   D E F I N E S                         *
 *                                                                            *
 ******************************************************************************/

#if defined(TTP243_PCB) || defined(TDP643_PCB) || defined(TTP244M_PCB)
#define PORTA_PROTECT        PE.DR.BIT.B2

#endif


#if defined(TTP245P_PCB) ||defined(T045_PCB) ||defined(T40_PCB)

#define DATA_PORT_01        (VOLATILE BYTE *)0x30000000        // Centronic data port

#endif

/******************************************************************************
 *                                                                            *
 *                 S T R U C T U R E   D E F I N I T I O N S                  *
 *                                                                            *
 ******************************************************************************/

#if defined(TTP245P_PCB) ||defined(T045_PCB) ||defined(T40_PCB)

typedef enum
{
    EXT_IOPORT_01,
}_eIOPort;

#else

typedef INT _eIOPort;

#endif

typedef struct
{
    VOLATILE BYTE     *Out;
    VOLATILE BYTE     *In;
    VOLATILE BYTE    Data;
}_IOPort;

/******************************************************************************
 *                                                                            *
 *    G L O B A L   V A R I A B L E S   -   N O   I N I T I A L I Z E R S     *
 *                                                                            *
 ******************************************************************************/

#ifdef HDWREG_C
#define EXTERN
#else
#define EXTERN extern
#endif

/******************************************************************************
 *                                                                            *
 *       G L O B A L   V A R I A B L E S   -   I N I T I A L I Z E R S        *
 *                                                                            *
 ******************************************************************************/

#ifdef HDWREG_C 

#if defined(TTP245P_PCB) ||defined(T045_PCB) ||defined(T40_PCB)
EXTERN _IOPort IOPort[] =
{
    // Centronic data port
    { &IOPort[0].Data,    DATA_PORT_01,        0},        // Read
};

#else

EXTERN _IOPort IOPort[] = { &IOPort[0].Data, &IOPort[0].Data, 0 };

#endif

#else

EXTERN _IOPort IOPort[];

#endif

/******************************************************************************
 *                                                                            *
 *                   F U N C T I O N   P R O T O T Y P E S                    *
 *                                                                            *
 ******************************************************************************/

#define InPort(port)            ( *IOPort[port].In )
#define OutPort(port, data)        ( *IOPort[port].Out = IOPort[port].Data = data )
#define InPin(port, pin)        ( *IOPort[port].In & pin )

VOID OutPin(_eIOPort, BYTE, INT);

VOID EnableInterrupt(INT);
INT DisableInterrupt(INT);

VOID ProcessorReset(VOID);

#undef EXTERN

#ifdef __cplusplus
}                       /* End of extern "C" { */
#endif    /* __cplusplus */

#endif    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值