📄 mc68ez328.h
字号:
#define PDKBEN_ADDR 0xfffff41e /* Port D Keyboard Enable reg */
#define PDIQEG_ADDR 0xfffff41f /* Port D IRQ Edge Register */
#define PDDIR BYTE_REF(PDDIR_ADDR)
#define PDDATA BYTE_REF(PDDATA_ADDR)
#define PDPUEN BYTE_REF(PDPUEN_ADDR)
#define PDSEL BYTE_REF(PDSEL_ADDR)
#define PDPOL BYTE_REF(PDPOL_ADDR)
#define PDIRQEN BYTE_REF(PDIRQEN_ADDR)
#define PDKBEN BYTE_REF(PDKBEN_ADDR)
#define PDIQEG BYTE_REF(PDIQEG_ADDR)
#define PD(x) (1 << (x))
#define PD_INT0 0x01 /* Use INT0 as PD[0] */
#define PD_INT1 0x02 /* Use INT1 as PD[1] */
#define PD_INT2 0x04 /* Use INT2 as PD[2] */
#define PD_INT3 0x08 /* Use INT3 as PD[3] */
#define PD_IRQ1 0x10 /* Use IRQ1 as PD[4] */
#define PD_IRQ2 0x20 /* Use IRQ2 as PD[5] */
#define PD_IRQ3 0x40 /* Use IRQ3 as PD[6] */
#define PD_IRQ6 0x80 /* Use IRQ6 as PD[7] */
/*
* Port E
*/
#define PEDIR_ADDR 0xfffff420 /* Port E direction reg */
#define PEDATA_ADDR 0xfffff421 /* Port E data register */
#define PEPUEN_ADDR 0xfffff422 /* Port E Pull-Up enable reg */
#define PESEL_ADDR 0xfffff423 /* Port E Select Register */
#define PEDIR BYTE_REF(PEDIR_ADDR)
#define PEDATA BYTE_REF(PEDATA_ADDR)
#define PEPUEN BYTE_REF(PEPUEN_ADDR)
#define PESEL BYTE_REF(PESEL_ADDR)
#define PE(x) (1 << (x))
#define PE_SPMTXD 0x01 /* Use SPMTXD as PE[0] */
#define PE_SPMRXD 0x02 /* Use SPMRXD as PE[1] */
#define PE_SPMCLK 0x04 /* Use SPMCLK as PE[2] */
#define PE_DWE 0x08 /* Use DWE as PE[3] */
#define PE_RXD 0x10 /* Use RXD as PE[4] */
#define PE_TXD 0x20 /* Use TXD as PE[5] */
#define PE_RTS 0x40 /* Use RTS as PE[6] */
#define PE_CTS 0x80 /* Use CTS as PE[7] */
/*
* Port F
*/
#define PFDIR_ADDR 0xfffff428 /* Port F direction reg */
#define PFDATA_ADDR 0xfffff429 /* Port F data register */
#define PFPUEN_ADDR 0xfffff42a /* Port F Pull-Up enable reg */
#define PFSEL_ADDR 0xfffff42b /* Port F Select Register */
#define PFDIR BYTE_REF(PFDIR_ADDR)
#define PFDATA BYTE_REF(PFDATA_ADDR)
#define PFPUEN BYTE_REF(PFPUEN_ADDR)
#define PFSEL BYTE_REF(PFSEL_ADDR)
#define PF(x) (1 << (x))
#define PF_LCONTRAST 0x01 /* Use LCONTRAST as PF[0] */
#define PF_IRQ5 0x02 /* Use IRQ5 as PF[1] */
#define PF_CLKO 0x04 /* Use CLKO as PF[2] */
#define PF_A20 0x08 /* Use A20 as PF[3] */
#define PF_A21 0x10 /* Use A21 as PF[4] */
#define PF_A22 0x20 /* Use A22 as PF[5] */
#define PF_A23 0x40 /* Use A23 as PF[6] */
#define PF_CSA1 0x80 /* Use CSA1 as PF[7] */
/*
* Port G
*/
#define PGDIR_ADDR 0xfffff430 /* Port G direction reg */
#define PGDATA_ADDR 0xfffff431 /* Port G data register */
#define PGPUEN_ADDR 0xfffff432 /* Port G Pull-Up enable reg */
#define PGSEL_ADDR 0xfffff433 /* Port G Select Register */
#define PGDIR BYTE_REF(PGDIR_ADDR)
#define PGDATA BYTE_REF(PGDATA_ADDR)
#define PGPUEN BYTE_REF(PGPUEN_ADDR)
#define PGSEL BYTE_REF(PGSEL_ADDR)
#define PG(x) (1 << (x))
#define PG_BUSW_DTACK 0x01 /* Use BUSW/DTACK as PG[0] */
#define PG_A0 0x02 /* Use A0 as PG[1] */
#define PG_EMUIRQ 0x04 /* Use EMUIRQ as PG[2] */
#define PG_HIZ_P_D 0x08 /* Use HIZ/P/D as PG[3] */
#define PG_EMUCS 0x10 /* Use EMUCS as PG[4] */
#define PG_EMUBRK 0x20 /* Use EMUBRK as PG[5] */
/**********
*
* 0xFFFFF5xx -- Pulse-Width Modulator (PWM)
*
**********/
/*
* PWM Control Register
*/
#define PWMC_ADDR 0xfffff500
#define PWMC WORD_REF(PWMC_ADDR)
#define PWMC_CLKSEL_MASK 0x0003 /* Clock Selection */
#define PWMC_CLKSEL_SHIFT 0
#define PWMC_REPEAT_MASK 0x000c /* Sample Repeats */
#define PWMC_REPEAT_SHIFT 2
#define PWMC_EN 0x0010 /* Enable PWM */
#define PMNC_FIFOAV 0x0020 /* FIFO Available */
#define PWMC_IRQEN 0x0040 /* Interrupt Request Enable */
#define PWMC_IRQ 0x0080 /* Interrupt Request (FIFO empty) */
#define PWMC_PRESCALER_MASK 0x7f00 /* Incoming Clock prescaler */
#define PWMC_PRESCALER_SHIFT 8
#define PWMC_CLKSRC 0x8000 /* Clock Source Select */
/* '328-compatible definitions */
#define PWMC_PWMEN PWMC_EN
/*
* PWM Sample Register
*/
#define PWMS_ADDR 0xfffff502
#define PWMS WORD_REF(PWMS_ADDR)
/*
* PWM Period Register
*/
#define PWMP_ADDR 0xfffff504
#define PWMP BYTE_REF(PWMP_ADDR)
/*
* PWM Counter Register
*/
#define PWMCNT_ADDR 0xfffff505
#define PWMCNT BYTE_REF(PWMCNT_ADDR)
/**********
*
* 0xFFFFF6xx -- General-Purpose Timer
*
**********/
/*
* Timer Control register
*/
#define TCTL_ADDR 0xfffff600
#define TCTL WORD_REF(TCTL_ADDR)
#define TCTL_TEN 0x0001 /* Timer Enable */
#define TCTL_CLKSOURCE_MASK 0x000e /* Clock Source: */
#define TCTL_CLKSOURCE_STOP 0x0000 /* Stop count (disabled) */
#define TCTL_CLKSOURCE_SYSCLK 0x0002 /* SYSCLK to prescaler */
#define TCTL_CLKSOURCE_SYSCLK_16 0x0004 /* SYSCLK/16 to prescaler */
#define TCTL_CLKSOURCE_TIN 0x0006 /* TIN to prescaler */
#define TCTL_CLKSOURCE_32KHZ 0x0008 /* 32kHz clock to prescaler */
#define TCTL_IRQEN 0x0010 /* IRQ Enable */
#define TCTL_OM 0x0020 /* Output Mode */
#define TCTL_CAP_MASK 0x00c0 /* Capture Edge: */
#define TCTL_CAP_RE 0x0040 /* Capture on rizing edge */
#define TCTL_CAP_FE 0x0080 /* Capture on falling edge */
#define TCTL_FRR 0x0010 /* Free-Run Mode */
/* '328-compatible definitions */
#define TCTL1_ADDR TCTL_ADDR
#define TCTL1 TCTL
/*
* Timer Prescaler Register
*/
#define TPRER_ADDR 0xfffff602
#define TPRER WORD_REF(TPRER_ADDR)
/* '328-compatible definitions */
#define TPRER1_ADDR TPRER_ADDR
#define TPRER1 TPRER
/*
* Timer Compare Register
*/
#define TCMP_ADDR 0xfffff604
#define TCMP WORD_REF(TCMP_ADDR)
/* '328-compatible definitions */
#define TCMP1_ADDR TCMP_ADDR
#define TCMP1 TCMP
/*
* Timer Capture register
*/
#define TCR_ADDR 0xfffff606
#define TCR WORD_REF(TCR_ADDR)
/* '328-compatible definitions */
#define TCR1_ADDR TCR_ADDR
#define TCR1 TCR
/*
* Timer Counter Register
*/
#define TCN_ADDR 0xfffff608
#define TCN WORD_REF(TCN_ADDR)
/* '328-compatible definitions */
#define TCN1_ADDR TCN_ADDR
#define TCN1 TCN
/*
* Timer Status Register
*/
#define TSTAT_ADDR 0xfffff60a
#define TSTAT WORD_REF(TSTAT_ADDR)
#define TSTAT_COMP 0x0001 /* Compare Event occurred */
#define TSTAT_CAPT 0x0001 /* Capture Event occurred */
/* '328-compatible definitions */
#define TSTAT1_ADDR TSTAT_ADDR
#define TSTAT1 TSTAT
/**********
*
* 0xFFFFF8xx -- Serial Periferial Interface Master (SPIM)
*
**********/
/*
* SPIM Data Register
*/
#define SPIMDATA_ADDR 0xfffff800
#define SPIMDATA WORD_REF(SPIMDATA_ADDR)
/*
* SPIM Control/Status Register
*/
#define SPIMCONT_ADDR 0xfffff802
#define SPIMCONT WORD_REF(SPIMCONT_ADDR)
#define SPIMCONT_BIT_COUNT_MASK 0x000f /* Transfer Length in Bytes */
#define SPIMCONT_BIT_COUNT_SHIFT 0
#define SPIMCONT_POL 0x0010 /* SPMCLK Signel Polarity */
#define SPIMCONT_PHA 0x0020 /* Clock/Data phase relationship */
#define SPIMCONT_IRQEN 0x0040 /* IRQ Enable */
#define SPIMCONT_IRQ 0x0080 /* Interrupt Request */
#define SPIMCONT_XCH 0x0100 /* Exchange */
#define SPIMCONT_ENABLE 0x0200 /* Enable SPIM */
#define SPIMCONT_DATA_RATE_MASK 0xe000 /* SPIM Data Rate */
#define SPIMCONT_DATA_RATE_SHIFT 13
/* '328-compatible definitions */
#define SPIMCONT_SPIMIRQ SPIMCONT_IRQ
#define SPIMCONT_SPIMEN SPIMCONT_ENABLE
/**********
*
* 0xFFFFF9xx -- UART
*
**********/
/*
* UART Status/Control Register
*/
#define USTCNT_ADDR 0xfffff900
#define USTCNT WORD_REF(USTCNT_ADDR)
#define USTCNT_TXAE 0x0001 /* Transmitter Available Interrupt Enable */
#define USTCNT_TXHE 0x0002 /* Transmitter Half Empty Enable */
#define USTCNT_TXEE 0x0004 /* Transmitter Empty Interrupt Enable */
#define USTCNT_RXRE 0x0008 /* Receiver Ready Interrupt Enable */
#define USTCNT_RXHE 0x0010 /* Receiver Half-Full Interrupt Enable */
#define USTCNT_RXFE 0x0020 /* Receiver Full Interrupt Enable */
#define USTCNT_CTSD 0x0040 /* CTS Delta Interrupt Enable */
#define USTCNT_ODEN 0x0080 /* Old Data Interrupt Enable */
#define USTCNT_8_7 0x0100 /* Eight or seven-bit transmission */
#define USTCNT_STOP 0x0200 /* Stop bit transmission */
#define USTCNT_ODD 0x0400 /* Odd Parity */
#define USTCNT_PEN 0x0800 /* Parity Enable */
#define USTCNT_CLKM 0x1000 /* Clock Mode Select */
#define USTCNT_TXEN 0x2000 /* Transmitter Enable */
#define USTCNT_RXEN 0x4000 /* Receiver Enable */
#define USTCNT_UEN 0x8000 /* UART Enable */
/* '328-compatible definitions */
#define USTCNT_TXAVAILEN USTCNT_TXAE
#define USTCNT_TXHALFEN USTCNT_TXHE
#define USTCNT_TXEMPTYEN USTCNT_TXEE
#define USTCNT_RXREADYEN USTCNT_RXRE
#define USTCNT_RXHALFEN USTCNT_RXHE
#define USTCNT_RXFULLEN USTCNT_RXFE
#define USTCNT_CTSDELTAEN USTCNT_CTSD
#define USTCNT_ODD_EVEN USTCNT_ODD
#define USTCNT_PARITYEN USTCNT_PEN
#define USTCNT_CLKMODE USTCNT_CLKM
#define USTCNT_UARTEN USTCNT_UEN
/*
* UART Baud Control Register
*/
#define UBAUD_ADDR 0xfffff902
#define UBAUD WORD_REF(UBAUD_ADDR)
#define UBAUD_PRESCALER_MASK 0x003f /* Actual divisor is 65 - PRESCALER */
#define UBAUD_PRESCALER_SHIFT 0
#define UBAUD_DIVIDE_MASK 0x0700 /* Baud Rate freq. divizor */
#define UBAUD_DIVIDE_SHIFT 8
#define UBAUD_BAUD_SRC 0x0800 /* Baud Rate Source */
#define UBAUD_UCLKDIR 0x2000 /* UCLK Direction */
/*
* UART Receiver Register
*/
#define URX_ADDR 0xfffff904
#define URX WORD_REF(URX_ADDR)
#define URX_RXDATA_ADDR 0xfffff905
#define URX_RXDATA BYTE_REF(URX_RXDATA_ADDR)
#define URX_RXDATA_MASK 0x00ff /* Received data */
#define URX_RXDATA_SHIFT 0
#define URX_PARITY_ERROR 0x0100 /* Parity Error */
#define URX_BREAK 0x0200 /* Break Detected */
#define URX_FRAME_ERROR 0x0400 /* Framing Error */
#define URX_OVRUN 0x0800 /* Serial Overrun */
#define URX_OLD_DATA 0x1000 /* Old data in FIFO */
#define URX_DATA_READY 0x2000 /* Data Ready (FIFO not empty) */
#define URX_FIFO_HALF 0x4000 /* FIFO is Half-Full */
#define URX_FIFO_FULL 0x8000 /* FIFO is Full */
/*
* UART Transmitter Register
*/
#define UTX_ADDR 0xfffff906
#define UTX WORD_REF(UTX_ADDR)
#define UTX_TXDATA_ADDR 0xfffff907
#define UTX_TXDATA BYTE_REF(UTX_TXDATA_ADDR)
#define UTX_TXDATA_MASK 0x00ff /* Data to be transmitted */
#define UTX_TXDATA_SHIFT 0
#define UTX_CTS_DELTA 0x0100 /* CTS changed */
#define UTX_CTS_STAT 0x0200 /* CTS State */
#define UTX_BUSY 0x0400 /* FIFO is busy, sending a character */
#define UTX_NOCTS 0x0800 /* Ignore CTS */
#define UTX_SEND_BREAK 0x1000 /* Send a BREAK */
#define UTX_TX_AVAIL 0x2000 /* Transmit FIFO has a slot available */
#define UTX_FIFO_HALF 0x4000 /* Transmit FIFO is half empty */
#define UTX_FIFO_EMPTY 0x8000 /* Transmit FIFO is empty */
/* '328-compatible definitions */
#define UTX_CTS_STATUS UTX_CTS_STAT
#define UTX_IGNORE_CTS UTX_NOCTS
/*
* UART Miscellaneous Register
*/
#define UMISC_ADDR 0xfffff908
#define UMISC WORD_REF(UMISC_ADDR)
#define UMISC_TX_POL 0x0004 /* Transmit Polarity */
#define UMISC_RX_POL 0x0008 /* Receive Polarity */
#define UMISC_IRDA_LOOP 0x0010 /* IrDA Loopback Enable */
#define UMISC_IRDA_EN 0x0020 /* Infra-Red Enable */
#define UMISC_RTS 0x0040 /* Set RTS status */
#define UMISC_RTSCONT 0x0080 /* Choose RTS control */
#define UMISC_IR_TEST 0x0400 /* IRDA Test Enable */
#define UMISC_BAUD_RESET 0x0800 /* Reset Baud Rate Generation Counters */
#define UMISC_LOOP 0x1000 /* Serial Loopback Enable */
#define UMISC_FORCE_PERR 0x2000 /* Force Parity Error */
#define UMISC_CLKSRC 0x4000 /* Clock Source */
#define UMISC_BAUD_TEST 0x8000 /* Enable Baud Test Mode */
/*
* UART Non-integer Prescaler Register
*/
#define NIPR_ADDR 0xfffff90a
#define NIPR WORD_REF(NIPR_ADDR)
#define NIPR_STEP_VALUE_MASK 0x00ff /* NI prescaler step value */
#define NIPR_STEP_VALUE_SHIFT 0
#define NIPR_SELECT_MASK 0x0700 /* Tap Selection */
#define NIPR_SELECT_SHIFT 8
#define NIPR_PRE_SEL 0x8000 /* Non-integer prescaler select */
/**********
*
* 0xFFFFFAxx -- LCD Controller
*
**********/
/*
* LCD Screen Starting Address Register
*/
#define LSSA_ADDR 0xfffffa00
#define LSSA LONG_REF(LSSA_ADDR)
#define LSSA_SSA_MASK 0x1ffffffe /* Bits 0 and 29-31 are reserved */
/*
* LCD Virtual Page Width Register
*/
#define LVPW_ADDR 0xfffffa05
#define LVPW BYTE_REF(LVPW_ADDR)
/*
* LCD Screen Width Register (not compatible with '328 !!!)
*/
#define LXMAX_ADDR 0xfffffa08
#define LXMAX WORD_REF(LXMAX_ADDR)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -