[技术问答] ISD9160中断进不去

[复制链接]
838|7
 楼主| GentelMa 发表于 2018-11-26 19:48 | 显示全部楼层 |阅读模式
  1. void GPIO_INT()
  2. {
  3.         GPIO_SetMode(PB,SYS_GPB_MFP_PB2MFP_Msk,GPIO_MODE_INPUT);
  4.         GPIO_EnableInt(PB,SYS_GPB_MFP_PB2MFP_Msk,GPIO_INT_RISING);
  5.        
  6.         NVIC_ClearPendingIRQ(GPAB_IRQn);
  7.         NVIC_SetPriority(GPAB_IRQn,4);
  8.         NVIC_EnableIRQ(GPAB_IRQn);
  9.         GPIO_CLR_INT_FLAG(PB,SYS_GPB_MFP_PB2MFP_Msk);
  10. }
  11. void GPAB_IRQHandler()
  12. {
  13.         GPIO_CLR_INT_FLAG(PB,SYS_GPB_MFP_PB2MFP_Msk);
  14. }


中断函数始终进不去,求各位大佬解答一下,谢谢
643757107 发表于 2018-11-26 22:55 | 显示全部楼层
等我下载个BSP看看
643757107 发表于 2018-11-26 23:20 | 显示全部楼层
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 1 $
  5. * $Date: 14/07/15 2:52p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    ISD9100 General Purpose I/O Driver Sample Code
  7. *
  8. * @note
  9. * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
  10. *
  11. ******************************************************************************/
  12. #include <stdio.h>
  13. #include "isd9100.h"
  14. #include "gpio.h"

  15. void GPAB_IRQHandler(void)
  16. {
  17.                 static uint32_t Count=0;
  18.        
  19.     /* To check if PB2 interrupt occurred */
  20.     if (PA->INTSRC & BIT15)
  21.                 {
  22.         PA->INTSRC = BIT15;
  23.         printf("PA15 INT occurred. %d\n",Count);
  24.     }
  25.                 if (PB->INTSRC & BIT7)
  26.                 {
  27.                                 PB->INTSRC = BIT7;
  28.                                 printf("PB7 INT occurred. %d\n",Count);
  29.                 }
  30.                 Count++;
  31. }

  32. void SYS_Init(void)
  33. {
  34.     /*---------------------------------------------------------------------------------------------------------*/
  35.     /* Init System Clock                                                                                       */
  36.     /*---------------------------------------------------------------------------------------------------------*/
  37.     /* Unlock protected registers */
  38.     SYS_UnlockReg();

  39.     /* Enable External XTL32K */
  40.     CLK_EnableXtalRC(CLK_PWRCTL_LXTEN_Msk);

  41.     /* Enable External OSC49M */
  42.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
  43.        
  44.     /* Enable External OSC10K */
  45.     CLK_EnableXtalRC(CLK_PWRCTL_LIRCEN_Msk);
  46.        
  47.     /* Switch HCLK clock source to HXT */
  48.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKSEL0_HIRCFSEL_48M, CLK_CLKDIV0_HCLK(1));

  49.     /* Enable IP clock */
  50.     CLK_EnableModuleClock(UART_MODULE);

  51.     /* Update System Core Clock */
  52.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
  53.     SystemCoreClockUpdate();


  54.     /*---------------------------------------------------------------------------------------------------------*/
  55.     /* Init I/O Multi-function                                                                                 */
  56.     /*---------------------------------------------------------------------------------------------------------*/
  57.     /* Set GPA multi-function pins for UART0 RXD and TXD */
  58.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA8MFP_Msk) ) | SYS_GPA_MFP_PA8MFP_UART_TX;
  59.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA9MFP_Msk) ) | SYS_GPA_MFP_PA9MFP_UART_RX;

  60.     /* Lock protected registers */
  61.     SYS_LockReg();
  62. }

  63. void UART_Init(void)
  64. {
  65.     /*---------------------------------------------------------------------------------------------------------*/
  66.     /* Init UR                                                                                               */
  67.     /*---------------------------------------------------------------------------------------------------------*/
  68.     /* Reset IP */
  69.     SYS_ResetModule(UART0_RST);

  70.     /* Configure UART0 and set UART0 Baudrate(115200) */
  71.     UART_Open( UART0,115200 );
  72. }

  73. /*---------------------------------------------------------------------------------------------------------*/
  74. /* MAIN function                                                                                           */
  75. /*---------------------------------------------------------------------------------------------------------*/
  76. int main (void)
  77. {
  78.     int32_t i32Err;
  79.                 uint16_t PB7;
  80.                 uint32_t count=0;

  81.     /* Lock protected registers */
  82.     if(SYS->REGLCTL == 1) // In end of main function, program issued CPU reset and write-protection will be disabled.
  83.         SYS_LockReg();

  84.                 /* Init System, IP clock and multi-function I/O
  85.        In the end of SYS_Init() will issue SYS_LockReg()
  86.        to lock protected register. If user want to write
  87.        protected register, please issue SYS_UnlockReg()
  88.        to unlock protected register if necessary */
  89.     SYS_Init();

  90.     /* Init UART0 for printf */
  91.     UART_Init();

  92.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  93.     printf("+-------------------------------------+ \n");
  94.     printf("|           GPIO Driver Sample Code   | \n");
  95.     printf("+-------------------------------------+ \n");

  96.     /*-----------------------------------------------------------------------------------------------------*/
  97.     /* GPIO Basic Mode Test --- Use Pin Data Input/Output to control GPIO pin                              */
  98.     /*-----------------------------------------------------------------------------------------------------*/
  99.     printf("  >> Please connect PA.15 and PB.7 first << \n");
  100.     printf("     Press any key to start test by using [Pin Data Input/Output Control] \n\n");
  101.     //getchar();

  102.     /* Configure PA.15 as Output mode and PB.7 as Input mode then close it */
  103.     GPIO_SetMode(PA, BIT15, GPIO_MODE_OUTPUT);
  104.     GPIO_SetMode(PB, BIT7, GPIO_MODE_INPUT);
  105.                
  106.     i32Err = 0;
  107.     printf("  GPIO Output/Input test ...... \n");

  108.     /* Use Pin Data Input/Output Control to pull specified I/O or get I/O pin status */
  109.     GPIO_SET_OUT_DATA(PA, 0x00); // PA15=0
  110.                 PB7 = GPIO_GET_IN_DATA(PB) & 0x80;
  111.     if (PB7 != 0) {
  112.         i32Err = 1;
  113.     }

  114.     GPIO_SET_OUT_DATA(PA, 0x8000); // PA15=1
  115.                 PB7 = GPIO_GET_IN_DATA(PB) & 0x80;
  116.     if (PB7 != 0x80) {
  117.         i32Err = 1;
  118.     }

  119.     if ( i32Err ) {
  120.         printf("  [FAIL] --- Please make sure PA.15 and PB.7 are connected. \n");
  121.     } else {
  122.         printf("  [OK] \n");
  123.     }

  124.     /* Configure PA.15 and PB.7 to default Quasi-bidirectional mode */
  125.     GPIO_SetMode(PA, BIT15, GPIO_MODE_QUASI);
  126.     GPIO_SetMode(PB, BIT7, GPIO_MODE_QUASI);


  127.     /*-----------------------------------------------------------------------------------------------------*/
  128.     /* GPIO Interrupt Function Test                                                                        */
  129.     /*-----------------------------------------------------------------------------------------------------*/
  130.     printf("\n  PA15, PB7 are used to test interrupt\n  and control LEDs(PA12,PA13,PB14)\n");

  131.     /*Configure PA, PB for LED control */
  132.     GPIO_SetMode(PA, BIT12, GPIO_MODE_OUTPUT);
  133.                 GPIO_SetMode(PA, BIT13, GPIO_MODE_OUTPUT);
  134.                 GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  135.                 GPIO_SET_OUT_DATA(PA, ~0x1000);
  136.                 GPIO_SET_OUT_DATA(PB, ~0x0000);

  137.     /* Configure PA15 as Input mode and enable interrupt by rising edge trigger */
  138.     GPIO_SetMode(PA, BIT15, GPIO_MODE_INPUT);
  139.     GPIO_EnableInt(PA, 15, GPIO_INT_RISING);
  140.     NVIC_EnableIRQ(GPAB_IRQn);

  141.     /*  Configure PB7 as Quasi-bi-direction mode and enable interrupt by both rising and falling edge trigger */
  142.     GPIO_SetMode(PB, BIT7, GPIO_MODE_QUASI);
  143.                 GPIO_EnableInt(PB, 7, GPIO_INT_BOTH_EDGE);
  144.                
  145.     NVIC_EnableIRQ(GPAB_IRQn);

  146.     /* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
  147.     GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_HCLK, GPIO_DBCTL_DBCLKSEL_1);
  148.     GPIO_ENABLE_DEBOUNCE(PA, BIT15);
  149.     GPIO_ENABLE_DEBOUNCE(PB, BIT7);

  150.     /* Waiting for interrupts */
  151.     while (1)
  152.                 {
  153.                         GPIO_SET_OUT_DATA(PA, ~((count>>14)&0xf000));
  154.                         GPIO_SET_OUT_DATA(PB, ~((count>>14)&0x80));
  155.                         count++;
  156.                 }

  157. }


643757107 发表于 2018-11-26 23:25 | 显示全部楼层
void GPAB_IRQHandler(void)
{
  
                if (PB->INTSRC & BIT2)
                {
                                PB->INTSRC = BIT2;
                                printf("PB2 INT occurred. %d\n",Count);
                }

}

void GPIO_INT()
{
        GPIO_SetMode(PB,BIT2,GPIO_MODE_INPUT);
        GPIO_EnableInt(PB,2,GPIO_INT_RISING);        
        NVIC_EnableIRQ(GPAB_IRQn);

}
643757107 发表于 2018-11-26 23:25 | 显示全部楼层
看懂了吗,你的参数写错了,宏不对。
 楼主| GentelMa 发表于 2018-11-27 08:44 | 显示全部楼层
643757107 发表于 2018-11-26 23:25
看懂了吗,你的参数写错了,宏不对。

看懂了,改完后可以了,谢谢。
643757107 发表于 2018-12-8 22:36 | 显示全部楼层
一定要找官方例子和头文件认真看看,有时候宏定义的内容很容易搞错。
antusheng 发表于 2018-12-8 23:12 | 显示全部楼层
多谢分享,知道要注意什么了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部