/******************************************************************************
* *
* 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