完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是用TMS320C6416T的开发板,用外部中断6作为中断源,在程序配置好相关寄存器,并将程序下载到开发板并运行,在外部中断6引脚未接信号,此时用示波器观察到外部中断6引脚的信号一直是3.3V,通过设置断点观察到程序可以一直进入中断,观察寄存器看到外部中断6的IFR的一直是有效的;另外通过在程序中设置EXTPOL寄存器,编译器提示语句无效,下面是我的程序,求各位大神指教,不甚感激啊!
static GPIO_Config myGpioCfg1=[ 0x00000000, //GPGC: 直通模式下向CPU发送中断 0x000000F0, //GPEN: GP4、5、6、7设为输入输出状态 // 0x00000000, //GPDIR: GP0 - GP15 设为输入 0x00000030, //GPDIR: GP4 - GP5 设为输出 0x00000000, //GPVAL: GP0 - GP15 值锁存为0 // 0x00000030, //GPVAL: GP4 - GP5 值锁存为1 0x000000C0, //GPHM: GP4 - GP7 允许接受中断 0x000000C0, //GPLM:GP4 - GP7 允许接受中断 // 0x00000000 //GPPOL: 上升沿触发 0x0000000F //GPPOL: 下降沿触发 ]; void main(void) [ GPIO_Handle myhGpio; //Initialise CSL CSL_init(); //配置GPIO myhGpio = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET); GPIO_config(myhGpio,&myGpioCfg1); // IRQ_EXTPOL_XIP_OF(0xF); *( volatile unsigned int* )EXTPOL=0x0000000F; //中断设置 set_intrupt(); for(;;)[ ] ] //////////////////////////////////////////////////////////////////////////// //中断寄存器配置函数 //////////////////////////////////////////////////////////////////////////// void set_intrupt(void)[ IRQ_setVecs(vectors); *( volatile unsigned int* )EXTPOL=0x0000000F; IRQ_resetAll(); IRQ_map(IRQ_EVT_EXTINT6,6); IRQ_map(IRQ_EVT_EDMAINT,8); IRQ_nmiEnable(); IRQ_reset(IRQ_EVT_EXTINT6); IRQ_enable(IRQ_EVT_EXTINT6); IRQ_enable(IRQ_EVT_EDMAINT); //允许通道6中断; EDMA_intEnable(6); IRQ_globalEnable(); ] |
|
相关推荐
8 个讨论
|
|
在中断程序里是不需要做中断的关闭与使能的,因为硬件自动把GIE关闭了,退出中断时执行B IRP会自动打开GIE,你要做的是清除模块的中断状态。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2020-5-26 11:53 哦,这样啊,那我在中断服务子函数中做了中断的关闭与使能,应该是多余的了,但它应该不会影响程序进入中断函数吧。我是在外部中断6引脚直接没有接任何信号时候,用示波器观察到的波形一直是3.3V左右的高电平,但程序跑起来之后,可以连续进入外部中断6,不知道这个是什么原因导致的 |
|
|
|
|
|
dkhwakd 发表于 2020-5-26 12:09 提供一下ISR程序代码,以及GPIO的寄存器值(截屏)。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2020-5-26 12:23 下面是我的ISR程序代码: //////////////////////////////////////////////////////////////////////////// //外部中断6的ISR函数 //////////////////////////////////////////////////////////////////////////// interrupt void c_Int6_BeginRead(void) [ IRQ_disable(IRQ_EVT_EXTINT6); //暂时关闭外部中断6,在EDMA中断处理函数中手动开启INT6 IRQ_clear(IRQ_EVT_EXTINT6); printf("ExInt6 isr is running!n"); EDMA_open(EDMA_CHA_EXTINT6,EDMA_OPEN_ENABLE); set_qdma(); return; ] //////////////////////////////////////////////////////////////////////////// //EDMA中断的ISR函数 //////////////////////////////////////////////////////////////////////////// interrupt void c_Int8_EdmaCha6(void)[ printf("edma_int is running!n"); ............ IRQ_enable(IRQ_EVT_EXTINT6); //开启INT6 return; ] 这是在INT6引脚无信号输入状态下,程序跑起来后GPIO寄存器值: |
|
|
|
|
|
dkhwakd 发表于 2020-5-26 12:32 上面寄存器显示GPIO6的值在变化,说明外部是有信号变化的,可能是你量的不对吧,不然怎么别的bit没有变化呢? http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
696 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
605 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1065 浏览 1 评论
760 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
530 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
171浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
133浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
130浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
126浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
64浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 16:44 , Processed in 1.336694 second(s), Total 64, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号