0

我目前正在研究 Atmel 制造的 SAME70 板。我在 EXT1 端口上插入了一个扩展 OLED1 板(Atmel 也是)。我的目标是在按下 OLED1 板上的按钮 3 时恢复有关中断类型(下降或上升)的信息。我有一个函数可以让我设置与中断相关的不同寄存器。但不幸的是,无论按钮处于何种状态,指示极性 (FLHSR) 的寄存器始终保持为 0。在我的代码下面。

#include <asf.h>

void set_Interupt_Pin()
{
    uint32_t mask = 1 << 19;  /*bitmasking*/
    PIOA->PIO_IER = mask;    /*enable interruptions*/
    PIOA->PIO_AIMER = mask;  /*add new interruption*/
    PIOA->PIO_ESR = mask;     /*set interrupt source on edge*/
    PIOA->PIO_REHLSR = mask; /* set interrupt to rising edge*/
    PIOA->PIO_FELLSR= mask; /* set interrupt to falling edge*/
    NVIC_DisableIRQ(ID_PIOA);
    NVIC_ClearPendingIRQ(ID_PIOA);
    NVIC_EnableIRQ(ID_PIOA);   /*set NVIC to get interruptions from PIOA*/
    NVIC_SetPriority(ID_PIOA, 4); /*priority 4*/
    
}

void PIOA_Handler(void)
{
    printf("FRLHSR: %x\n",PIOA->PIO_FRLHSR); /*state of polarity event */
    printf("ISR: %x\n",PIOA->PIO_ISR); 
    printf("ELSR: %x\n",PIOA->PIO_ELSR); 
    printf("AIMMR: %x\n",PIOA->PIO_AIMMR); 
}

int main(void)
{
    const usart_serial_options_t usart_serial_options = {
        .baudrate     = CONF_UART_BAUDRATE,
        .charlength   = CONF_UART_CHAR_LENGTH,
        .paritytype   = CONF_UART_PARITY,
        .stopbits     = CONF_UART_STOP_BITS
    };
    sysclk_init();
    board_init();
    stdio_serial_init(CONF_UART, &usart_serial_options);
    set_Interupt_Pin();
    while(1){}
}

当我按下按钮(第一部分)和释放按钮(第二部分)时,您可以在此处看到打印结果。

当我按下按钮时终端 此致

4

0 回答 0