gpt4 book ai didi

c - Xmega 只有两个 IO 端口中断(INT0 和 INT1)

转载 作者:行者123 更新时间:2023-11-30 18:53:21 25 4
gpt4 key购买 nike

在avr Xmega设备中,只有两个IO口中断 vector INT0和INT1。

我有三个开关,应该生成三个中断。我已经使用 INT0 为第一个开关编写了中断代码。现在,我可以使用 INT1 编写第二个中断,这将耗尽我的 vector 。下面是我的 INT0 ISR 代码:

ISR (PORTD_INT0_vect){
PORTD.INTFLAGS = 0x01; // clear INT0IF flag.

PORTD_OUT = PORTD_OUT | (1<<4); // led on.

}

我可以重新定义此 ISR 以启用第二个开关的中断吗?

我在main函数中设置的寄存器如下:

PORTD.INT0MASK = 0x04; // PD2 is the source of interrupt for INT0.
PORTD.INTCTRL = 0x03; // Disable INT1, enable INT0 and place it a high-priority level.
PORTD.PIN2CTRL = 0x03; // configure PD2 pin to interrupt on the low level of signal.
PMIC.CTRL = 0x07; // enable high,medium, and low level interrupts.
sei(); // enable interrupt globally.

最佳答案

外部中断的想法是让您知道发生了某件事,但不知道发生了什么。在 ISR 中,您必须读出开关所连接的输入的状态,并根据读数确定要做什么。为了检测状态是否改变,请保留端口输入状态的副本,并与新读出的值进行异或(对整个端口执行此操作,而不仅仅是单个引脚)。

关于c - Xmega 只有两个 IO 端口中断(INT0 和 INT1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32988537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com