Thank you Xiangjun for the response and reference.
I do understand the part covered by the reference you linked so I should be more specific with my question...
First, my goal is to create an app on the N947 that does not use TrustZone. I want it to be like writing an app for the Cortex-m4, etc.
So my first thought was that I should set TrustZone to None in MCUXpresso. This causes __ARM_FEATURE_CMSE to be 1, and only adds the -mcpu=cortex-m33 compiler option. However the app appears to be running in secure mode so I get hard faults.
If I set TrustZone to Secure in MCUXpresso it sets __ARM_FEATURE_CMSE to be 3 and it works.
So what is the intention of the None setting? Is it supposed to be running in non-secure mode? Doesn't it run in secure mode out of reset? This is where I am confused.
Also, another thing that makes this hard to work with is that MCUXpresso does not expand the __ARM_FEATURE_CMSE macro correctly. If I hover, it will always expand to 1, and the greyed out areas of preprocessor if's are not correct. I tested this by setting a global to the value of the macro and it is 3 in Secure mode, even though the macro expands to 1, and the code in the greyed out areas does execute.
Thanks again,
-Todd