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

📄 var_arch.h

📁 开放源码实时操作系统源码.
💻 H
📖 第 1 页 / 共 2 页
字号:

// S_ISR     Interrupt Status Register    00000000H
#define S_ISR_TM0IS  (1<<0) // TIMER CH0 interrupt.
#define S_ISR_TM1IS  (1<<1) // TIMER CH1 interrupt.
#define S_ISR_UARTIS (1<<2) // UART interrupt.
#define S_ISR_EXTIS  (1<<3) // External Interrupt.
#define S_ISR_WUIS   (1<<4) // Wakeup Interrupt.

// S_IMR     Interrupt Mask Register    00000000H
// see S_ISR; write a 1 to unmask, 0 to mask.

// S_NSR     NMI Status Register    00000000H
// S_NMR     NMI Mask Register    00000000H

// S_VER     Version Register    00000301H

// --------- GPIO ---------
// S_GIOER   GPIO Output Enable Register    00000000H
// S_GOPR    GPIO Output (Write) Register    00000000H
// S_GIPR    GPIO Input (Read) Register    00000000H
// 16-bit regsiters that do the utterly obvious thing.

// --------- reset ---------
// S_WRCR    Warm Reset Control Register    00000000H
#define S_WRCR_USBWR    (1<<0) // Warm Reset request for USB Controller
#define S_WRCR_MACWR    (1<<1) // Warm Reset request for Ethernet Controller
#define S_WRCR_UARTWR   (1<<4) // Warm Reset request for UART

// S_WRSR    Warm Reset Status Register    00000000H
// See S_WRCR; 1 <=> Ready, 0 <=> performing warm reset.

// --------- power control of USB/ETH peripherals ---------
// S_PWCR    Power Control Register    00000000H
// S_PWSR    Power Control Status Register    00000000H

// --------- bus timouts ---------
// ITCNTR    IBUS Timeout Timer Control Register    00000000H
// ITSETR    IBUS Timeout Timer Set Register    80000000H

// --------- UART ---------
// UARTRBR   UART, Receiver Buffer Register [DLAB=0,READ]
// UARTTHR   UART, Transmitter Holding Register [DLAB=0,WRITE]
// UARTDLL   UART, Divisor Latch LSB Register [DLAB=1]
// The external (18.432MHz) clock is not present. See S_GMR_UCSEL.
// See also UARTDLM below.  So we use the internal 50MHz clock.

//#define UARTCLOCK (18432000)
#define UARTCLOCK (50 * 1000 * 1000)
#define UARTDLL_VAL( _baud_ ) ((UARTCLOCK / 16) / (_baud_) )

// UARTIER   UART, Interrupt Enable Register [DLAB=0]
#define UARTIER_ERBFI    (1<<0) // UART Receive data Buffer Full Interrupt
#define UARTIER_ERBEI    (1<<1) // UART Transmitter Buffer empty Interrupt
#define UARTIER_ERBLI    (1<<2) // UART Line status Interrupts
#define UARTIER_ERBMI    (1<<3) // UART Modem status Interrupts

// UARTDLM   UART, Divisor Latch MSB Register [DLAB=1]
#define UARTDLM_ANY_BAUD (0)
#define UARTDLM_VAL( _baud_ )  (UARTDLL_VAL( _baud_ ) >> 8)

// UARTIIR   UART, Interrupt ID Register [READ]
#define UARTIIR_INTPENDL   (1<<0) // No Pending interrupts

// mask to give one of:
#define UARTIIR_UIID_MASK  (7<<1) // Indicates the priority level of pending interrupt.

#define UARTIIR_RXERROR    (3<<1) // Receiver Line Error
#define UARTIIR_RXD_AVAIL  (2<<1) // Received data available
#define UARTIIR_CHAR_TO    (6<<1) // Character timeout
#define UARTIIR_TX_EMPTY   (1<<1) // Transmitter Register Empty
#define UARTIIR_MODEM      (0<<1) // Modem Status: CTS_L, DSR_L or DCD_L

// UARTFCR   UART, FIFO control Register [WRITE]
// ...is not supported.  But nontheless it appears necessary to write it.
#define UARTFCR_16550_MODE (6)    // and clear the FIFOs.

// UARTLCR   UART, Line control Register
// Word length
#define UARTLCR_8 (0x03)
#define UARTLCR_7 (0x02)
// Stop bits
#define UARTLCR_STB1 (0x00)
#define UARTLCR_STB2 (0x04)
// Parity
#define UARTLCR_NOP (0x00)
#define UARTLCR_EP  (0x18)
#define UARTLCR_OP  (0x08)

// Just predefine the pattern for 8-N-1...
#define UARTLCR_8N1 (0x03)

