根据图1电路,实现如下功能:由按键产生外部中断,并设置为下降沿触发,初始化为向量IRQ中断,中断服务程序将蜂鸣器控制输出信号取反。
按键蜂鸣器接口电路图阅读实验程序,回答问题(将注释补充完整):
#include "config.h"
#define LED (1 << 7 )
void __irq Eint0IRQ (void)
{ if ((IO0PIN & (1 << 7)) == 0)
{ IO0SET = 1 << 7; /* 熄灭发光二极管 */ }
else { IO0CLR = 1 << 7; /* 点亮发光二极管 */
} while((IO0PIN & (1 << 3)) == 0); /* 等待按键松开 */
EXTINT = 0x01; /* */
VICVectAddr = 0x00; /* */
}
int main (void)
{
PINSEL0 = PINSEL0 & (~0x03);
PINSEL0 = PINSEL0 | 0x01; /* 设置P0.3 为外部中断0 管脚 */
PINSEL0= PINSEL0&(~(0x03 << 2)); /*设置P0. 7 为GPIO 功能 */
IO0DIR = LED; /* 设置P0. 7 为输出 */
IO0SET = LED; /* 设置输出为高电平 */
IRQEnable(); /* IRQ 中断使能 */ EXTMODE = 0x00; /* 设置外部中断为低电平触发*/
VICIntSelect = 0 << 14; /* */ VICVectCntl0 = 0x20 | 14; /* */ VICVectAddr0 = (uint32)Eint0IRQ; /* 设置中断服务程序地址 */
VICIntEnable = 1 << 14; /* */ EXTINT = 0x01; /* */ while(1); /* */
return 0; }
回答以下问题:嵌入式系统中,由C语言编写的中断处理程序,其最大特点是返回值和参数必须是 类型。
#define的作用是 __irq 标识具有 作用。
IRQEnable(); 的中断使能作用是通过修改 来实现的。