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

📄 hal_hwio.h

📁 ecos为实时嵌入式操作系统
💻 H
字号:
#ifndef CYGONCE_HAL_HAL_HWIO_H#define CYGONCE_HAL_HAL_HWIO_H/*=============================================================================////      hal_hwio.h////      HAL Support for IO to platform-specific devices////=============================================================================//####COPYRIGHTBEGIN####//// -------------------------------------------// The contents of this file are subject to the Cygnus eCos Public License// Version 1.0 (the "License"); you may not use this file except in// compliance with the License.  You may obtain a copy of the License at// http://sourceware.cygnus.com/ecos// // Software distributed under the License is distributed on an "AS IS"// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the// License for the specific language governing rights and limitations under// the License.// // The Original Code is eCos - Embedded Cygnus Operating System, released// September 30, 1998.// // The Initial Developer of the Original Code is Cygnus.  Portions created// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.// -------------------------------------------////####COPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s):   hmt// Contributors:        hmt// Date:        1999-01-11// Purpose:     HAL Support for IO to platform-specific devices// Description: Macros to access the 86940 SPARClite companion chip// Usage:       #include <cyg/hal/hal_hwio.h>////####DESCRIPTIONEND####////===========================================================================*/#include <pkgconf/system.h>#include <pkgconf/hal.h>#include <pkgconf/hal_sparclite.h>#include <pkgconf/hal_sparclite_sleb.h>#include <cyg/infra/cyg_type.h>/*---------------------------------------------------------------------------*//* MB86940 flags and the like                                                *//* Interrupt trigger modes. */#define HAL_SPARC_86940_TRIG_LEVEL_H   0   /* trigger on high level   */#define HAL_SPARC_86940_TRIG_LEVEL_L   1   /* trigger on low level    */#define HAL_SPARC_86940_TRIG_EDGE_H    2   /* trigger on rising edge  */#define HAL_SPARC_86940_TRIG_EDGE_L    3   /* trigger on falling edge *//* Timer prescaler register values */#define HAL_SPARC_86940_PRS_EXTCLK    0x8000#define HAL_SPARC_86940_PRS_ODIV1     (0<<8)#define HAL_SPARC_86940_PRS_ODIV2     (1<<8)#define HAL_SPARC_86940_PRS_ODIV4     (2<<8)#define HAL_SPARC_86940_PRS_ODIV8     (3<<8)#define HAL_SPARC_86940_PRS_ODIV16    (4<<8)#define HAL_SPARC_86940_PRS_ODIV32    (5<<8)#define HAL_SPARC_86940_PRS_ODIV64    (6<<8)#define HAL_SPARC_86940_PRS_ODIV128   (7<<8)/* Timer control register values */#define HAL_SPARC_86940_TCR_CE          (1<<11)#define HAL_SPARC_86940_TCR_CLKINT      (0<<9)#define HAL_SPARC_86940_TCR_CLKEXT      (1<<9)#define HAL_SPARC_86940_TCR_CLKPRS      (2<<9)#define HAL_SPARC_86940_TCR_CLKRSVD     (3<<9)#define HAL_SPARC_86940_TCR_OUTSAME     (0<<7)#define HAL_SPARC_86940_TCR_OUTHIGH     (1<<7)#define HAL_SPARC_86940_TCR_OUTLOW      (2<<7)#define HAL_SPARC_86940_TCR_OUTC3       (3<<7)#define HAL_SPARC_86940_TCR_INV         (1<<6)#define HAL_SPARC_86940_TCR_PER_INT     (0<<3)#define HAL_SPARC_86940_TCR_TO_INT      (1<<3)#define HAL_SPARC_86940_TCR_SQWAVE      (2<<3)#define HAL_SPARC_86940_TCR_SW_WATCH    (3<<3)#define HAL_SPARC_86940_TCR_HW_WATCH    (4<<3)#define HAL_SPARC_86940_TCR_LEVEL_L     0#define HAL_SPARC_86940_TCR_LEVEL_H     1#define HAL_SPARC_86940_TCR_EDGE_H      2#define HAL_SPARC_86940_TCR_EDGE_L      3#define HAL_SPARC_86940_TCR_EDGE        4/* serial mode register values */#define HAL_SPARC_86940_SER_STOP0       (0<<6)#define HAL_SPARC_86940_SER_STOP1       (1<<6)#define HAL_SPARC_86940_SER_STOP1_5     (2<<6)#define HAL_SPARC_86940_SER_STOP2       (3<<6)#define HAL_SPARC_86940_SER_NO_PARITY   (0<<4)#define HAL_SPARC_86940_SER_ODD_PARITY  (1<<4)#define HAL_SPARC_86940_SER_EVEN_PARITY (3<<4)#define HAL_SPARC_86940_SER_5BITS       (0<<2)#define HAL_SPARC_86940_SER_6BITS       (1<<2)#define HAL_SPARC_86940_SER_7BITS       (2<<2)#define HAL_SPARC_86940_SER_8BITS       (3<<2)#define HAL_SPARC_86940_SER_MODE_SYNCH  0#define HAL_SPARC_86940_SER_DIV1_CLK    1#define HAL_SPARC_86940_SER_DIV16_CLK   2#define HAL_SPARC_86940_SER_DIV64_CLK   3/* serial command register (asynch) */#define HAL_SPARC_86940_SER_CMD_EHM     (1<<7)#define HAL_SPARC_86940_SER_CMD_IRST    (1<<6)#define HAL_SPARC_86940_SER_CMD_RTS     (1<<5)#define HAL_SPARC_86940_SER_CMD_EFR     (1<<4)#define HAL_SPARC_86940_SER_CMD_BREAK   (1<<3)#define HAL_SPARC_86940_SER_CMD_RXEN    (1<<2)#define HAL_SPARC_86940_SER_CMD_DTR     (1<<1)#define HAL_SPARC_86940_SER_CMD_TXEN    (1<<0)/* serial status register */#define HAL_SPARC_86940_SER_STAT_DSR    (1<<7)#define HAL_SPARC_86940_SER_STAT_BREAK  (1<<6)#define HAL_SPARC_86940_SER_STAT_FERR   (1<<5)#define HAL_SPARC_86940_SER_STAT_OERR   (1<<4)#define HAL_SPARC_86940_SER_STAT_PERR   (1<<3)#define HAL_SPARC_86940_SER_STAT_TXEMP  (1<<2)#define HAL_SPARC_86940_SER_STAT_RXRDY  (1<<1)#define HAL_SPARC_86940_SER_STAT_TXRDY  (1<<0)#define HAL_SPARC_86940_CHIP_ASI        4#define HAL_SPARC_86940_CHIP_BASE       0x10000000#define HAL_SPARC_86940_REGADDR_SHIFT   2#define HAL_SPARC_86940_REGVAL_SHIFT    16/*---------------------------------------------------------------------------*//* Register addresses                                                        */// The "interesting" IO parts are in Address Space Four:#define HAL_SPARC_ASI_4_READ( addr, res )                                   \    asm volatile(                                                           \        "lda [ %1 ] 4, %0"                                                  \        : "=r"(res)                                                         \        : "r"(addr)                                                         \    );#define HAL_SPARC_ASI_4_WRITE( addr, val )                                  \    asm volatile(                                                           \        "sta %0, [ %1 ] 4"                                                  \        :                                                                   \        : "r"(val),"r"(addr)                                                \    );#define HAL_SPARC_86940_BASE (0x10000000)  // in ASI 4// The 86940 is connected to the upper 16 bits!#define HAL_SPARC_86940_READ( reg, result ) CYG_MACRO_START                 \        cyg_uint32 hires;                                                   \        HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires );          \        hires >>= 16;                                                       \        result = hires;                                                     \CYG_MACRO_END// THIS IS ONLY HERE FOR DEBUGGING:// The 86940 is connected to the upper 16 bits!// And seems to be an unreliable deprecated thing...// so read it 3 times and believe the majority.#define HAL_SPARC_86940_READ3( reg, result ) CYG_MACRO_START                \        cyg_uint32 hires1;                                                  \        cyg_uint32 hires2;                                                  \        cyg_uint32 hires3;                                                  \        HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires1 );         \        HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires2 );         \        HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires3 );         \        result = ((hires1&hires2)|(hires1&hires3)|(hires2&hires3)) >> 16;   \CYG_MACRO_END#define HAL_SPARC_86940_WRITE( reg, value ) CYG_MACRO_START                 \        cyg_uint32 hival = (value) << 16;                                   \        HAL_SPARC_ASI_4_WRITE( reg + HAL_SPARC_86940_BASE, hival );         \CYG_MACRO_END// Registers are at word offsets#define HAL_SPARC_86940_REG_SDTR0_TXDATA ( 0x08 * 4 )#define HAL_SPARC_86940_REG_SDTR0_RXDATA ( 0x08 * 4 )#define HAL_SPARC_86940_REG_SDTR0_STAT   ( 0x09 * 4 )#define HAL_SPARC_86940_REG_SDTR0_CTRL   ( 0x09 * 4 )#define HAL_SPARC_86940_REG_SDTR1_TXDATA ( 0x0c * 4 )#define HAL_SPARC_86940_REG_SDTR1_RXDATA ( 0x0c * 4 )#define HAL_SPARC_86940_REG_SDTR1_STAT   ( 0x0d * 4 )#define HAL_SPARC_86940_REG_SDTR1_CTRL   ( 0x0d * 4 )#define HAL_SPARC_86940_REG_PRS0         ( 0x10 * 4 )#define HAL_SPARC_86940_REG_TCR0         ( 0x11 * 4 )#define HAL_SPARC_86940_REG_RELOAD0      ( 0x12 * 4 )#define HAL_SPARC_86940_REG_CNT0         ( 0x13 * 4 )#define HAL_SPARC_86940_REG_PRS1         ( 0x14 * 4 )#define HAL_SPARC_86940_REG_TCR1         ( 0x15 * 4 )#define HAL_SPARC_86940_REG_RELOAD1      ( 0x16 * 4 )#define HAL_SPARC_86940_REG_CNT1         ( 0x17 * 4 )#define HAL_SPARC_86940_REG_TCR2         ( 0x19 * 4 )#define HAL_SPARC_86940_REG_RELOAD2      ( 0x1A * 4 )#define HAL_SPARC_86940_REG_CNT2         ( 0x1B * 4 )#define HAL_SPARC_86940_REG_TCR3         ( 0x1D * 4 )#define HAL_SPARC_86940_REG_RELOAD3      ( 0x1E * 4 )#define HAL_SPARC_86940_REG_CNT3         ( 0x1F * 4 )// Glue together to access them neatly#define HAL_SPARC_86940_SDTR0_TXDATA_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR0_TXDATA, v )#define HAL_SPARC_86940_SDTR0_RXDATA_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR0_RXDATA, r )#define HAL_SPARC_86940_SDTR0_STAT_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR0_STAT, r )#define HAL_SPARC_86940_SDTR0_CTRL_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR0_CTRL, v )#define HAL_SPARC_86940_SDTR1_TXDATA_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR1_TXDATA, v )#define HAL_SPARC_86940_SDTR1_RXDATA_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR1_RXDATA, r )#define HAL_SPARC_86940_SDTR1_STAT_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR1_STAT, r )#define HAL_SPARC_86940_SDTR1_CTRL_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR1_CTRL, v )#define HAL_SPARC_86940_PRS0_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_PRS0, r )#define HAL_SPARC_86940_PRS0_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_PRS0, v )    #define HAL_SPARC_86940_TCR0_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR0, r )#define HAL_SPARC_86940_TCR0_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR0, v )#define HAL_SPARC_86940_RELOAD0_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD0, r )#define HAL_SPARC_86940_RELOAD0_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD0, v )#define HAL_SPARC_86940_CNT0_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT0, r )#define HAL_SPARC_86940_CNT0_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT0, v )#define HAL_SPARC_86940_PRS1_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_PRS1, r )#define HAL_SPARC_86940_PRS1_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_PRS1, v )#define HAL_SPARC_86940_TCR1_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR1, r )#define HAL_SPARC_86940_TCR1_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR1, v )#define HAL_SPARC_86940_RELOAD1_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD1, r )#define HAL_SPARC_86940_RELOAD1_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD1, v )#define HAL_SPARC_86940_CNT1_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT1, r )#define HAL_SPARC_86940_CNT1_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT1, v )#define HAL_SPARC_86940_TCR2_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR2, r )#define HAL_SPARC_86940_TCR2_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR2, v )#define HAL_SPARC_86940_RELOAD2_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD2, r )#define HAL_SPARC_86940_RELOAD2_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD2, v )#define HAL_SPARC_86940_CNT2_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT2, r )#define HAL_SPARC_86940_CNT2_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT2, v )#define HAL_SPARC_86940_TCR3_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR3, r )#define HAL_SPARC_86940_TCR3_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR3, v )#define HAL_SPARC_86940_RELOAD3_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD3, r )#define HAL_SPARC_86940_RELOAD3_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD3, v )#define HAL_SPARC_86940_CNT3_READ( r ) \            HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT3, r )#define HAL_SPARC_86940_CNT3_WRITE( v ) \            HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT3, v )/*---------------------------------------------------------------------------*//* end of hal_hwio.h                                                         */#endif /* CYGONCE_HAL_HAL_HWIO_H */

⌨️ 快捷键说明

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