p2.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:15k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.
  7. Module Name:  
  8.   p2.h
  9. Abstract:  
  10.   this file provides headers used for the p2 HAL routines
  11.   
  12. Functions:
  13.   
  14. Notes:
  15. Revision History:
  16. --*/
  17. #ifndef _P2_H_
  18. #define _P2_H_
  19. #define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg))
  20. #define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
  21. #define READ_REGISTER_USHORT(reg) (*(volatile unsigned short * const)(reg))
  22. #define WRITE_REGISTER_USHORT(reg, val) (*(volatile unsigned short * const)(reg)) = (val)
  23. #define READ_REGISTER_UCHAR(reg) (*(volatile unsigned char * const)(reg))
  24. #define WRITE_REGISTER_UCHAR(reg, val) (*(volatile unsigned char * const)(reg)) = (val)
  25. /* Defines for Reference Platform control registers */
  26. #undef SYSTEM_ASIC_REGS_BASE
  27. #define SYSTEM_ASIC_REGS_BASE 0xB0000000
  28. //#define DMA_BUFFER_BASE 0xAC000000
  29. //#define DMA_PHYSICAL_BASE 0x30000000  // S3C2410
  30. #define CPU_BASE (SYSTEM_ASIC_REGS_BASE + 0x00000800)
  31. #define CPU_RR 0x00000008 /* Soft reset register (requires HW mods) */
  32. #define CPU_MR 0x00000004 /* cpu mask register offset */
  33. #define CPU_ISR 0x00000000   /* cpu interrupt status register offset */
  34. #define CPU_STATUS_BASE (SYSTEM_ASIC_REGS_BASE + 0x400)
  35. #define CPU_CSR 0x00
  36. #define FLASH_BUSY 0x80
  37. #define FLASH_POWER_DOWN 0x40
  38. #define DISCHARGE_RECHARGE 0x20
  39. #define AUX_POWER_ENABLE 0x10
  40. #define ERROR_LED 0x08
  41. #define BOOT_RESET 0x04
  42. #define DOCKED 0x02
  43. #define POWER_OFF_INTR 0x01
  44. /* 
  45.  * Interrupt bit positions are determined by the slot numbers of 
  46.  * the cards in the system.  This information is in the VHDL file.
  47.  */
  48. #define SYSTEM_INTR 0x00000001  /* PCMCIA or On/Off switch */
  49. #define DEBUG_SER_INTR 0x00000004  /* it is not really used */
  50. #define PRODUCT_SER_INTR 0x00000008
  51. #define IR_INTR 0x00000080
  52. #define ETHER_INTR 0x00000100
  53. #define KEYB_INTR 0x00000040
  54. #define TOUCH_AUDIO_ADC_INTR 0x00000020
  55. /*
  56.  * The "SLOTs" correspond to "Master" fields in the VHDL file
  57.  * They have to be renamed to avoid the confusion.
  58.  */
  59. #define DEBUG_SER_SLOT      0 
  60. #define DISP_SLOT           1
  61. #define IR_SLOT             3
  62. #define PRODUCT_SER_SLOT    4
  63. #define TOUCH_SOUND_SLOT    2
  64. /* 
  65.  * Display defines.
  66.  * The address for the display DMA locations on the P2 are the same as the PeRP.
  67.  */
  68. #define DISP_BASE    (SYSTEM_ASIC_REGS_BASE + 0x1000)
  69. #define DISP_CSR 0x0004 /* offset from display base reg */
  70. #define DISP_XSIZE 0x0008 /* offset from display base reg */
  71. #define DISP_YSIZE 0x000C /* offset from display base reg */
  72. #define DISP_WR_DMA  (CPU_BASE + (DISP_SLOT * 2 * 0x10000) + 0x10000)
  73. #define DISP_DMA_LOW 0x0010
  74. #define DISP_DMA_HIGH 0x0014
  75. #define DISP_CSR 0x0004
  76. #define LCD_BIAS_ON 0x0002
  77. #define LCD_ON 0x0004
  78. #define LCD_DISPLAY_ENABLE 0x0008
  79. // This buff is now offset via a constant
  80. //#define DISP_DMA_BASE (DMA_BUFFER_BASE + 0x00100000)  // S3c2400x01
  81. //#define DISP_DMA_PHYS (DMA_PHYSICAL_BASE + 0x00100000)
  82. /* 
  83.  * Serial and IR defines
  84.  */
  85. #define PRODUCT_SER_BASE (SYSTEM_ASIC_REGS_BASE + 0x4000)
  86. #define DEBUG_SER_BASE (SYSTEM_ASIC_REGS_BASE + 0x2000)
  87. #define IR_BASE         (SYSTEM_ASIC_REGS_BASE + 0x8000)
  88. #define SER_CSR_A 0x0000 /* offset from serial base reg */
  89. #define SER_CSR_B 0x0004 /* offset from serial base reg */
  90. #define DEBUG_SER_RX_DMA_LOW    (CPU_BASE + 
  91.  (DEBUG_SER_SLOT * 2 * 0x10000 + 0x0010))
  92. #define DEBUG_SER_RX_DMA_HIGH   (CPU_BASE + 
  93.  (DEBUG_SER_SLOT * 2 * 0x10000 + 0x0014))
  94. #define DEBUG_SER_TX_DMA_LOW    (CPU_BASE + 
  95.  (DEBUG_SER_SLOT * 2 * 0x10000 + 0x10010))
  96. #define DEBUG_SER_TX_DMA_HIGH   (CPU_BASE + 
  97.  (DEBUG_SER_SLOT * 2 * 0x10000 + 0x10014))
  98. #define PRODUCT_SER_RX_DMA_LOW    (CPU_BASE + 
  99.  (PRODUCT_SER_SLOT * 2 * 0x10000 + 0x0010))
  100. #define PRODUCT_SER_RX_DMA_HIGH   (CPU_BASE + 
  101.  (PRODUCT_SER_SLOT * 2 * 0x10000 + 0x0014))
  102. #define PRODUCT_SER_TX_DMA_LOW    (CPU_BASE + 
  103.  (PRODUCT_SER_SLOT * 2 * 0x10000 + 0x10010))
  104. #define PRODUCT_SER_TX_DMA_HIGH   (CPU_BASE + 
  105.  (PRODUCT_SER_SLOT * 2 * 0x10000 + 0x10014))
  106. #define IR_RX_DMA_LOW    (CPU_BASE + 
  107.  (IR_SLOT * 2 * 0x10000 + 0x0010))
  108. #define IR_RX_DMA_HIGH   (CPU_BASE + 
  109.  (IR_SLOT * 2 * 0x10000 + 0x0014))
  110. #define IR_TX_DMA_LOW    (CPU_BASE + 
  111.  (IR_SLOT * 2 * 0x10000 + 0x10010))
  112. #define IR_TX_DMA_HIGH   (CPU_BASE + 
  113.  (IR_SLOT * 2 * 0x10000 + 0x10014))
  114. // serialCsrA's fields:
  115. #define SERA_RX_CHARACTER_INTR  0x8000
  116. #define SERA_RX_INTR        0x4000
  117. #define SERA_RX_END_INTR       0x2000
  118. #define SERA_RX_FRAME_ERROR_INTR 0x1000
  119. #define SERA_RX_CHANGED_INTR   0x0400
  120. #define SERA_RX_OVERRUN_INTR     0x0200
  121. #define SERA_RI                  0x0080
  122. #define SERA_DSR                 0x0040
  123. #define SERA_TX_FULL             0x0020
  124. #define SERA_TX_INTR  0x0010
  125. #define SERA_TX_END_INTR  0x0008
  126. #define SERA_CTS                 0x0004
  127. #define SERA_CD                  0x0002
  128. #define SERA_SERIAL_ON           0x0001
  129. #define SERA_INTR_MASK  (SERA_RX_CHARACTER_INTR | SERA_RX_INTR | 
  130.  SERA_RX_END_INTR | SERA_RX_FRAME_ERROR_INTR | 
  131.  SERA_RX_CHANGED_INTR | SERA_RX_OVERRUN_INTR | 
  132.  SERA_TX_INTR | SERA_TX_END_INTR)
  133. // serialCsrB's fields:
  134. #define SERB_SERIAL_POWER    0x8000
  135. #define SERB_RX_EN               0x4000
  136. #define SERB_TX_EN   0x2000
  137. #define SERB_TX_STOP_AT_PAGE      0x1000
  138. #define SERB_CTS_FLOW           0x0800
  139. #define SERB_NOT_SERIAL_RESET     0x0400
  140. #define SERB_RTS                  0x0200
  141. #define SERB_DTR                  0x0100
  142. #define SERB_BREAK                0x0080
  143. #define SERB_STOP_BITS            0x0040
  144. #define SERB_BIT_FORMAT_MASK      0x0030
  145. #define SERB_BAUD_RATE_MASK       0x000f
  146. // The following values are stored in SERB_BAUD_RATE_MASK
  147. #define SER_BAUD_9600   11 
  148. #define SER_BAUD_14400   7 
  149. #define SER_BAUD_19200   5 
  150. #define SER_BAUD_38400   2 
  151. #define SER_BAUD_57600   1
  152. #define SER_BAUD_115200  0
  153. // The following values are stored in SERB_BIT_FORMAT_MASK. 
  154. #define SER_BIT_FORMAT_6 0x20
  155. #define SER_BIT_FORMAT_7 0x10
  156. #define SER_BIT_FORMAT_8 0x00
  157.   
  158. /*
  159.  * Keyboard defines 
  160.  */
  161. #define KB_BASE (SYSTEM_ASIC_REGS_BASE + 0xc000)
  162. #define KB_ISR 0x0004 /* offset from keyboard base reg */
  163. #define KB_CSR 0x0000 /* offset from keyboard base reg */
  164. #define KB_INTR_MASK      0x0001
  165. #define KB_RDRF 0x0001
  166. #define KB_PARITY 0x0100
  167. #define KB_DATA_RD 0x0200
  168. #define KB_CLK_RD 0x0400
  169. #define KB_DATA_DR 0x0800
  170. #define KB_CLK_DR 0x1000
  171. #define KB_DATA_DR_EN 0x2000
  172. #define KB_CLK_DR_EN 0x4000
  173. #define KB_CLK_EN 0x8000
  174. /* 
  175.  * Touch and Sound defines
  176.  */
  177. // Only define _ONE_ of the following.  If changing Touch/Audio hardware, you
  178. // also _MUST_ make a change in ...platformp2kernelhalsh3fwp2.src
  179. #define TOUCH_AUDIO_CRYSTAL 1
  180. //#define TOUCH_AUDIO_UCB1100 1
  181. #define TOUCH_SOUND_BASE (SYSTEM_ASIC_REGS_BASE + 0xA000)
  182. #define IO_ADCCNTR 0x0000
  183. #define IO_ADCSTR 0x0004
  184. #define UCBCNTR 0x0008
  185. #define UCBSTR 0x000C
  186. #define UCBREGISTER 0x0010
  187. #define IO_SOUNDCNTR 0x0014
  188. #define IO_SOUNDSTR 0x0018
  189. #define INTR_MASK 0x001C
  190. /*
  191. // Make sure this matches entry in config.bib
  192. // These buffs are now offset via a constant
  193. #define TOUCHPANEL_PENSAMPLES_BASE     (DMA_BUFFER_BASE + 0x00020000) 
  194. #define TOUCHPANEL_PENSAMPLES_PHYS     (DMA_PHYSICAL_BASE + 0x00020000) 
  195. #define AUDIO_DMA_BUFFER_BASE   (DMA_BUFFER_BASE + 0x00002000)
  196. #define AUDIO_DMA_BUFFER_PHYS   (DMA_PHYSICAL_BASE + 0x00002000)
  197. #define AUDIO_DMA_REG_BASE (CPU_BASE + 
  198. (TOUCH_SOUND_SLOT * 2 * 0x10000))
  199. #define IO_RECORD_PTR_LOW (AUDIO_DMA_REG_BASE + 0x0010)
  200. #define IO_RECORD_PTR_HIGH (AUDIO_DMA_REG_BASE + 0x0014)
  201. #define IO_PLAYBACK_PTR_LOW (AUDIO_DMA_REG_BASE + 0x10010)
  202. #define IO_PLAYBACK_PTR_HIGH (AUDIO_DMA_REG_BASE + 0x10014)
  203. */
  204. // 
  205. // The following defs were only defined in the kernelhalshxfwp2.src file for the SH3
  206. // need to sync the tchaud.h and reg.h files in the
  207. // touch screen and audio driver dirs.
  208. //
  209. #define soundIntrMask 0x0002 // mask for all 4 sound interrupts
  210. #define playbackIntr 0x2000
  211. #define playbackEndIntr 0x1000
  212. #define recordIntr 0x8000
  213. #define recordEndIntr 0x4000
  214. #define soundIntr playbackIntr | playbackEndIntr | recordIntr | recordEndIntr
  215. // Touch panel sample area
  216. //
  217. // Note: It's important that buffer A and B are contiguous in memory and
  218. //       16 bytes apart.
  219. #define tchBufA 0x0000 // Sample buffer A
  220. #define tchBufB 0x0010 // Sample buffer B
  221. #define tchHalPointer 0x0020 // HAL's sample pointer
  222. #define tchDevDrvPointer 0x0024 // Device driver's sample pointer
  223. #define tchSemaphore 0x0028 // Touch/Audio sync semaphore
  224. #define tchStatus 0x002c // Status used for passing info from HAL to touch driver
  225. #define tchCoordCount 0x0030  // Coordinate count - used in touch HAL code
  226. #define tchTimerState 0x0034 // Used for the timer handler state machine.
  227. // Touch panel bit masks
  228. #define ucbIntr 0x0008
  229. #define ucbIntrMask 0x0008
  230. #define penTimingIntr 0x0004
  231. #define penTimingIntrMask 0x0004
  232. #define penIntr 0x0010
  233. #define penIntrMask 0x0010
  234. #define regIntr 0x0001
  235. #define regIntrMask 0x0001
  236. #define penState 0x1000
  237. #define penTimingEn 0x0400
  238. // Touch panel status register value
  239. #define TOUCH_PEN_DOWN  0
  240. #define TOUCH_PEN_UP  1
  241. #define TOUCH_PEN_SAMPLE   2
  242. // Timer state machine values
  243. #define TCH_DO_BIAS   0
  244. #define TCH_DO_SAMPLE 1
  245. #ifdef TOUCH_AUDIO_UCB1100
  246. #define TOUCH_SAMPLE_VALID  0x03ff // Bits which are valid in a touch panel sample
  247. #define TOUCH_MAX_COORD  12 // Max coord count = max coords * 2 = 6 * 2 = 12
  248. #endif //TOUCH_AUDIO_UCB1100
  249. #ifdef  TOUCH_AUDIO_CRYSTAL
  250. #define TOUCH_SAMPLE_VALID  0x0fff // Bits which are valid in a touch panel sample
  251. #define TOUCH_MAX_COORD   16 // Max coord count = max coords * 2 = 8 * 2 = 16
  252. #endif //TOUCH_AUDIO_CRYSTAL
  253. #define TOUCH_CHG_BUF_MASK  0x10 // Mask XOR'd with a buf address to get other buf address
  254. #define TOUCH_X_REQ  0x4400 // Request an X coordinate
  255. // This enables doSample, sets adcSel to 00 = get an X coord
  256. // and leaves the timer enabled
  257. #define TOUCH_Y_REQ  0x4c00 // Request a Y coordinate
  258. // This enables doSample, sets adcSel to 01 = get a Y coord
  259. // and leaves the timer enabled
  260. /*
  261.  * PCMCIA defines
  262.  */
  263. /*
  264.  * PCMCIA Control register
  265.  */
  266. #define PCMCIA_ENABLE 0x40
  267. #define PCMCIA_RESET 0x20
  268. #define PCMCIA_INTR_MASK 0x10
  269. #define PCMCIA_STATE_INTR_MASK 0x08
  270. #define PCMCIA_MEM_WINDOW 0x07
  271. /*
  272.  * PCMCIA Interrupt register
  273.  */
  274. #define PCMCIA_WP 0x10
  275. #define PCMCIA_CD2 0x08
  276. #define PCMCIA_CD1 0x04
  277. #define PCMCIA_INTR 0x02
  278. #define PCMCIA_STATE_INTR 0x01
  279. /*
  280.  * PCMCIA Status register
  281.  */
  282. #define PCMCIA0_BVD1 0x8000
  283. #define PCMCIA0_BVD2 0x4000
  284. #define PCMCIA1_BVD1 0x2000
  285. #define PCMCIA1_BVD2 0x1000
  286. #define PCMCIA0_VSW1 0x0800
  287. #define PCMCIA1_VSW1 0x0400
  288. #define PCMCIA0_VSW2 0x0200
  289. #define PCMCIA1_VSW2 0x0100
  290. /*
  291.  * PCMCIA Register addresses
  292.  */
  293. #define PCMCIA_REG0     0x10
  294. #define PCMCIA_INTR_REG0 0x14
  295. #define PCMCIA_REG1     0x18
  296. #define PCMCIA_INTR_REG1 0x1C
  297. #define PCMCIA_STATUS_REG 0x00 // Offset from PCMCIA_STATUS_BASE
  298. #define PCMCIA_CTL_REG 0x00    // Offset from PCMCIA_STATUS_BASE
  299. /*
  300.  * CPU specific PCMCIA defines
  301.  */
  302. //
  303. // ARM920 PCMCIA config  (PCMCIA currently not supported on ARM920)
  304. // This is just a cut and paste of ARM720 Caveat Emptor!!!
  305. //
  306. //#ifdef ARM920
  307. #define PCMCIA_BASE     (SYSTEM_ASIC_REGS_BASE + 0x400)
  308. #define PCMCIA_STATUS_BASE (SYSTEM_ASIC_REGS_BASE + 0x02000000)
  309. #define PCMCIA_MAPPED_SYSTEM_WINDOW_SIZE 0x800000 // Only 8 Mbyte mapped in system address space
  310. //#define PCMCIA_NUM_WINDOWS      10
  311. #define PCMCIA_NUM_WINDOWS      5
  312. /*
  313. #define PCMCIA0_8_ATTR_WIN_BASE  0xa8000000
  314. //#define PCMCIA1_8_ATTR_WIN_BASE  0x2A000000
  315. #define PCMCIA0_16_ATTR_WIN_BASE  0xa8000000
  316. //#define PCMCIA1_16_ATTR_WIN_BASE  0x2A000000
  317. #define PCMCIA_ATTR_WIN_SIZE     0x00800000 // 8 MB
  318. #define PCMCIA0_8_CMN_WIN_BASE   0xac000000
  319. //#define PCMCIA1_8_CMN_WIN_BASE   0x2E000000
  320. #define PCMCIA0_16_CMN_WIN_BASE   0xac000000
  321. //#define PCMCIA1_16_CMN_WIN_BASE   0x2E000000
  322. #define PCMCIA_CMN_WIN_SIZE      0x00800000   // 8 MB
  323. #define PCMCIA0_8_IO_WIN_BASE      0x30000000
  324. //#define PCMCIA1_8_IO_WIN_BASE      0x32000000
  325. #define PCMCIA_IO_WIN_SIZE       0x00200000   // 2 MB
  326. */
  327. /*
  328. #define PCMCIA0_8_ATTR_WIN_BASE  0x04000000
  329. //#define PCMCIA1_8_ATTR_WIN_BASE  0x04400000
  330. #define PCMCIA0_16_ATTR_WIN_BASE  0x04000000
  331. //#define PCMCIA1_16_ATTR_WIN_BASE  0x04400000
  332. #define PCMCIA_ATTR_WIN_SIZE     0x00800000 // 8 MB
  333. #define PCMCIA0_8_CMN_WIN_BASE   0x04800000
  334. //#define PCMCIA1_8_CMN_WIN_BASE   0x04c00000
  335. #define PCMCIA0_16_CMN_WIN_BASE   0x04800000
  336. //#define PCMCIA1_16_CMN_WIN_BASE   0x04c00000
  337. #define PCMCIA_CMN_WIN_SIZE      0x00800000   // 8 MB
  338. #define PCMCIA0_8_IO_WIN_BASE      0x05000000
  339. //#define PCMCIA1_8_IO_WIN_BASE      0x05200000
  340. #define PCMCIA_IO_WIN_SIZE       0x00200000   // 2 MB
  341. */
  342. #define PCMCIA0_8_ATTR_WIN_BASE  0xA4000000
  343. //#define PCMCIA1_8_ATTR_WIN_BASE  0xA4000000
  344. #define PCMCIA0_16_ATTR_WIN_BASE  0xA4000000
  345. //#define PCMCIA1_16_ATTR_WIN_BASE  0xA4000000
  346. #define PCMCIA_ATTR_WIN_SIZE     0x00400000 // 8 MB
  347. #define PCMCIA0_8_CMN_WIN_BASE   0xA4000000
  348. //#define PCMCIA1_8_CMN_WIN_BASE   0xA4800000
  349. #define PCMCIA0_16_CMN_WIN_BASE   0xA4000000
  350. //#define PCMCIA1_16_CMN_WIN_BASE   0xA4800000
  351. #define PCMCIA_CMN_WIN_SIZE      0x00400000   // 8 MB
  352. #define PCMCIA0_8_IO_WIN_BASE      0xA5000000
  353. //#define PCMCIA1_8_IO_WIN_BASE      0xA5800000
  354. #define PCMCIA_IO_WIN_SIZE       0x00200000   // 2 MB
  355. //#endif // ARM920
  356. /*
  357.  *  Bus State Controller Defines
  358.  */
  359. #define BCN_BCR1 0xFFFFFF60
  360. #define BCN_BCR2 0xFFFFFF62
  361. #define BCN_BCR1_DRAM_A2N3D 0x0010 // Area 2 normal, Area 3 DRAM
  362. #define BCN_BCR1_A5PCM 0x0002 // Area 5 is PCMCIA access
  363. #define BCN_BCR1_A6PCM 0x0001 // Area 6 is PCMCIA access
  364. #define BCN_BCR2_A6SZ_16  0x2000 
  365. #define BCN_BCR2_A5SZ_8  0x0400
  366. #define BCN_BCR2_A4SZ_32 0x0300 
  367. #define BCN_BCR2_A3SZ_32  0x00C0
  368. #define BCN_BCR2_A2SZ_32   0x0030
  369. #define BCN_BCR2_A2SZ_16   0x0020  // Reserved Area on SH3, 16-bit bus
  370. #define BCN_BCR2_A1SZ_32 0x000C
  371. /*
  372.  * Defines for SMC ethernet board. 
  373.  */
  374. #define ETHERNET_BASE  (SYSTEM_ASIC_REGS_BASE + 0x3000)
  375. // The low bit of this word is stored in the FPGA. If set to a 1, it will assert
  376. // the RESET pin of the 91C94.
  377. #define SMC_HARD_RESET_REG (ETHERNET_BASE + 32)
  378.     
  379. // For debug ethernet routines, we set aside a chunk of memory for packet buffers
  380. // if the IMGEBOOT variable is set (see config.bib).
  381. #define NOCACHE_BIT  0x20000000
  382. #define EDBG_PHYSICAL_MEMORY_START ((DMA_BUFFER_BASE&~NOCACHE_BIT)+0x30000)
  383. #endif // _P2_H_