📄 var_arch.h
字号:
// 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 + -