aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Palm/Device/EZSumo/IncsPrv/HardwareEZ.h
blob: 2987958ee5995c2e39d45edf30ef7245a9d1f021 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
/******************************************************************************
 *
 * Copyright (c) 1995-1999 Palm Computing, Inc. or its subsidiaries.
 * All rights reserved.
 *
 * File: HardwareEZ.h
 *
 * Description:
 *		Hardware Equates for the EZ (Razor) platform. This header file
 *  contains equates specific to Hardware platform EZ.
 *  It is included only in the modules "ROMHardwareEZ.c" and
 *  "AMXHardwareEZ.c".
 *
 * History:
 *   11/14/97  srj Started life from HardwareTD1.h
 *		3/30/99	JB	Added hwrEZPortDJerryAntenna
 *		3/31/99	JB Added more Jerry pin definitions
 *    6/04/99	srj Added EZ specific stuff from HardwarePrv.h
 *
 *****************************************************************************/

#ifdef	NON_PORTABLE									// So app's don't mistakenly include this

#ifndef __HARDWAREEZ_H__
#define __HARDWAREEZ_H__



/************************************************************************
 * Sumo/Brad/Sparky.  Definitions from HardwarePrv.h.
 ***********************************************************************/
// Define the base of card 0 and the size of each card slot.
#define	hwrCardBase0		0x00000000L					// starts here (just above Dheap)
#define	hwrCardSize			0x20000000L					// Size of each card slot
#define	hwrFlashBase		0x10C00000L					// Base of Flash ROM
//#define	hwrFlashSize		0x00200000L					// Size of Flash ROM
#define	hwrCardOffsetMask	0x1FFFFFFFL					// Used to convert a pointer to a card offset
#define	hwrMinBigROMOffset 0x00008000L				// Minimum ROM offset to BigROM


// Define the Flash width
#define	hwrROMWidth			2

/************************************************************************
 * Jerry EZ cost reduction.  Set the PLD address.
 ***********************************************************************/
#define	hwrJerryPldBase		0x11000000L



/************************************************************************
 * Port B Bit settings
 ************************************************************************/
#define	hwrEZPortBBacklightOn			0x01			// Backlight (Cobra 2)
#define	hwrEZPortBFree1					0x01			// (-) FREE1
#define	hwrEZPortBLCDVccOff				0x02			// (L) LCD Vcc On
#define	hwrEZPortBLCDAdjOn				0x40			// (L) LCD Contrast Adjust On (Brad Rev 0)
#define	hwrEZPortBFree4					0x40			// (-) FREE4
//#define  hwrEZPortBIORail2          	0x40			// (L) I/O Rail Pin 2

//#define 	hwrEZPortBIORail2Bit				6				// Bit number of Rail Pin 2

/************************************************************************
 * Port C Bit settings
 ************************************************************************/
#define	hwrEZPortCLCDEnableOn			0x80			// (H) LCD Enable
/************************************************************************
 * Port D Bit settings
 ************************************************************************/
#define	hwrEZPortDDockButton				0x10		// (L) Dock Button				(aka IRQ1) (edge, negative)
#define  hwrEZPortD232Enable				0x20		// (L) Serial Shutdown on Sumo Rev 1	(aka IRQ2)
#define	hwrEZPortDJerryAntenna			0x20		// Jerry Antenna interrupt (aka IRQ2)
//#define	hwrEZPortDDockIn				0x20		// (L) Dock Input (free on Sumo Rev 0)	(aka IRQ2)
#define	hwrEZPortDFree3					0x40		// (-) FREE3						(aka IRQ3)
//#define	hwrEZPortDIORail1				0x40		// (L) IO Rail 1					(aka IRQ3)
#define	hwrEZPortDPowerFail				0x80		// (L) Power Fail Interrupt	(aka IRQ6) (level, low)
#define  hwrEZPortDKbdCol0             0x01     // (H) Keyboard Column 0		(aka INT0)
#define  hwrEZPortDKbdCol1             0x02     // (H) Keyboard Column 1		(aka INT1)
#define  hwrEZPortDKbdCol2             0x04     // (H) Keyboard Column 2		(aka INT2)
#define  hwrEZPortDKbdCol3             0x08     // (H) Keyboard Column 3		(aka INT3)
#define  hwrEZPortDKeyBits					0x0F     // (H) All Keyboard Columns

