Skip to content

Instantly share code, notes, and snippets.

@JarrettR
Created October 23, 2025 20:13
Show Gist options
  • Select an option

  • Save JarrettR/309729b5abe576fa139a722d2587d1ff to your computer and use it in GitHub Desktop.

Select an option

Save JarrettR/309729b5abe576fa139a722d2587d1ff to your computer and use it in GitHub Desktop.
Working example for disabling and using the SWD and nRST pins on the MSPM0C1104, without bricking the chip
/*
* Copyright (c) 2021, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ti_msp_dl_config.h"
void setupSWDPinsAsGPIO(void)
{
DL_GPIO_initDigitalOutput(IOMUX_PINCM20);
DL_GPIO_initDigitalOutput(IOMUX_PINCM21);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_19 | DL_GPIO_PIN_20);
DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_19 | DL_GPIO_PIN_20);
}
void setupNRSTPinAsGPIO(void)
{
DL_GPIO_initDigitalOutput(IOMUX_PINCM2);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_1);
DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_1);
}
int main(void)
{
SYSCFG_DL_init();
/* LED on by default */
uint16_t counter = 0;
uint8_t swdEnabled = 1;
while (1) {
if (!DL_GPIO_readPins(
GPIO_SWITCHES_PORT, GPIO_SWITCHES_USER_SWITCH_1_PIN)) {
delay_cycles(2500000);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_20);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_19);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_1);
delay_cycles(2500000);
DL_GPIO_setPins(GPIO_SWITCHES_PORT, GPIO_LEDS_USER_LED_1_PIN);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_20);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_19);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_1);
delay_cycles(2500000);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_20);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_19);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_1);
delay_cycles(2500000);
DL_GPIO_clearPins(GPIO_SWITCHES_PORT, GPIO_LEDS_USER_LED_1_PIN);
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_20);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_19);
DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_1);
if (counter < 0xFFFF) {
counter++;
}
if (counter == 100) {
DL_SYSCTL_disableSWD();
DL_SYSCTL_disableNRSTPin();
setupSWDPinsAsGPIO();
setupNRSTPinAsGPIO();
swdEnabled = 0;
}
} else {
if (swdEnabled == 0) {
// Enable SWD - Doesn't seem to actually work
SYSCTL->SOCLOCK.SWDCFG = SYSCTL_SWDCFG_KEY_VALUE;
swdEnabled = 1;
// And so we reboot
DL_SYSCTL_resetDevice(DL_SYSCTL_RESET_POR);
}
delay_cycles(1000000);
DL_GPIO_setPins(GPIO_SWITCHES_PORT, GPIO_LEDS_USER_LED_1_PIN);
delay_cycles(1000000);
DL_GPIO_clearPins(GPIO_SWITCHES_PORT, GPIO_LEDS_USER_LED_1_PIN);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment