中断与轮询
中断的堆栈占用
中断步骤:配置中断开关、配置中断源、写中断服务子程、将中断服务子程填入中断向量表
中断允许/禁止控制:全局中断控制-上电复位后是enable的、dedicated IE-上电复位后所有中断被disable
中断掩码优先级寄存器(PRIMASK):PM bit
NVIC:1、nested vector interrupt controller
2、16个内部中断+32个外部中断
3、asm("CPSIE i");NVIC_ISER |= 0x40000000;
请求中断标志位:w1c
中断服务子程序:1、在ARM Cortex M0平台上,中断服务子程与一般c函数写法没有区别,使用同样的汇编返回指令即可(堆栈弹出由NVIC自动完成)
2、对于每个中断,必须调用对应的ISR,填入中断向量表
3、如允许中断嵌套,则在中断函数中保持中断允许
ISR共同特点:1、被CPU硬件自动调用,非程序代码调用
2、ISR执行前后,CPU自动进行堆栈出入操作
3、写成c函数的参数和返回值都应为void
4、需要记得清除中断标志位IF
中断向量:终端服务的入口地址
中断向量表:所有中断类型码及其对应的中断向量按一定规律存放的区域
PDIR:port data input register
堆上的全局变量,在中断中改变它的值,main中可见
与数组相同,函数名是一个指针:函数名的值为函数的起始地址,是一个指针常量