如何解决ATTiny817 XPlained mini 启用中断
总的来说,我对 Atmel 和 C 编程比较陌生。 我一直在尝试在上面提到的 Attiny817 开发板上启用中断,但我肯定遇到了一些问题。为了更好地理解外设中断,我尝试使用板载按钮 (PC5) 来控制板载 LED (PC0)。我使用以下语句验证了这两个部分的工作:
#include <atmel_start.h>
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void){
atmel_start_init();
PORTC_set_pin_dir(PIN5_bp,false);
PORTC_set_pin_dir(PIN0_bp,true);
PORTC_set_pin_pull_mode(PIN5_bp,PORT_PULL_UP);
while (1){
if (!PORTC_get_pin_level(PIN5_bp)){
PORTC_set_pin_level(PIN0_bp,true);
}
else{
PORTC_set_pin_level(PIN0_bp,false);
}
}
}
这很有效,所以我尝试通过编写以下内容来实现引脚更改中断:
#include <atmel_start.h>
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void){
atmel_start_init();
PORTC_set_pin_dir(PIN5_bp,PORT_PULL_UP);
PORTC_pin_set_isc(PIN5_bp,PORT_ISC_BOTHEDGES_gc); //detect rising and falling edges
sei();
while (1) {
}
}
ISR(PORTC_PORT_vect){
PORTC_toggle_pin_level(PIN0_bp);
PORTC.INTFLAGS |= PORT_INT5_bm;
}
我从数据表中了解到,所有 PORTC 共享一个中断向量,该端口上的任何中断都会引发该向量内的相应标志。数据手册中还提到了向中断寄存器写入'1'来清除中断,这也是我选择这样编写ISR函数的原因。此外,PORTC_pin_set_isc() 函数应在 PORTC 寄存器中为 PC5 上的按钮执行正确的感测配置。
我错过了什么? 任何和所有帮助表示赞赏。
一些注意事项/更新:
很多这些函数是我使用 Atmel 时预先编写的
爱特梅尔 |启动网站为我初始化驱动程序。 (start.atmel.com/#)
另一个快速更新:我在 AVRFreaks 网站上找到了示例代码,但是当我使用代码(将 PC3 替换为 PC5)时,我遇到了从未调用中断的相同问题......(avrfreaks.net/comment/2435411#评论-2435411)
我也试过: 直接使用寄存器而不是 atmel 创建的函数:
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
PORTC.DIRCLR = PIN5_bm; // Pin PC3 = input
PORTC.DirsET = PIN0_bm; // Pin PC0 = output
PORTC.PIN5CTRL = PORT_PULLUPEN_bm; // enables the internal pull-up resistor on PC3
PORTC.PIN5CTRL |= PORT_ISC_FALLING_gc ; // Sense falling edge on PC3. PORT_INT3_bp = 0x03
// cpuINT.LVL0PRI = 0 << cpuINT_LVL0PRI_gp; // Interrupt Level Priority: 0
// cpuINT.LVL1VEC = 0x0A << cpuINT_LVL1VEC_gp; // Interrupt Vector with High Priority: 0x08
sei(); // Global interrupts enable
while (1)
{
}
}
ISR(PORTC_PORT_vect)
{
PORTC.OUTTGL = PIN0_bm; // Toggle LED
PORTC.INTFLAGS |= PORT_INT5_bm ; // Clear Interrupt
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。