// DANGER: Writing to PortD to (for example) toggle the serial enable bit has potential side effects.
// For example, if we |= or &= the serial enable bit (as PrvSerialEnable used to do) and inadvertently
// write other one-bits to portDData, we may clear pending edge interrupts on those other bits, like
// for example, the keyboard edge interrupt bits.  Though the docs are somewhat ambiguous (surprise!),
// it would APPEAR that this is only the case for the keyboard interrupt bits (INT0-INT3).  This DID
// cause problems when re-enabling the serial port during HwrWake->SerialWake, as it would clear any
// pending keyboard interrupts that woke the device (such as the power key or application buttons).
// SO, when writing to the serial enable bit, we MUST be sure to mask against hwrEZPortDDataMaskBeforeWrite
// before writing to portDData.  This is ALSO VERY IMPORTANT for anyone who might make use of bit 6 (IRQ3)
// as an output pin.  Whenever writing to hwrEZPortDFree3, one should always read portDData first, twiddle
// hwrEZPortDFree3 as appropriate, and with hwrEZPortDDataMaskBeforeWrite and finally write to portDData.
// Maybe in future parts, Moto can spare us a PortDIntStatus register, separate from portDData.
#define  hwrEZPortDDataMaskBeforeWrite	(~(hwrEZPortDKeyBits))	// Don't write ones to these bits!

// OBSOLETE
#define	hwrEZPortDKeyRow0					0x0F		// (H) App keys on row 0
#define	hwrEZPortDKeyRow1					0x3		// (H) PgUp/PgDn on row 1
#define	hwrEZPortDKeyRow2					0x3		// (H) Power and Contrast on row 2
#define  hwrEZPortDKeyOffset           0x0      // bits to shift to put Col 0 in msb

//#define  hwrEZPortDIORail1Bit				6			// Bit number of Rail Pin 1
//#define	hwrEZPortDIntRailBit				3			// Bit number for Rail Pin 1 in Port D interrupt reg.


/************************************************************************
 * Port E Bit settings
 ************************************************************************/
#define	hwrEZPortESpiTxD					0x01		// (L) SPI TXD (Internal)
#define	hwrEZPortESpiRxD					0x02		// (L) SPI RXD (Internal)
#define  hwrEZPortESpiClk					0x04		// SPI Clock
#define	hwrEZPortESpiBits					0x07		// all the SPI bits
#define  hwrEZPortERXD						0x10		// external RXD
#define  hwrEZPortETXD						0x20		// external TXD
#define  hwrEZPortECTS						0x80		// external CTS

/************************************************************************
 * Port F Bit settings
 ************************************************************************/
#define	hwrEZPortFContrastPWM		0x01			// (L) PWM output for LCD contrast (Sumo)
#define	hwrEZPortFLCDAdjOn			0x01			// (L) LCD Contrast Adjust On (Brad Rev 1)
#define 	hwrEZPortFJerryFReset		0x01			// Jerry flash reset
#define	hwrEZPortFPenIO				0x02			// (L) Pen Interrupt,Pen I/O
#define	hwrEZPortF232Enable			0x04			// (L) Shutdown Serial
#define	hwrEZPortFJerryPlatform		0x04			// Jerry-specific HW detect
#define	hwrEZPortFCobra2KbdRow0		0x20			// (L) Keyboard Row 0 (Cobra 2)	
#define	hwrEZPortFCobra2KbdRow1		0x40			// (L) Keyboard Row 1 (Cobra 2)
#define	hwrEZPortFCobra2KbdRow2		0x80			// (L) Keyboard Row 2 (Cobra 2)
#define  hwrEZPortFCobra2KbdRows		0xE0        // (L) All Keyboard Rows (Cobra 2)
#define	hwrEZPortFKbdRow0				0x10			// (L) Keyboard Row 0	(Sumo/Brad)
#define	hwrEZPortFKbdRow1				0x20			// (L) Keyboard Row 1	(Sumo/Brad)	
#define	hwrEZPortFKbdRow2				0x40			// (L) Keyboard Row 2	(Sumo/Brad)	
#define  hwrEZPortFKbdRows				0x70        // (L) All Keyboard Rows	(Sumo/Brad)
#define	hwrEZPortFBacklightOn		0x80			// (L) Backlight on		(Sumo/Brad)
/************************************************************************
 * Port G Bit settings
 ************************************************************************/
