C6657的GPIO22和GPIO23不能进中断问题 - TMS320C6655/57 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2627|回复: 7

[未解决] C6657的GPIO22和GPIO23不能进中断问题

[复制链接]

32

主题

97

帖子

2048

积分

金牌会员

Rank: 6Rank: 6

积分
2048
发表于 2017-5-26 13:34:17 | 显示全部楼层 |阅读模式
     给的例程里GPIO0可以进入中断,后来我在Core1上写的GPIO1也能进中断,但是我真正想用的是GPIO22和GPIO23的中断,并在Core1上触发。下面我给出我的代码,请各位大侠看看有什么问题
  1. void SYN_init(void)
  2. {
  3.         KickUnlock();     // 解锁关键寄存器
  4.         GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO00_LENDIAN,  GPIO_NORMAL_ENABLED);       // 底板按键
  5.         GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO01_BOOTMODE,  GPIO_NORMAL_ENABLED);
  6.         GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO22_UARTCTS0,  GPIO_NORMAL_ENABLED);    //SYN_SAMPLE
  7.         GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO23_UARTRTS0,  GPIO_NORMAL_ENABLED);    //SYN
  8.         KickLock();        // 锁定关键寄存器
  9.         GPIODirModeSet(SOC_GPIO_0_REGS, GPIO00_LENDIAN,  GPIO_DIR_INPUT);                    // 底板按键
  10.         GPIODirModeSet(SOC_GPIO_0_REGS, GPIO01_BOOTMODE,  GPIO_DIR_INPUT);
  11.         GPIODirModeSet(SOC_GPIO_0_REGS, GPIO22_UARTCTS0,  GPIO_DIR_INPUT);                  //SYN_SAMPLE
  12.         GPIODirModeSet(SOC_GPIO_0_REGS, GPIO23_UARTRTS0,  GPIO_DIR_INPUT);                  //SYN

  13.         GPIOIntTypeSet(SOC_GPIO_0_REGS, GPIO00_LENDIAN,  GPIO_INT_TYPE_FALLEDGE);         // 配置为下降沿触发
  14.         GPIOIntTypeSet(SOC_GPIO_0_REGS, GPIO01_BOOTMODE,  GPIO_INT_TYPE_FALLEDGE);
  15.         GPIOIntTypeSet(SOC_GPIO_0_REGS, GPIO22_UARTCTS0,  GPIO_INT_TYPE_FALLEDGE);      // 配置为下降沿触发
  16.         GPIOIntTypeSet(SOC_GPIO_0_REGS, GPIO23_UARTRTS0,  GPIO_INT_TYPE_FALLEDGE);      // 配置为下降沿触发

  17.         GPIOBankIntEnable(SOC_GPIO_0_REGS);                                                                                      // 使能 GPIO BANK 中断
  18. }
复制代码
上面的是管脚初始化程序。
  1. void GPIO_INT_init(int cpuINTn1,int cpuINTn2,int cpuINTn3)
  2. {
  3.         CICDisableGlobalHostInt(SOC_CIC_0_REGS);
  4.         CICEventMap(SOC_CIC_0_REGS, CSL_INTC0_GPINT22, 20);                 //对核0主机中断是0   对核1来说为20
  5. //        KeyStone_CIC_event_map(CIC_Regs, CSL_INTC0_GPINT22, 20);         //映射到CIC_out0
  6.         CICEventMap(SOC_CIC_0_REGS, CSL_INTC0_GPINT23, 21);                 //对核0主机中断是1   对核1来说为21
  7. //        KeyStone_CIC_event_map(CIC_Regs, CSL_INTC0_GPINT23, 21);
  8.         CICEnableGlobalHostInt(SOC_CIC_0_REGS);

  9.         IntRegister(cpuINTn3, GPIO23_Isr);// 注册中断服务函数
  10.         IntRegister(cpuINTn2, GPIO22_Isr);
  11.         IntRegister(cpuINTn1, GPIO0_Isr);

  12.         IntEventMap(cpuINTn3, SYS_INT_CIC0_OUT1_20); // 映射中断到 DSP 可屏蔽中断
  13.         IntEventMap(cpuINTn2, SYS_INT_CIC0_OUT0_20);
  14.         IntEventMap(cpuINTn1, SYS_INT_GPINT);

  15.         IntEnable(cpuINTn3);                                                          // 使能 DSP 可屏蔽中断
  16.         IntEnable(cpuINTn2);
  17.         IntEnable(cpuINTn1);
  18. }
