arm的一段程序尤其不理解HWREG(NVIC_SW_TRIG) = INT_GPIOA - 16;这句话是什么意思,中心思想 是想改变优先级但是不太理解
volatile unsigned long g_ulIndex;
volatile unsigned long g_ulGPIOa;
volatile unsigned long g_ulGPIOb;
volatile unsigned long g_ulGPIOc;
int main(void)
{
// 防止JTAG失效,重要!
jtagWait();
IntMasterEnable();
IntEnable(INT_GPIOA);
IntEnable(INT_GPIOB);
IntEnable(INT_GPIOC);
IntPrioritySet(INT_GPIOA, 0x00);
IntPrioritySet(INT_GPIOB, 0x00);
IntPrioritySet(INT_GPIOC, 0x00);
g_ulGPIOa = 0;
g_ulGPIOb = 0;
g_ulGPIOc = 0;
g_ulIndex = 1;
HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16;
if((g_ulGPIOa != 3) || (g_ulGPIOb != 2) || (g_ulGPIOc != 1))
{
while(1);
}
IntPrioritySet(INT_GPIOA, 0x80);
IntPrioritySet(INT_GPIOB, 0x40);
IntPrioritySet(INT_GPIOC, 0x00);
g_ulGPIOa = 0;
g_ulGPIOb = 0;
g_ulGPIOc = 0;
g_ulIndex = 1;
HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16;
if((g_ulGPIOa != 3) || (g_ulGPIOb != 2) || (g_ulGPIOc != 1))
{
while(1);
}
IntPrioritySet(INT_GPIOA, 0x00);
IntPrioritySet(INT_GPIOB, 0x20);
IntPrioritySet(INT_GPIOC, 0x40);
g_ulGPIOa = 0;
g_ulGPIOb = 0;
g_ulGPIOc = 0;
g_ulIndex = 1;
HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16;
if((g_ulGPIOa != 1) || (g_ulGPIOb != 2) || (g_ulGPIOc != 3))
{
while(1);
}
IntDisable(INT_GPIOA);
IntDisable(INT_GPIOB);
IntDisable(INT_GPIOC);
IntUnregister(INT_GPIOA);
IntUnregister(INT_GPIOB);
IntUnregister(INT_GPIOC);
IntMasterDisable();
while(1) ;
}
void GPIO_Port_A_ISR(void)
{
g_ulGPIOa = g_ulIndex++;
}
void GPIO_Port_B_ISR(void)
{
HWREG(NVIC_SW_TRIG) = INT_GPIOA - 16;
g_ulGPIOb = g_ulIndex++;
}
void GPIO_Port_C_ISR(void)
{
HWREG(NVIC_SW_TRIG) = INT_GPIOB - 16;
g_ulGPIOc = g_ulIndex++;
}
HWREG(NVIC_SW_TRIG) 里面是什么内容?
你可以查找一下看看优先级 的操作
HWREG(NVIC_SW_TRIG) = INT_GPIOB - 16 你就知道内容了