#define hwrEZPortGDTACK					0x01			// (L) DTACK
#define hwrEZPortFree5					0x02			// (-) FREE5
#define  hwrEZPortGIDDetect			0x04        // (L) ID select (drives kbd)
#define	hwrEZPortGLiIonVoltReadDis	0x08			// (L) Enable A/D Voltage Divider
#define	hwrEZPortGJerry12Venable	0x08			// Jerry 12Volt enable for flash
#define	hwrEZPortGIRShutdown			0x10			// (H) Shutdown IRDA
#define	hwrEZPortGADCOff				0x20			// (L) A/D Select


/************************************************************************
 * SPIM Base Configuration
 ************************************************************************/
#define	hwrEZSPIMBaseControl		(hwrEZ328SPIMControlRateDiv16 |		\
												 hwrEZ328SPIMControlIntEnable |		\
												 hwrEZ328SPIMControlInvPolarity |	\
												 hwrEZ328SPIMControlOppPhase  |  	\
												 16-1)


/************************************************************************
 * Macros for turning write-protection on/off
 * These are used in-line for MemSemaphoreReserve and MemSemaphoreRelease
 *  for performance reasons.
 ************************************************************************/
#define	hwrWriteProtectOff()														\
	{																						\
	HwrDBallPtr baseP = (HwrDBallPtr)hwr68328Base;							\
																							\
	/* Clr read-only bit in chip select register for storage area */	\
	baseP->csDSelect &= ~(0x2000);												\
																							\
	}

#ifndef	BUILD_OPTION_WP_OFF
#define	hwrWriteProtectOn()														\
	{																						\
	HwrDBallPtr baseP = (HwrDBallPtr)hwr68328Base;							\
																							\
	/* Set read-only bit in chip select register for storage area */	\
	baseP->csDSelect |= (0x2000);													\
																							\
	}
#else
#define	hwrWriteProtectOn()	
#endif


/************************************************************************
 *Initial values for the PLL. We set the system clock to be VCO/1 so
 *  the system clock speed becomes:
 *
 *  32768 * ((hwrEZFreqSelP + 1) * 14 + hwrEZFreqSelQ + 1)
 *   --------------------------------------------------------
 *                          VCO divider
 ************************************************************************/
// NEW ASIC versions run at 16.580608 Mhz
#define	hwrEZPLLControl			(hwrEZ328PLLControlClkEn | 		\
											 hwrEZ328PLLControlSysDMADiv1 | 	\
											 hwrEZ328PLLControlPixDMADiv1 |  \
											 hwrEZ328PLLControlDMAVCODiv1)
// The Frequency needs to be lowered on the older DragonBall-EZ processors.
//
// The values are:
// 15MHz:      		Allows processor to operate without screen noise within the voltage
//             		range specified for the Power Supply (3.3V +- 100mV)
//             		P = 0x1F,  Q=0x9
// 13.5 MHz:   		Brings processor into voltage spec (runs as low as 3.0V without noise)
//             		P = 0x1C,  Q=0x7
//
// The following are the OK values for 0J83C processors (id 4)
// 16.580608 is the spec'd frequency for the part. HK admits that 20MHz works
// 16.580608MHz:	P = 0x23,	Q=0x01
// 20.0 MHz:   		P = 0x2A,	Q=0x9

#define	hwrEZFreqSelPQ_13_5MHz	(0x1C | (0x07 << 8))

#define	hwrEZFreqSelPQ_14_75MHz	(0x1F | (0x01 << 8))

#define	hwrEZFreqSelPQ_15MHz	(0x1F | (0x09 << 8))

#define	hwrEZFreqSelPQ_16MHz	(0x23 | (0x01 << 8))

#define	hwrEZFreqSelPQ_20MHz	(0x2A | (0x09 << 8))


// Time needed to get to full battery voltage on EZ
// this is used only in case of a constant-voltage charger, and Razor doesn't use that
// right now.  See PrvSystemTimerProc() for more gory details.
#if 0
#define  hwrEZSecToFullCharge		60
#endif

// Bit definitions for Miscflags that are needed for the EZSumo HAL
//#define	hwrEZSubIDCobra2Mask 0x6
#define	hwrMiscFlagExtNewKeyboard		0x00000006		// This value tells us we have Cobra2 keyboard
#define	hwrMiscFlagExtNewKeyboardMask	0x00000006		// Mask for the Cobra2 bits
#define	hwrMiscFlagExt20MHzSpeed		0x00000001		// Set on Cobra 2 for 20MHz operation

#endif 	//__HARDWAREEZ_H__

#endif 	// NON_PORTABLE