📄 hal_if.h
字号:
#ifndef CYGONCE_HAL_HAL_IF_H#define CYGONCE_HAL_HAL_IF_H//=============================================================================//// hal_if.h//// HAL header for ROM/RAM calling interface.////=============================================================================//####COPYRIGHTBEGIN####// // ------------------------------------------- // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://www.redhat.com/ // // 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 Configurable Operating System, // released September 30, 1998. // // The Initial Developer of the Original Code is Red Hat. // Portions created by Red Hat are // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. // All Rights Reserved. // ------------------------------------------- // //####COPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s): jskov// Contributors:jskov// Date: 2000-06-07// Purpose: HAL RAM/ROM calling interface// Description: ROM/RAM calling interface table definitions. The layout is a// combination of libbsp and vectors already in use by some// eCos platforms.// Usage: #include <cyg/hal/hal_if.h>// //####DESCRIPTIONEND####////=============================================================================#include <cyg/infra/cyg_type.h> // types & externC#include <cyg/hal/dbg-threads-api.h>#include <cyg/hal/dbg-thread-syscall.h>#include <stdarg.h>#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT//--------------------------------------------------------------------------#ifndef _BSP_HANDLER_T_DEFINED#define _BSP_HANDLER_T_DEFINEDtypedef int (*bsp_handler_t)(int __irq_nr, void *__regs);#endif // _BSP_HANDLER_T_DEFINED//--------------------------------------------------------------------------// Communication interface table. CYGNUM_CALL_IF_CONSOLE_PROCS and// CYGNUM_CALL_IF_DEBUG_PROCS point to instances (possibly the same)// of this table.typedef enum { /* * For serial ports, the control function may be used to set and get the * current baud rate. Usage: * * err = (*__control)(COMMCTL_SETBAUD, int bits_per_second); * err => Zero if successful, -1 if error. * * baud = (*__control)(COMMCTL_GETBAUD); * baud => -1 if error, current baud otherwise. */ __COMMCTL_SETBAUD=0, __COMMCTL_GETBAUD, /* * Install and remove debugger interrupt handlers. These are the receiver * interrupt routines which are used to change control from a running * program to the debugger stub. */ __COMMCTL_INSTALL_DBG_ISR, __COMMCTL_REMOVE_DBG_ISR, /* * Disable comm port interrupt. Returns TRUE if interrupt was enabled, * FALSE otherwise. */ __COMMCTL_IRQ_DISABLE, /* * Enable comm port interrupt. */ __COMMCTL_IRQ_ENABLE, /* * Returns the number of the interrupt vector used by the debug * interrupt handler. */ __COMMCTL_DBG_ISR_VECTOR, /* * Returns the current timeout value and sets a new timeout. * Timeout resolution is in milliseconds. * old_timeout = (*__control)(__COMMCTL_SET_TIMEOUT, * cyg_int32 new_timeout); */ __COMMCTL_SET_TIMEOUT, /* * Forces driver to send all characters which may be buffered in * the driver. This only flushes the driver buffers, not necessarily * any hardware FIFO, etc. */ __COMMCTL_FLUSH_OUTPUT,} __comm_control_cmd_t;#define CYGNUM_COMM_IF_CH_DATA 0#define CYGNUM_COMM_IF_WRITE 1#define CYGNUM_COMM_IF_READ 2#define CYGNUM_COMM_IF_PUTC 3#define CYGNUM_COMM_IF_GETC 4#define CYGNUM_COMM_IF_CONTROL 5#define CYGNUM_COMM_IF_DBG_ISR 6#define CYGNUM_COMM_IF_GETC_TIMEOUT 7#define CYGNUM_COMM_IF_TABLE_SIZE 8typedef volatile CYG_ADDRWORD hal_virtual_comm_table_t[CYGNUM_COMM_IF_TABLE_SIZE];// The below is a (messy) attempt at adding some type safety to the// above array. At the same time, the accessors allow the// implementation to be easily changed in the future (both tag->data// table and structure implementations have been suggested).typedef void* __comm_if_ch_data_t;#define CYGACC_COMM_IF_CH_DATA(_t_) \ ((__comm_if_ch_data_t)((_t_)[CYGNUM_COMM_IF_CH_DATA]))#define CYGACC_COMM_IF_CH_DATA_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_CH_DATA]=(CYG_ADDRWORD)(_x_)typedef void (*__comm_if_write_t)(void* __ch_data, const cyg_uint8* __buf, cyg_uint32 __len);#define CYGACC_COMM_IF_WRITE(_t_, _b_, _l_) \ ((__comm_if_write_t)(((_t_))[CYGNUM_COMM_IF_WRITE]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))#define CYGACC_COMM_IF_WRITE_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_WRITE]=(CYG_ADDRWORD)(_x_)typedef int (*__comm_if_read_t)(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len);#define CYGACC_COMM_IF_READ(_t_, _b_, _l_) \ ((__comm_if_read_t)(((_t_))[CYGNUM_COMM_IF_READ]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))#define CYGACC_COMM_IF_READ_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_READ]=(CYG_ADDRWORD)(_x_)typedef void (*__comm_if_putc_t)(void* __ch_data, cyg_uint8 __ch);#define CYGACC_COMM_IF_PUTC(_t_, _c_) \ ((__comm_if_putc_t)(((_t_))[CYGNUM_COMM_IF_PUTC]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))#define CYGACC_COMM_IF_PUTC_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_PUTC]=(CYG_ADDRWORD)(_x_)typedef cyg_uint8 (*__comm_if_getc_t)(void* __ch_data);#define CYGACC_COMM_IF_GETC(_t_) \ ((__comm_if_getc_t)((_t_)[CYGNUM_COMM_IF_GETC]))(CYGACC_COMM_IF_CH_DATA(_t_))#define CYGACC_COMM_IF_GETC_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_GETC]=(CYG_ADDRWORD)(_x_)typedef int (*__comm_if_control_t)(void *__ch_data, __comm_control_cmd_t __func, ...);#define CYGACC_COMM_IF_CONTROL(_t_, args...) \ ((__comm_if_control_t)(((_t_))[CYGNUM_COMM_IF_CONTROL]))(CYGACC_COMM_IF_CH_DATA(_t_), args)#define CYGACC_COMM_IF_CONTROL_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_CONTROL]=(CYG_ADDRWORD)(_x_)typedef int (*__comm_if_dbg_isr_t)(void *__ch_data, int* __ctrlc, CYG_ADDRWORD __vector, CYG_ADDRWORD __data);#define CYGACC_COMM_IF_DBG_ISR(_t_, _c_, _v_, _d_) \ ((__comm_if_dbg_isr_t)(((_t_))[CYGNUM_COMM_IF_DBG_ISR]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_), (_v_), (_d_))#define CYGACC_COMM_IF_DBG_ISR_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_DBG_ISR]=(CYG_ADDRWORD)(_x_)typedef cyg_bool (*__comm_if_getc_timeout_t)(void* __ch_data, cyg_uint8* __ch);#define CYGACC_COMM_IF_GETC_TIMEOUT(_t_, _c_) \ ((__comm_if_getc_timeout_t)(((_t_))[CYGNUM_COMM_IF_GETC_TIMEOUT]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))#define CYGACC_COMM_IF_GETC_TIMEOUT_SET(_t_, _x_) \ (_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]=(CYG_ADDRWORD)(_x_)//--------------------------------------------------------------------------// Main calling interface table. Will be assigned a location by the // linker script. Both ROM and RAM startup applications will know about// the location.#define CYGNUM_CALL_IF_VERSION 0#define CYGNUM_CALL_IF_ICTRL_TABLE 1#define CYGNUM_CALL_IF_EXC_TABLE 2#define CYGNUM_CALL_IF_DBG_VECTOR 3#define CYGNUM_CALL_IF_KILL_VECTOR 4#define CYGNUM_CALL_IF_CONSOLE_PROCS 5#define CYGNUM_CALL_IF_DEBUG_PROCS 6#define CYGNUM_CALL_IF_FLUSH_DCACHE 7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -