ARM: rename ARMV4_5_STATE_* as ARM_STATE_*
[openocd/ztw.git] / src / flash / nor / pic32mx.h
blobb3bdad29a5b7df655ce56e3a693924bb33b6df58
1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
4 * *
5 * Copyright (C) 2008 by Spencer Oliver *
6 * spen@spen-soft.co.uk *
7 * *
8 * Copyright (C) 2008 by John McCarthy *
9 * jgmcc@magma.ca *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
20 * *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program; if not, write to the *
23 * Free Software Foundation, Inc., *
24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
26 #ifndef PIC32MX_H
27 #define PIC32MX_H
29 struct pic32mx_flash_bank
31 struct working_area *write_algorithm;
32 int devid;
33 int ppage_size;
34 int probed;
37 #define PIC32MX_MANUF_ID 0x029
39 /* pic32mx memory locations */
41 #define PIC32MX_KUSEG_PGM_FLASH 0x7D000000
42 #define PIC32MX_KUSEG_RAM 0x7F000000
44 #define PIC32MX_KSEG0_RAM 0x80000000
45 #define PIC32MX_KSEG0_PGM_FLASH 0x9D000000
46 #define PIC32MX_KSEG0_BOOT_FLASH 0x9FC00000
48 #define PIC32MX_KSEG1_RAM 0xA0000000
49 #define PIC32MX_KSEG1_PGM_FLASH 0xBD000000
50 #define PIC32MX_KSEG1_PERIPHERAL 0xBF800000
51 #define PIC32MX_KSEG1_BOOT_FLASH 0xBFC00000
53 #define PIC32MX_PHYS_RAM 0x00000000
54 #define PIC32MX_PHYS_PGM_FLASH 0x1D000000
55 #define PIC32MX_PHYS_PERIPHERALS 0x1F800000
56 #define PIC32MX_PHYS_BOOT_FLASH 0x1FC00000
59 * Translate Virtual and Physical addresses.
60 * Note: These macros only work for KSEG0/KSEG1 addresses.
62 #define KS1Virt2Phys(vaddr) ((vaddr)-0xA0000000)
63 #define Phys2KS1Virt(paddr) ((paddr) + 0xA0000000)
64 #define KS0Virt2Phys(vaddr) ((vaddr)-0x80000000)
65 #define Phys2KS0Virt(paddr) ((paddr) + 0x80000000)
67 /* pic32mx configuration register locations */
69 #define PIC32MX_DEVCFG0 0xBFC02FFC
70 #define PIC32MX_DEVCFG1 0xBFC02FF8
71 #define PIC32MX_DEVCFG2 0xBFC02FF4
72 #define PIC32MX_DEVCFG3 0XBFC02FF0
73 #define PIC32MX_DEVID 0xBF80F220
75 /* pic32mx flash controller register locations */
77 #define PIC32MX_NVMCON 0xBF80F400
78 #define PIC32MX_NVMCONCLR 0xBF80F404
79 #define PIC32MX_NVMCONSET 0xBF80F408
80 #define PIC32MX_NVMCONINV 0xBF80F40C
81 #define NVMCON_NVMWR (1 << 15)
82 #define NVMCON_NVMWREN (1 << 14)
83 #define NVMCON_NVMERR (1 << 13)
84 #define NVMCON_LVDERR (1 << 12)
85 #define NVMCON_LVDSTAT (1 << 11)
86 #define NVMCON_OP_PFM_ERASE 0x5
87 #define NVMCON_OP_PAGE_ERASE 0x4
88 #define NVMCON_OP_ROW_PROG 0x3
89 #define NVMCON_OP_WORD_PROG 0x1
90 #define NVMCON_OP_NOP 0x0
92 #define PIC32MX_NVMKEY 0xBF80F410
93 #define PIC32MX_NVMADDR 0xBF80F420
94 #define PIC32MX_NVMADDRCLR 0xBF80F424
95 #define PIC32MX_NVMADDRSET 0xBF80F428
96 #define PIC32MX_NVMADDRINV 0xBF80F42C
97 #define PIC32MX_NVMDATA 0xBF80F430
98 #define PIC32MX_NVMSRCADDR 0xBF80F440
100 /* flash unlock keys */
102 #define NVMKEY1 0xAA996655
103 #define NVMKEY2 0x556699AA
105 struct pic32mx_mem_layout {
106 uint32_t sector_start;
107 uint32_t sector_size;
110 #endif /* PIC32MX_H */