复制代码
这是GPIO中断初始化程序。
  1. /****************************************************************************/
  2. /*              外设初始化                                                  */
  3. /****************************************************************************/
  4. void PeriphInit()
  5. {
  6.         // 驱动库版本
  7.         Version();
  8.         SYN_init();
  9. }

  10. void INT_init()
  11. {
  12.         // 初始化 DSP 中断控制器
  13.         IntDSPINTCInit();

  14.         GPIO_INT_init(4,5,6);
  15.         // 使能 DSP 全局中断
  16.         IntGlobalEnable();

  17. }
  18. /****************************************************************************/
  19. /*              主函数                                                      */
  20. /****************************************************************************/
  21. int main(void)
  22. {
  23.         int i, status = 0;

  24.         PeriphInit();           // 外设初始化
  25.         INT_init();               // 中断初始化

  26.     while(1)
  27.     {

  28.     }

  29. }
复制代码
这是在主程序中调用的代码。

这个程序现在只有GPIO1能进中断。我用STK的程序GPIO22和GPIO23是能够进入中断的,所以我怀疑是创龙的库有问题或者是有什么函数忘记调用了
请帮忙看看是什么问题吧,谢谢

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励0 , 目前已有7人回答
最近访问 头像模式 列表模式
回复

使用道具 举报

3

主题

396

帖子

1445

积分

创龙

Rank: 8Rank: 8

积分
1445
发表于 2019-9-10 16:02:18 | 显示全部楼层
这里应该是bit1置1。

https://e2echina.ti.com/question ... 0_dsp/f/32/t/130894
https://e2e.ti.com/support/proce ... GPIO16-31-interrupt

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

15

主题

1356

帖子

4564

积分

创龙

Rank: 8Rank: 8

积分
4564
发表于 2017-5-27 16:50:36 | 显示全部楼层
可能是 CIC 驱动问题
@Lewis 熊工 有空看下
回复 支持 反对

使用道具 举报

0

主题

4

帖子

1036

积分

金牌会员

Rank: 6Rank: 6

积分
1036
发表于 2019-5-29 10:56:50 | 显示全部楼层
我也是一样的问题,不过是用的GPIO27。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

1036

积分

金牌会员

Rank: 6Rank: 6

积分
1036
发表于 2019-5-29 11:46:49 | 显示全部楼层
希望缄默 发表于 2017-5-27 16:50
可能是 CIC 驱动问题
@Lewis 熊工 有空看下

我现在也是这个问题,我看这是17年的贴了,这个应该怎么解决呢?
回复 支持 反对

使用道具 举报

16

主题

43

帖子

1289

积分

金牌会员

Rank: 6Rank: 6

积分
1289
发表于 2019-7-15 16:42:37 | 显示全部楼层
我用GPIO28也遇到了同样的问题,请问这个原因是什么?
回复 支持 反对

使用道具 举报

3

主题

396

帖子

1445

积分

创龙

Rank: 8Rank: 8

积分
1445
发表于 2019-8-7 16:54:16 | 显示全部楼层
关于这部分,我们后面会根据客户的需求提供相关测试例程。我们这边使用GPIO17做了测试。SOM-TL665x的GPIO17,原用作TIMI;核心板设置4.7K下拉,如果客户需用作外部中断,需要给予足够的上拉电阻,建议值:1K。相关代码可以参考如下:
/****************************************************************************/
/*                                                                          */
/* 广州创龙电子科技有限公司                                                 */
/*                                                                          */
/* Copyright (C) 2014-2019 Guangzhou Tronlong Electronic Technology Co.,Ltd */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/*                                                                          */
/*              TL665x[F]-EasyEVM 测试程序(SYS/BIOS)                      */
/*                                                                          */
/****************************************************************************/
/*
*   - 希望缄默(bin wang)
*   - bin@tronlong.com
*   - DSP C665x 项目组
*
*   官网 www.tronlong.com
*   论坛 51dsp.net
*
*/
#include <xdc/std.h>
#include <xdc/cfg/global.h>

