SLAU533D September 2013 – April 2017
The MSP430 contains one vector that cannot be disabled by the general interrupt enable (GIE) bit: the NMI vector. Several different events are directed into the NMI vector, most of which involve critical functions. Oscillator failure is one example.
There is one NMI unique to USB operation: the "bus error", which is indicated when the SYSUNIV interrupt vector register contains the value SYSUNIV_BUSIFG. This involves the fact that the MSP430 USB module shares a block of RAM with the CPU, called "USB RAM". When the host suspends the USB module, it becomes clocked by a slow clock. If the CPU then tries to access USB RAM, the difference in clock speeds between this slow clock and the MCU clock creates a conflict, and recovery from the error is not possible without shutting down the USB module.
Fortunately this event is completely within control of software, by not accessing USB RAM during suspend. The USB API is written to not do this, and most applications do not have a reason to access USB RAM. Therefore, this error should never occur. But in the event that it does, the NMI is provided, and code is provided to handle the failure.