You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
4.2 KiB

  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
  28. #include "flash.h"
  29. #include "target.h"
  30. typedef struct pic32mx_flash_bank_s
  31. {
  32. working_area_t *write_algorithm;
  33. int devid;
  34. int ppage_size;
  35. int probed;
  36. } pic32mx_flash_bank_t;
  37. #define PIC32MX_MANUF_ID 0x029
  38. /* pic32mx memory locations */
  39. #define PIC32MX_KUSEG_PGM_FLASH 0x7D000000
  40. #define PIC32MX_KUSEG_RAM 0x7F000000
  41. #define PIC32MX_KSEG0_RAM 0x80000000
  42. #define PIC32MX_KSEG0_PGM_FLASH 0x9D000000
  43. #define PIC32MX_KSEG0_BOOT_FLASH 0x9FC00000
  44. #define PIC32MX_KSEG1_RAM 0xA0000000
  45. #define PIC32MX_KSEG1_PGM_FLASH 0xBD000000
  46. #define PIC32MX_KSEG1_PERIPHERAL 0xBF800000
  47. #define PIC32MX_KSEG1_BOOT_FLASH 0xBFC00000
  48. #define PIC32MX_PHYS_RAM 0x00000000
  49. #define PIC32MX_PHYS_PGM_FLASH 0x1D000000
  50. #define PIC32MX_PHYS_PERIPHERALS 0x1F800000
  51. #define PIC32MX_PHYS_BOOT_FLASH 0x1FC00000
  52. /*
  53. * Translate Virtual and Physical addresses.
  54. * Note: These macros only work for KSEG0/KSEG1 addresses.
  55. */
  56. #define KS1Virt2Phys(vaddr) ((vaddr)-0xA0000000)
  57. #define Phys2KS1Virt(paddr) ((paddr)+0xA0000000)
  58. #define KS0Virt2Phys(vaddr) ((vaddr)-0x80000000)
  59. #define Phys2KS0Virt(paddr) ((paddr)+0x80000000)
  60. /* pic32mx configuration register locations */
  61. #define PIC32MX_DEVCFG0 0xBFC02FFC
  62. #define PIC32MX_DEVCFG1 0xBFC02FF8
  63. #define PIC32MX_DEVCFG2 0xBFC02FF4
  64. #define PIC32MX_DEVCFG3 0XBFC02FF0
  65. #define PIC32MX_DEVID 0xBF80F220
  66. /* pic32mx flash controller register locations */
  67. #define PIC32MX_NVMCON 0xBF80F400
  68. #define PIC32MX_NVMCONCLR 0xBF80F404
  69. #define PIC32MX_NVMCONSET 0xBF80F408
  70. #define PIC32MX_NVMCONINV 0xBF80F40C
  71. #define NVMCON_NVMWR (1<<15)
  72. #define NVMCON_NVMWREN (1<<14)
  73. #define NVMCON_NVMERR (1<<13)
  74. #define NVMCON_LVDERR (1<<12)
  75. #define NVMCON_LVDSTAT (1<<11)
  76. #define NVMCON_OP_PFM_ERASE 0x5
  77. #define NVMCON_OP_PAGE_ERASE 0x4
  78. #define NVMCON_OP_ROW_PROG 0x3
  79. #define NVMCON_OP_WORD_PROG 0x1
  80. #define NVMCON_OP_NOP 0x0
  81. #define PIC32MX_NVMKEY 0xBF80F410
  82. #define PIC32MX_NVMADDR 0xBF80F420
  83. #define PIC32MX_NVMADDRCLR 0xBF80F424
  84. #define PIC32MX_NVMADDRSET 0xBF80F428
  85. #define PIC32MX_NVMADDRINV 0xBF80F42C
  86. #define PIC32MX_NVMDATA 0xBF80F430
  87. #define PIC32MX_NVMSRCADDR 0xBF80F440
  88. /* flash unlock keys */
  89. #define NVMKEY1 0xAA996655
  90. #define NVMKEY2 0x556699AA
  91. typedef struct pic32mx_mem_layout_s {
  92. u32 sector_start;
  93. u32 sector_size;
  94. } pic32mx_mem_layout_t;
  95. #endif /* PIC32MX_H */