lpc8nxx.cfg 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # SPDX-License-Identifier: GPL-2.0-or-later
  2. # NXP LPC8Nxx NHS31xx Cortex-M0+ with 8kB SRAM
  3. # Copyright (C) 2018 by Jean-Christian de Rivaz
  4. # Based on NXP proposal https://community.nxp.com/message/1011149
  5. # Many thanks to Dries Moors from NXP support.
  6. # SWD only transport
  7. source [find target/swj-dp.tcl]
  8. source [find mem_helper.tcl]
  9. if { [info exists CHIPNAME] } {
  10. set _CHIPNAME $CHIPNAME
  11. } else {
  12. set _CHIPNAME lpc8nxx
  13. }
  14. swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id 0
  15. dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
  16. set _TARGETNAME $_CHIPNAME.cpu
  17. target create $_TARGETNAME cortex_m -endian little -dap $_CHIPNAME.dap
  18. if {![using_hla]} {
  19. # If srst is not fitted use SYSRESETREQ to perform a soft reset
  20. cortex_m reset_config sysresetreq
  21. }
  22. adapter srst delay 100
  23. $_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size 0x1ff0 -work-area-backup 0
  24. flash bank $_CHIPNAME.flash lpc2000 0x0 0x7800 0 0 $_TARGETNAME lpc800 500
  25. echo "*********************************************************************************"
  26. echo "* !!!!! IMPORTANT NOTICE FOR LPC8Nxx and NHS31xx CHIPS !!!!!"
  27. echo "* When this IC is in power-off or peep power down mode, the SWD HW block is also"
  28. echo "* unpowered. These modes can be entered by firmware. The default firmware image"
  29. echo "* (flashed in production) makes use of this. Best is to avoid these power modes"
  30. echo "* during development, and only later add them when the functionality is complete."
  31. echo "* Hardware reset or NFC field are the only ways to connect in case the SWD is"
  32. echo "* powered off. OpenOCD can do a hardware reset if you wire the adapter SRST"
  33. echo "* signal to the chip RESETN pin and add the following in your configuration:"
  34. echo "* reset_config srst_only; flash init; catch init; reset"
  35. echo "* But if the actual firmware immediately set the power down mode after reset,"
  36. echo "* OpenOCD might be not fast enough to halt the CPU before the SWD lost power. In"
  37. echo "* that case the only solution is to apply a NFC field to keep the SWD powered."
  38. echo "*********************************************************************************"
  39. # Using soft-reset 'reset_config none' is strongly discouraged.
  40. # RESETN sets the system clock to 500 kHz. Unlike soft-reset does not.
  41. # Set the system clock to 500 kHz before reset to simulate the functionality of hw reset.
  42. #
  43. proc set_sysclk_500khz {} {
  44. set SYSCLKCTRL 0x40048020
  45. set SYSCLKUEN 0x40048024
  46. mww $SYSCLKUEN 0
  47. mmw $SYSCLKCTRL 0x8 0xe
  48. mww $SYSCLKUEN 1
  49. echo "Notice: sysclock set to 500kHz."
  50. }
  51. # Do not remap the ARM interrupt vectors to anything but the beginning of the flash.
  52. # Table System memory remap register (SYSMEMREMAP, address 0x4004 8000) bit description
  53. # Bit Symbol Value Description
  54. # 0 map - interrupt vector remap. 0 after boot.
  55. # 0 interrupt vector reside in Flash
  56. # 1 interrupt vector reside in SRAM
  57. # 5:1 offset - system memory remap offset. 00000b after boot.
  58. # 00000b interrupt vectors in flash or remapped to SRAM but no offset
  59. # 00001b -
  60. # 00111b interrupt vectors offset in flash or SRAM to 1K word segment
  61. # 01000b -
  62. # 11111b interrupt vectors offset in flash to 1K word segment 8 to 31
  63. # 31:6 reserved
  64. #
  65. proc set_no_remap {} {
  66. mww 0x40048000 0x00
  67. echo "Notice: interrupt vector set to no remap."
  68. }
  69. $_TARGETNAME configure -event reset-init {
  70. set_sysclk_500khz
  71. set_no_remap
  72. }