00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef HWAPI_H
00034 #define HWAPI_H
00035
00036
00037
00038
00039 typedef void interrupt (*InterruptHandler)(void);
00040
00041
00042
00043
00044 #ifdef _MSC_VER
00045 #ifdef FP_SEG
00046 #undef FP_SEG
00047 #endif
00048 #define FP_SEG(ptr) ((unsigned int)(((unsigned long)ptr)>>16))
00049
00050 #ifdef FP_OFF
00051 #undef FP_OFF
00052 #endif
00053 #define FP_OFF(ptr) ((unsigned int)(((unsigned long)ptr)&0xFFFF))
00054 #endif
00055
00056
00057
00058
00059
00060
00061 #define PFE_ENABLE_DATA_BUS 0x80
00062 #define PFE_ENABLE_NON_MULTI_ADDR_BUS 0x81
00063 #define PFE_ENABLE_PIO 0x82
00064 #define PFE_ENABLE_PCS 0x83
00065 #define PFE_ENABLE_EXTERNAL_IRQ 0x84
00066 #define PFE_ENABLE_EXTERNAL_TIMER 0x85
00067 #define PFE_SET_EDGE_LEVEL_INTR_MODE 0x86
00068 #define PFE_ENABLE_PWD 0x87
00069 #define PFE_ENABLE_EXTERNAL_DMA 0x88
00070 #define PFE_ENABLE_INT_CASCADE_MODE 0x89
00071
00072 #define HAL_SET_INT0_VECT 0x10
00073 #define HAL_READ_DATA_BUS 0x80
00074 #define HAL_WRITE_DATA_BUS 0x81
00075 #define HAL_READ_PIO 0x82
00076 #define HAL_WRITE_PIO 0x83
00077 #define HAL_INSTALL_ISR 0x84
00078 #define HAL_INIT_TIMER 0x85
00079 #define HAL_START_TIMER 0x86
00080 #define HAL_STOP_TIMER 0x87
00081 #define HAL_READ_TIMER_COUNT 0x88
00082 #define HAL_WRITE_TIMER_COUNT 0x89
00083 #define HAL_GET_FREQUENCIES 0x8A
00084 #define HAL_SET_DUTY_CYCLE_WAVEFORM 0x8B
00085 #define HAL_READ_SPECIFIC_PIO 0x8C
00086 #define HAL_WRITE_SPECIFIC_PIO 0x8D
00087 #define HAL_GIVE_EOI 0x8E
00088 #define HAL_GET_SET_WATCHDOG_MODE 0x90
00089 #define HAL_REFRESH_WATCHDOG 0x91
00090 #define HAL_BLOCK_READ_DATA_BUS 0xA0
00091 #define HAL_BLOCK_WRITE_DATA_BUS 0xA1
00092 #define HAL_START_DMA 0xB0
00093 #define HAL_STOP_DMA 0xB1
00094 #define HAL_GET_DMA_INFO 0xB2
00095 #define HAL_INIT_REST_NON_VOLATILE_DATA 0xC0
00096 #define HAL_SAVE_NON_VOLATILE_DATA 0xC1
00097 #define HAL_GET_REBOOT_REASON 0xC2
00098
00099
00100
00101
00102
00103 #define PFE_INT 0xA2
00104 #define HAL_INT 0xA1
00105
00106
00107
00108
00109
00110 #define DIRECT_IO
00111
00112
00113 #define PIO_I 1
00114 #define PIO_IPU 2
00115 #define PIO_IPD 3
00116 #define PIO_O1 4
00117 #define PIO_O0 5
00118
00119 #define A0 0
00120 #define A1 1
00121 #define A2 2
00122
00123 #define GET_FRQ_PROCESSOR 0
00124 #define GET_FRQ_TIMER 1
00125 #define GET_FRQ_MAX_BAUD 2
00126 #define GET_FRQ_PWD 3
00127
00128 #ifdef DIRECT_IO
00129 #define hal_inportb(x) inportb(x)
00130 #define hal_outportb(x,y) outportb(x,y)
00131 #else
00132 #define hal_inportb(x) hal_read_bus(x,0xFFFF,0x0000)
00133 #define hal_outportb(x,y) hal_write_bus(x,y,0xFFFF,0x0000)
00134 #endif
00135
00136 #define hal_inportb_block hal_readblock_bus
00137 #define hal_outportb_block hal_writeblock_bus
00138
00139
00140
00141 #define DMA_PRIO (1<<0)
00142 #define DMA_SYNCSRC (1<<1)
00143 #define DMA_SYNCDEST (1<<2)
00144 #define DMA_DOINTR (1<<3)
00145 #define DMA_SRCINC (1<<5)
00146 #define DMA_SRCDEC (1<<6)
00147 #define DMA_SRCIO (0)
00148 #define DMA_SRCMEM (1<<7)
00149 #define DMA_DESTINC (1<<8)
00150 #define DMA_DESTDEC (1<<9)
00151 #define DMA_DESTIO (0)
00152 #define DMA_DESTMEM (1<<10)
00153 #define DMA_WORDTRANS (1<<11)
00154
00155
00156 #define DMA_CH0 0
00157 #define DMA_CH1 1
00158
00159
00160
00161
00162
00163
00164
00165
00166 typedef struct
00167 {
00168 unsigned count;
00169 union
00170 {
00171 void *mem;
00172 unsigned io;
00173 } src;
00174
00175 union
00176 {
00177 void *mem;
00178 unsigned io;
00179 } dest;
00180
00181 unsigned ctrl_reg;
00182 } Dma_Info;
00183
00184
00185 #ifndef MAX_RETENTIVE_AREAS
00186
00187 #define MAX_RETENTIVE_AREAS 10
00188 #endif
00189 typedef struct _REMOP
00190 {
00191 unsigned entries;
00192 unsigned segment;
00193
00194 struct REMOP_ENTRY
00195 {
00196 unsigned offs;
00197 unsigned size;
00198 unsigned maxsize;
00199 unsigned elemsize;
00200 unsigned distance;
00201 }x[MAX_RETENTIVE_AREAS];
00202 } Remop;
00203
00204
00205
00206
00207
00208
00209
00210
00211 void pfe_enable_bus (unsigned mask, unsigned char ale);
00212 void pfe_enable_adr (unsigned char adr);
00213 void pfe_enable_pcs (unsigned char pcs);
00214 void pfe_enable_int (unsigned char irq);
00215 void pfe_enable_timer (unsigned mode);
00216 void pfe_enable_pio (unsigned pio, unsigned char mode);
00217 void pfe_get_pio_state (unsigned *wPio, unsigned *wInp, unsigned *wOut);
00218 void pfe_set_edge_level_intr_mode(unsigned char mode, unsigned mask);
00219 void pfe_enable_pwd(void);
00220 int pfe_enable_external_dma( unsigned char channel);
00221 void pfe_enable_int_cascade_mode(void);
00222
00223
00224
00225 unsigned char hal_read_bus (unsigned adr, unsigned wAND, unsigned wXOR);
00226 void hal_write_bus (unsigned adr, unsigned char value, unsigned wAND, unsigned wXOR);
00227 void hal_readblock_bus (unsigned adr0, unsigned adr1, unsigned char *buf, unsigned cnt);
00228 void hal_writeblock_bus (unsigned adr0, unsigned adr1, unsigned char *buf, unsigned cnt);
00229
00230 void hal_get_pio_output_state (unsigned *pins, unsigned wOut);
00231
00232 unsigned hal_read_pios (unsigned wAND, unsigned wXOR);
00233 void hal_write_pios (unsigned value, unsigned wAND, unsigned wXOR);
00234
00235
00236 unsigned char hal_read_pio (unsigned char pio);
00237 void hal_write_pio (unsigned char pio, unsigned value);
00238
00239 InterruptHandler hal_install_isr (unsigned irq, unsigned count, InterruptHandler handler);
00240 void hal_init_timer (unsigned char timer, unsigned mode, unsigned divider);
00241 void hal_start_timer (unsigned char timer);
00242 void hal_stop_timer (unsigned char timer);
00243 unsigned hal_read_timer_count (unsigned char timer, unsigned far *maxcount);
00244 void hal_write_timer_count (unsigned char timer, unsigned counter);
00245 unsigned char hal_set_watchdog_mode (unsigned char mode);
00246 void hal_refresh_watchdog (void);
00247
00248 unsigned long hal_get_frequencies( unsigned char frq );
00249 void hal_set_duty_cycle_waveform( unsigned char timer, int mode,
00250 unsigned clock_divider );
00251 void hal_give_eoi( unsigned char intr_no );
00252
00253
00254 void hal_start_dma( unsigned char channel, Dma_Info *dmaInfo );
00255 int hal_stop_dma( unsigned char channel );
00256 int hal_get_dma_info( unsigned char channel, Dma_Info *dmaInfo );
00257
00258
00259 int hal_init_non_volatile_data( Remop *remop );
00260 void hal_save_non_volatile_data(void);
00261
00262 int hal_get_reboot_reason(void);
00263
00264
00265 #endif
00266