// Divisor latch access bit; or this with one of the above.
#define UARTLCR_DLAB (0x80)

// UARTMCR   UART, Modem Control Register
#define UARTMCR_DTR (1<<0) // Data Terminal Ready.
#define UARTMCR_RTS (1<<1) // Request To Send.

// UARTLSR   UART, Line status Register
#define UARTLSR_DR    (1<<0) // Receive-Data Ready.
#define UARTLSR_OE    (1<<1) // Receive-Data Overrun Error.
#define UARTLSR_PE    (1<<2) // Receive-Data Parity Error.
#define UARTLSR_FE    (1<<3) // Receive-Data Framing Error.
#define UARTLSR_BI    (1<<4) // Break Interrupt.
#define UARTLSR_THRE  (1<<5) // Transmitter Holding Register Empty.
#define UARTLSR_TEMT  (1<<6) // Transmitter Empty.
#define UARTLSR_RFERR (1<<7) //  Receiver FIFO Error.

// UARTMSR   UART, Modem Status Register
#define UARTMSR_DCTS (1<<0) // Delta Clear To Send.
#define UARTMSR_DDSR (1<<1) // Delta Data Set Ready.
#define UARTMSR_TERI (1<<2) // Trailing Edge Ring Indicato
#define UARTMSR_DDCD (1<<3) // Delta Data Carrier Detect.
#define UARTMSR_CTS  (1<<4) // Clear To Send.
#define UARTMSR_DSR  (1<<5) // Data Set Ready.
#define UARTMSR_RI   (1<<6) // Ring Indicator.
#define UARTMSR_DCD  (1<<7) // Data Carrier Detect.

// UARTSCR   UART, Scratch Register    unknown


// --------- watchdog aka dead man's switch ---------
// DSUCNTR   DSU Control Register    00000000H
// DSUSETR   DSU Dead Time Set Register    80000000H
// DSUCLRR   DSU Clear Register    00000000H
// DSUTIMR   DSU Elapsed Time Register    00000000H

// --------- additional timers ---------
// TMMR      Timer Mode Register    00000000H
// TM0CSR    Timer CH0 Count Set Register    00000000H
// TM1CSR    Timer CH1 Count Set Register    00000000H
// TM0CCR    Timer CH0 Current Count Register    FFFFFFFFH
// TM1CCR    Timer CH1 Current Count Register    FFFFFFFFH

// --------- serial eeprom ---------
// ECCR      EEPROM Command Control Register    00000000H
// ERDR      EEPROM Read Data Register    80000000H
// MACAR1    MAC Address Register 1    00000000H
// MACAR2    MAC Address Register 2    00000000H
// MACAR3    MAC Address Register 3    00000000H

// --------- memory control ---------
// RMMDR     Boot ROM Mode Register    00000000H
// RMATR     Boot ROM Access Timing Register    00000000H
#define RMMDR_FLASH_WRITE_ENABLE (0x100)

#define RMMDR_28F640      (0)
#define RMMDR_28F320      (0)
#define RMMDR_29LV160_120 (3) // sic. from customer doc
#define RMMDR_29LV160_90  (3) // even though "3" is a reserved value
#define RMMDR_29LV160_70  (3) // maybe it means "1".

#define RMATR_28F640      (5)
#define RMATR_28F320      (4)
#define RMATR_29LV160_120 (5)
#define RMATR_29LV160_90  (4)
#define RMATR_29LV160_70  (3)

// SDMDR     SDRAM Mode Register    00000330H
// SDTSR     SDRAM Type Selection Register    00000000H
// SDPTR     SDRAM Precharge Timing Register    00000142H
// SDRMR     SDRAM Refresh Mode Register    00000200H
// SDRCR     SDRAM Refresh Timer Count Register    00000200H

#if 1
// initial settings from customer doc.
#define SDMDR_INIT (0x230)  // 230 from the hardware, 330 from doc
#define SDTSR_INIT (0x180 | 0x20 | 0x1) 
#define SDPTR_INIT (0x111) 
#define SDRMR_INIT (0x600) 
#else
// optimized setting "don't be used before qualification"
#define SDMDR_INIT (0x120) 
#define SDTSR_INIT (0x180 | 0x20 | 0x1) 
#define SDPTR_INIT (0x100) 
#define SDRMR_INIT (0x600) 
#endif

// These are used for decoding SEGV types.
// MBCR      Memory Bus Control Register    00000000H
// MESR      Memory Error Status Register    00000000H
// MEAR      Memory Error Address Register    00000000H

// --------------------------------------------------------------------------
#endif // CYGONCE_HAL_VAR_ARCH_H
// End of var_arch.h

⌨️ 快捷键说明

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