arm核芯片的arm gpio 寄存器都可以设置中断输入吗

在MQX 4.0中,多个GPIO脚中断问题(已解决) -
ARM Cortex-M系列产品 - 恩智浦技术社区
后使用快捷导航没有帐号?
查看: 2802|回复: 7
在MQX 4.0中,多个GPIO脚中断问题(已解决)
该用户从未签到主题帖子积分
新手上路, 积分 7, 距离下一级还需 43 积分
新手上路, 积分 7, 距离下一级还需 43 积分
我使用的GPIO_PORT_E的二个GPIO(GPIO_PIN4, GPIO_PIN28)引脚作为中断输入引脚,对于同一个GPIO_PORT的不同引脚的中断,中断函数好象只有一个,在中断函数中通过查询ISFR寄存器的值,确认是哪个GPIO脚中断,执行相应的代码。
在下例代码中,单独使用GPIO_PIN4或GPIO_PIN28作为中断引脚时,都会进入中断函数,但是同时配置二个中断引脚时,却不会产生中断,不知道在MQX中,如何正确配置,希望指点一下。
/* 中断响应函数 */
void int_service_routine(void *pin)
PORT_MemMapP
pctl = (PORT_MemMapPtr)PORTE_BASE_PTR;
if(pctl-&ISFR & (1ISFR & (1
该用户从未签到主题帖子积分
RE:在MQX 4.0中,多个GPIO脚中断问题
楼主用的是什么芯片,请给出芯片全称,另外你的例程是官方的吗?
如果是,请告诉我们你用的是哪个,便于我们验证。
该用户从未签到主题帖子积分
新手上路, 积分 7, 距离下一级还需 43 积分
新手上路, 积分 7, 距离下一级还需 43 积分
回复:在MQX 4.0中,多个GPIO脚中断问题
我用的芯片型号是MK60FN1M0VLQ15,在程序中,我参考的例程是&&Freescale\Freescale_MQX_4_0\mqx\examples\gpio,在网上发现这个帖子/que/ (Configure interrupt handler for different GPIO pins of same port ),和我使用的情况是一样的,在同一PORT中单独使用一个GPIO脚时OK,但使用多个时,就会出问题。
该用户从未签到主题帖子积分
回复:在MQX 4.0中,多个GPIO脚中断问题
回复第 3 楼 于 09:51:33发表:
我用的芯片型号是MK60FN1M0VLQ15,在程序中,我参考的例程是 Freescale\Freescale_MQX_4_0\mqx\examples\gpio,在网上发现这个帖子/que/ (Configure interrupt handler for different GPIO pins of same port ),和我使用的情况是一样的,在同一PORT中单独使用一个GPIO脚时OK,但使用多个时,就会出问题。
从PORT口的原理上讲不会出现这样的冲突,裸板中也是可以的。
这样吧,我把你的题转给我们的MQX工程师看看,是不是代码其他地方还要设置。
该用户从未签到主题帖子积分
高级会员, 积分 568, 距离下一级还需 432 积分
高级会员, 积分 568, 距离下一级还需 432 积分
回复:在MQX 4.0中,多个GPIO脚中断问题
MQX lwgpio driver是基于pin的,建议你检查下终端是否使能。检查lwgpio_int_enable,对每个pin分别使用。
该用户从未签到主题帖子积分
高级会员, 积分 568, 距离下一级还需 432 积分
高级会员, 积分 568, 距离下一级还需 432 积分
RE:在MQX 4.0中,多个GPIO脚中断问题
typedef struct {
& & uint8_t&&port_
& & uint8_t&& /* since struct holds one pin, pinmask will have only one bit set */
& & uint32_
} LWGPIO_STRUCT, * LWGPIO_STRUCT_PTR
这个结构是基于pin的
该用户从未签到主题帖子积分
新手上路, 积分 7, 距离下一级还需 43 积分
新手上路, 积分 7, 距离下一级还需 43 积分
回复:在MQX 4.0中,多个GPIO脚中断问题
这个问题已解决,感谢freescale的梁工
void int_service_routine(void *buttons)
& & LWGPIO_STRUCT_PTR&&*btn_array = (LWGPIO_STRUCT_PTR&&*)
& & LWGPIO_STRUCT_PTR&&btn = NULL;
& &&&btn = btn_array[0];
& & if(lwgpio_int_get_flag(btn))
& && &&&//printf(&GPIO_PIN4 Interrupt.\n&);
& && &&&lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) btn);
& & btn = btn_array[1];
& & if(lwgpio_int_get_flag(btn))
& && &&&//printf(&GPIO_PIN28 Interrupt.\n&);
& && &&&lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) btn);
void main_task
& && &&&uint32_t initial_data
& & /* Structures holding information about specific pin */
LWGPIO_STRUCT btn1,btn2;
& & /* opening pins for input */
& & if (!lwgpio_init(&btn1, BSP_BUTTON1, LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))
& && &&&printf(&Initializing button GPIO as input failed.\n&);
& && &&&_task_block();
& & /* Some platforms require to setup MUX to IRQ functionality,
& & for the rest just set MUXto GPIO functionality */
& & lwgpio_set_functionality(&btn1, BSP_BUTTON1_MUX_IRQ);
& & lwgpio_set_attribute(&btn1, LWGPIO_ATTR_PULL_UP, LWGPIO_AVAL_ENABLE);
& & /* enable gpio functionality for given pin, react on falling edge */
& & if (!lwgpio_int_init(&btn1, LWGPIO_INT_MODE_FALLING))
& && &&&printf(&Initializing button GPIO for interrupt failed.\n&);
& && &&&_task_block();
& & /* opening pins for input */
& & if (!lwgpio_init(&btn2, BSP_BUTTON2, LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))
& && &&&printf(&Initializing button GPIO as input failed.\n&);
& && &&&_task_block();
& & /* Some platforms require to setup MUX to IRQ functionality,
& & for the rest just set MUXto GPIO functionality */
& & lwgpio_set_functionality(&btn2, 1);
& & lwgpio_set_attribute(&btn2, LWGPIO_ATTR_PULL_UP, LWGPIO_AVAL_ENABLE);
& & /* enable gpio functionality for given pin, react on falling edge */
& & if (!lwgpio_int_init(&btn2, LWGPIO_INT_MODE_FALLING))
& && &&&printf(&Initializing button GPIO for interrupt failed.\n&);
& && &&&_task_block();
& & /* install gpio interrupt service routine */
& & //_int_install_isr(lwgpio_int_get_vector(&btn2), int_service_routine, (void *) &btn2);
& & /* set the interrupt level, and unmask the interrupt in interrupt controller */
& & //_bsp_int_init(lwgpio_int_get_vector(&btn2), 3, 0, TRUE);
& & /* enable interrupt on GPIO peripheral module */
& & lwgpio_int_enable(&btn2, TRUE);
& & btn_array[0] = &btn1;
& & btn_array[1] = &btn2;
& & /* install gpio interrupt service routine */
& & _int_install_isr(lwgpio_int_get_vector(&btn1), int_service_routine, (void *) btn_array);
& & /* set the interrupt level, and unmask the interrupt in interrupt controller */
& & _bsp_int_init(lwgpio_int_get_vector(&btn1), 3, 0, TRUE);
& & /* enable interrupt on GPIO peripheral module */
& & lwgpio_int_enable(&btn1, TRUE);
该用户从未签到主题帖子积分
RE:在MQX 4.0中,多个GPIO脚中断问题
楼主以后如果问题解决了,还请帮我们结贴,在问题标题的结尾加上(已解决),这样方便我们查看未结帖。
站长推荐 /2
社区会员们一直期待的LPC活动终于来了,只要20金币,大家就可以兑换一块LPC824的板子,大家还等什么
对于没有金币的网友,只要支付6元邮费即可获得LPC开发板一块
Tel: 3-8069
版权所有@苏州灵动帧格网络科技有限公司
Powered by请教一个DSP中断映射的问题 - C6000(TM)单核 - 德州仪器在线技术支持社区
请教一个DSP中断映射的问题
发表于7月前
<input type="hidden" id="hGroupID" value="31"
如图所示,DSP的GPIO有4个可以给中断,但是都是连接到GPIO_BANK4这组上的,我应该怎么设置才能DSP_INT0使用一个中断,DSP_INT1又使用另一个中断呢?&/p>
&p>谢谢!&/p>&div style=&clear:&>&/div>" />
请教一个DSP中断映射的问题
此问题已被解答
All Replies
如图所示,DSP的GPIO有4个可以给中断,但是都是连接到GPIO_BANK4这组上的,我应该怎么设置才能DSP_INT0使用一个中断,DSP_INT1又使用另一个中断呢?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元72875分
请问用的是哪款芯片?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
不好意思,忘了说了,用的是,谢谢。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元72875分
可以通过读INTSTATn寄存器的值来判断是组里的那个GPIO产生的中断。见下面的手册第830页上的说明。20.2.10.4 GPIO Interrupt Status/lit/ug/spruh91b/spruh91b.pdf
You have posted to a forum that requires a moderator to approve posts before they are publicly available.如何调试OMAP3530ARM这一端,如何配置一个GPIO口为接受输入中断模式? - 达芬奇(Davinci(TM)) - 德州仪器在线技术支持社区
如何调试OMAP3530ARM这一端,如何配置一个GPIO口为接受输入中断模式?
发表于5年前
<input type="hidden" id="hGroupID" value="33"
&span style=&font-size: font-family: Times New R background-color: #cce8&>&/span>&/p>
&p>大家好,我在做&a href=&.cn/product/cn/OMAP3530& target=&extwin&>OMAP3530&/a>相关的项目,我现在遇到的问题是不知道如何调试OMAP3530ARM这一端(DSP那一端可以采用CCS加JTAG模式)有什么好的方法或者硬件么?还有如何配置一个GPIO口(比如gpio_22)为可接收输入中断,寄存器逻辑设置是什么过程?求各位给我指点下迷津。&/p>&div style=&clear:&>&/div>" />
如何调试OMAP3530ARM这一端,如何配置一个GPIO口为接受输入中断模式?
此问题已被解答
All Replies
大家好,我在做相关的项目,我现在遇到的问题是不知道如何调试OMAP3530ARM这一端(DSP那一端可以采用CCS加JTAG模式)有什么好的方法或者硬件么?还有如何配置一个GPIO口(比如gpio_22)为可接收输入中断,寄存器逻辑设置是什么过程?求各位给我指点下迷津。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1060分
PAD_CONF 寄存器中先将引脚设GPIO
然后再GPIO_IRQENABLE设置引脚的中断使能
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
这个是所有的么,那上升沿触发还是下降沿这些都不明确啊 , 只用设置这两个么?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
或者你帮我看看这篇文章问题出在哪里?
I currently have an issue setting up an interrupt on the OMAP 3530 IVA module(a.k.a DSP) . I am trying to use GPIO 22 and 23 for the interrupt. I first configure the appropriate padconfig register to Mux_Mode_4 and input enable
// gpio 22
pSTBCtx-&Hardware_Context.pPadConfig-&CONTROL_PADCONF_ETK_D8=(MUX_MODE_4|INPUT_ENABLE);
// gpio 23
pSTBCtx-&Hardware_Context.pPadConfig-&CONTROL_PADCONF_ETK_D9=(MUX_MODE_4|INPUT_ENABLE);
I then setup the bank 1 registers as shown below
#define GPIO_22_BIT_OFFSET &(1&&22)
#define GPIO_23_BIT_OFFSET &(1&&23)
#define SCHEDULE_REQUEST GPIO_22_BIT_OFFSET
#define COLLECTION_DONE GPIO_23_BIT_OFFSET
pSTBCtx-&Hardware_Context.pBank1-&OE|=SCHEDULE_REQUEST|COLLECTION_DONE;
pSTBCtx-&Hardware_Context.pBank1-&RISINGDETECT|=SCHEDULE_REQUEST|COLLECTION_DONE ;
pSTBCtx-&Hardware_Context.pBank1-&SETIRQENABLE2=SCHEDULE_REQUEST ;
pSTBCtx-&Hardware_Context.pBank1-&SETIRQENABLE2=COLLECTION_DONE ;
At this point I see the following in the Bank registers.
pBank1 0x OMAP_GPIO_REGS * hex NotEdited
REVISION 0x REG32 hex NotEdited
zzzReserved01 0x unsigned int[3] hex NotEdited
SYSCONFIG 0x REG32 hex NotEdited
SYSSTATUS 0x REG32 hex NotEdited
IRQSTATUS1 0x REG32 hex NotEdited
IRQENABLE1 0x REG32 hex NotEdited
WAKEUPENABLE 0x REG32 hex NotEdited
RESERVED_00000 REG32 hex NotEdited
IRQSTATUS2 0x REG32 hex NotEdited
IRQENABLE2 0x00C00000 REG32 hex NotEdited
CTRL 0x REG32 hex NotEdited
OE 0xFFDE3FFF REG32 hex NotEdited
DATAIN 0x000100BC REG32 hex NotEdited
DATAOUT 0x REG32 hex NotEdited
LEVELDETECT0 0x REG32 hex NotEdited
LEVELDETECT1 0x REG32 hex NotEdited
RISINGDETECT 0x00C00000 REG32 hex NotEdited
FALLINGDETECT 0x REG32 hex NotEdited
DEBOUNCENABLE 0x REG32 hex NotEdited
DEBOUNCINGTIME 0x REG32 hex NotEdited
zzzReserved02 0x unsigned int[2] hex NotEdited
CLEARIRQENABLE1 0x REG32 hex NotEdited
SETIRQENABLE1 0x REG32 hex NotEdited
zzzReserved03 0x unsigned int[2] hex NotEdited
CLEARIRQENABLE2 0x00C00000 REG32 hex NotEdited
SETIRQENABLE2 0x00C00000 REG32 hex NotEdited
zzzReserved04 0x unsigned int[2] hex NotEdited
CLEARWAKEUPENA 0x REG32 hex NotEdited
SETWAKEUPENA 0x REG32 hex NotEdited
zzzReserved05 0x unsigned int[2] hex NotEdited
CLEARDATAOUT 0x REG32 hex NotEdited
SETDATAOUT 0x REG32 hex NotEdited
zzzReserved06 0x unsigned int[2] hex NotEdited
As you can see the IRQSTATUS2 indicates that the GPIO 22 has triggered.
I now enable the Wugen with following call
#define EVENT_ID_BANK_1 73
HWI_enableWugen(EVENT_ID_BANK_1);
I read the &WUGEN_MEVTSET1 register below:
0xEFFFFFFF
This indicates that IRQ 28 &is unmasked(I think). However when I read the WUGEN_PENDEVT0 register. I get:
I think the value should be 0x1xxxxxxx.
I then map the event to an interrupt:
#define HWINT_BANK6 7
HWI_eventMap(HWINT_BANK6,EVENT_ID_BANK_1);
I then Plug the ISR
//The ISR needs to be plugged
HWI_dispatchPlug(HWINT_BANK6,Gpio_Bank6_ISR,-1,NULL);
Finally I enable the IER
//The corresponding IER bit needs to be enabled.
C64_enableIER(1&&HWINT_BANK6);
But I never see the ISR get called and the corresponding bit in the IFR never gets set.
Any ideas?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1060分
设置电平触发为GPIODETECT1 和GPIODETECT2
上升沿触发为RISINGDETECT
下降沿触发为FALLENDETECT
这些在Technical Reference Guide里都有的
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
我要的是完整的配置过程,可以响应来自外中断的配置方式,包括GPIO的焊版,输入输出模式,上升沿还是下降沿检测,中断使能,不是你这种随随便便挑两点讲,请给一个完整的配置方案好么?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1060分
兄弟,你的要求还真不少呀,还要包括GPIO的焊板, 输入输入出模式。 上升还是下降沿。
正好这做两在做这一块东西,就满足你一下吧
测试,比如选两个GPIO引脚 分别是gpio_14, gpio_15,假如我们用gpio_14来输出一个脉冲,gpio_15来检测并生成成一个上升沿触发的中断。(这个只是一个简单测试,如果你需要外面来信号,请自己保证信号已经消抖动)
1, &这两个引脚中1K电阻连接起来。(不连电阻也行,不过连电阻放心一些)
2, &用TI的PINMUX UTILITY那个工具,算出PADCONF寄存器的设置。
3, &gpio_14 gpio_15都属于gpio_bank1 复位GPIO1_SYSCONFIG & & ]位操作写入1
4, &GPIO1_OE寄存器0x, &第14位写0设gpio_14为输出,第15位写1设置gpio_15为输入。
5, &注册一个GPIO15的中断服务程序
6, &GPIO_RISINGDETECT 0x位写1,开放上升尚触发
7, &如果你是在ARM下测试,写GPIO_SETIRQENABLE1 0x位,使能gpio_15的中断。如果是在DSP下,则写GPIO_IRQENABLE2
测试,这时你可以往GPIO_SETDATAOUT写0各1, &然后在从0变到1的过程中,就应该进行你的中断程序了.
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
嘻嘻 谢谢大牛,早知道你就是嫌麻烦,不想写,呵呵,这个论坛真的好棒,三寸丁好人。呵呵
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
嘻嘻 谢谢大牛,早知道你就是嫌麻烦,不想写,呵呵,这个论坛真的好棒,三寸丁好人。呵呵
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1763分
你好我想问一下,注册中断的中断号怎么给
You have posted to a forum that requires a moderator to approve posts before they are publicly available.&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
精通C#、ASP.net,熟悉B/S和C/S架构的软件开发,熟悉UML建模相关知识.
&#xe602; 下载此文档
正在努力加载中...
WINCE环境下操作ARM芯片GPIO的方法浅谈
下载积分:616
内容提示:WINCE环境下操作ARM芯片GPIO的方法浅谈
文档格式:PDF|
浏览次数:5|
上传日期: 16:08:53|
文档星级:&#xe60b;&#xe612;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
WINCE环境下操作ARM芯片GPIO的方法浅谈
官方公共微信

我要回帖

更多关于 arm的gpio管脚结构图 的文章

 

随机推荐