打印
[技术问答]

关于N9H20K51GPIO中断问题

[复制链接]
439|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2021-1-8 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

//初始化后,gpio触发后一直未进中断,请各位谁玩过新唐N9H20K51 指点一下

void gpiocallback(void)
{
sysprintf("GPIO ------interrupt\n");
}
void GPIO_IRQHandler(void)
{

      INT32 mask;

      mask = 0x800;

      outpw(REG_AIC_SCCR, mask);   /* Clear interrupt */
     gpiocallback();
}

main()
{
                gpio_setportdir(GPIO_PORTE,BIT11,0);                 //RFGPIO 输入模式
                gpio_setintmode (GPIO_PORTE, BIT11, 1, 1);           //设置中断模式上升沿 和下降沿
                gpio_setsrcgrp(GPIO_PORTE,BIT11, 0);                 //设置中断源分组    GPEx pin被分组作为IRQ0的中断源之一
                gpio_setlatchtrigger(0);
                sysInstallISR(IRQ_LEVEL_2, IRQ_EXTINT1, (PVOID)GPIO_IRQHandler);
                sysEnableInterrupt(IRQ_EXTINT0);        
                sysEnableInterrupt(IRQ_EXTINT1);        
                sysEnableInterrupt(IRQ_EXTINT2);        
                sysEnableInterrupt(IRQ_EXTINT3);        
               sysSetLocalInterrupt(ENABLE_IRQ);

     while(1);
}

使用特权

评论回复
沙发
jcky001| | 2021-4-14 14:41 | 只看该作者

//IRQ_EXTINT1 = 3,

src = 1;  //IRQ1

gpio_setportdir(GPIO_PORTD, (1 << 6), 0);
gpio_setportpull(GPIO_PORTD, (1 << 6), 0);        
gpio_setintmode(GPIO_PORTD, (1 << 6), 0, (1 << 6)); //rising enable

gpio_setsrcgrp(GPIO_ PORTD, (1 << 6), src);
gpio_setlatchtrigger(1 << src);

sysInstallISR(IRQ_LEVEL_1, src + 2, GPIOD_ISR);               
sysSetInterruptType(src + 2, HIGH_LEVEL_SENSITIVE);
sysSetLocalInterrupt(ENABLE_IRQ);      

使用特权

评论回复
板凳
twjiang| | 2021-4-15 17:43 | 只看该作者
以下是 BSP 示例,看看你的代码少了什么?

void GPIOInterruptTest(void)
{
        int i;
       
        sysprintf("Connect GPB2 and GPB0 to test interrupt ......\n");

        gpio_setportval(GPIO_PORTB, BIT0, BIT0);                        /* Set GPB0 output high */
        gpio_setportdir(GPIO_PORTB, BIT0, BIT0);                        /* Set GPB0 output mode */       
       
        sysInstallISR(IRQ_LEVEL_7, (INT_SOURCE_E)IRQ_EXTINT0, (PVOID)EXTINT0_IRQHandler);
        sysSetInterruptType((INT_SOURCE_E)IRQ_EXTINT0, HIGH_LEVEL_SENSITIVE);
        sysEnableInterrupt((INT_SOURCE_E)IRQ_EXTINT0);

        gpio_setportdir(GPIO_PORTB, BIT2, 0x0);                                /* Set GPB2 input mode */
        gpio_setportpull(GPIO_PORTB, BIT2, BIT2);                        /* Set GPB2 pull-high */
        gpio_setsrcgrp(GPIO_PORTB, BIT2, 0x0);                                /* set to IRQ_EXTINT0 */
        gpio_setintmode(GPIO_PORTB, BIT2, BIT2, 0);                /* Set GPB2 falling edge trigger */

        sysSetLocalInterrupt(ENABLE_IRQ);

        for(i = 0; i < 2; i++) {
                gpio_setportval(GPIO_PORTB, BIT0, BIT0);                /* Set GPB0 output high */
                sysDelay(50);       
               
                gpio_setportval(GPIO_PORTB, BIT0, 0);                                /* Set GPB0 output low */
                sysDelay(50);               
        }       

}

使用特权

评论回复
地板
jerow| | 2021-4-17 20:08 | 只看该作者
触发进不去,应该是初始化的问题,还有这个中断函数需要像STM32那样,写到启动函数中的吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

328

主题

1590

帖子

3

粉丝