#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/family/c64p/Hwi.h>
#include <ti/sysbios/family/c66/tci66xx/CpIntc.h>

#include <Tronlong/Driver/_UART.h>

#include <Tronlong/Support/Drivers/Include/hw/soc_c66x.h>
#include <Tronlong/Support/Drivers/Include/gpio.h>

/****************************************************************************/
/*                                                                          */
/*              宏定义                                                      */
/*                                                                          */
/****************************************************************************/
#define ConsoleWrite(format, ...)  \
     do {                           \
             _UART_printf(_UART0, format, ##__VA_ARGS__ );   \
        } while (0)

/****************************************************************************/
/*                                                                          */
/*              全局变量                                                    */
/*                                                                          */
/****************************************************************************/
// 版本
char AppVerStr[16] = "1.00.0805";

/****************************************************************************/
/*                                                                          */
/*              GPIO 线程                                                   */
/*                                                                          */
/****************************************************************************/
Void GPIO17Hwi(UArg arg)
{
    ConsoleWrite("GPIO17 Interrupt.\r\n");
}

/****************************************************************************/
/*                                                                          */
/*              外设初始化                                                  */
/*                                                                          */
/****************************************************************************/
Void PerihInit()
{
    /* GPIO 外设中断配置 */
    KickUnlock();

    // 管脚复用配置
    GPIOPinMuxSet(SOC_DSC_BASE_REGS + SOC_DSC_PIN_CONTROL_0, GPIO17_TIMI1, GPIO_NORMAL_ENABLED);

    // 管脚方向配置
    GPIODirModeSet(SOC_GPIO_0_REGS, GPIO17_TIMI1, GPIO_DIR_INPUT);

    // 中断触发类型
    GPIOIntTypeSet(SOC_GPIO_0_REGS, GPIO17_TIMI1, GPIO_INT_TYPE_FALLEDGE);

    // 使能 GPIO 中断
    HWREG(SOC_GPIO_0_REGS + GPIO_BINTEN) |= (1 << 1);
}

/****************************************************************************/
/*                                                                          */
/*              线程初始化                                                  */
/*                                                                          */
/****************************************************************************/
Void ThreadInit()
{
    // GPIO Hwi 线程配置
    // CIC0 映射系统中断 1 到主机中断 1
    CpIntc_mapSysIntToHostInt(0, 1, 1);

    // 配置系统中断 1 Hwi 线程
    CpIntc_dispatchPlug(1, &GPIO17Hwi, 1, TRUE);

    // 使能主机中断 0
    CpIntc_enableHostInt(0, 1);

    // 配置 CPU 中断
    Hwi_Params hwiParams;
    Hwi_Params_init(&hwiParams);
    hwiParams.eventId = CpIntc_getEventId(1);
    hwiParams.arg = 1;
    hwiParams.enableInt = TRUE;
    Hwi_create(4, &CpIntc_dispatch, &hwiParams, NULL);
}

/****************************************************************************/
/*                                                                          */
/*              主函数                                                      */
/*                                                                          */
/****************************************************************************/
Int main()
{
        // 初始化
    PerihInit();
    ThreadInit();

        // 启动消息
    ConsoleWrite("\r\n\r\nDSP GPIO Interrupt Application\r\n");
    ConsoleWrite("Build on %s %s %d Version %s\r\n\r\n", __DATE__, __TIME__, __TI_COMPILER_VERSION__, AppVerStr);

        // 启动 SYS/BIOS 系统调度
    BIOS_start();

    return(0);
}
回复 支持 反对

使用道具 举报

16

主题

43

帖子

1289

积分

金牌会员

Rank: 6Rank: 6

积分
1289
发表于 2019-9-10 11:18:19 | 显示全部楼层
广州创龙莫工 发表于 2019-8-7 16:54
关于这部分,我们后面会根据客户的需求提供相关测试例程。我们这边使用GPIO17做了测试。SOM-TL665x的GPIO17 ...




这个寄存器定义是不是有问题?GPIO_BINTEN最低位是开启中断,其余位均无效


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  回帖提醒

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号-1  

GMT+8, 2019-11-21 21:32 , Processed in 0.071721 second(s), 54 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表