完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
参考GPIO示例代码编写的一个外部中断的程序,通过FPGA定时向DSP发送外部中断信号(触发引脚为GPIO15),检测上升沿,下降沿触发中断函数。现在的问题是程序跑起来观测相关IFR寄存器值,对应位的值按照程序出现变化,现在的问题是始终不进中断函数。 一. GPIO中断初始化 void GPIO_Interrupts_Init(void) [ int tmp; gpCGEM_regs->INTMUX1=0; // Interrupt Mux Registers1 intsel4~7 unuse and mask it gpCGEM_regs->INTMUX2=0; // Interrupt Mux Registers2 intsel8~11 unuse and mask it gpCGEM_regs->EVTMASK[0]= 0xFFFFFFFF; gpCGEM_regs->EVTMASK[1]= 0xFFFFFFFF; gpCGEM_regs->EVTMASK[3]= 0xFFFFFFFF; //combine all GPIO interrupts to INTC event 2 gpCGEM_regs->EVTMASK[2]= 0xFFFFFFFF; ~((1<<(CSL_GEM_GPINTN- 64))| //(1<<(CSL_GEM_GPINT14-64))| //Gpio14 event num = 88 (1<<(CSL_GEM_GPINT15-64))); // Gpio15 event num = 89 //没使用组合事件,使用直通事件 //map INTC event2 to INT14 and INT15 (Output of event combiner 2, //for events 64 through 95.int14=events88,int14=events89) tmp = gpCGEM_regs->INTMUX1; tmp &= 0xFFFFFF00; gpCGEM_regs->INTMUX1 = tmp|(CSL_GEM_GPINT15);// | (CSL_GEM_EVT2<
/*Clear all DSP core events*/ gpCGEM_regs->EVTCLR[0] = 0xFFFFFFFF; gpCGEM_regs->EVTCLR[1] = 0xFFFFFFFF; gpCGEM_regs->EVTCLR[2] = 0xFFFFFFFF; gpCGEM_regs->EVTCLR[3] = 0xFFFFFFFF; //clear DSP core interrupt flag ICR= IFR; //enable INT15 IER = IER|(1<<15); /*Interrupt Service Table Pointer to begining of LL2 memory*/ ISTP= 0x800000; //enable GIE TSR = TSR|1; ] 二. GPIO初始化,使用了直通事件 void GPIO_init() [ gpGPIO_regs->BANK_REGISTERS[0].DIR = 0; //set all gpio pin is out /*enable interrupt*/ //Interrupt per-bank enable register (bit0=0 disable gpio interrupts,bit0=1 enable gpio interrupt) gpGPIO_regs->BINTEN= 3; /*trigger interrupt on rising edge*/ //gpGPIO_regs->BANK_REGISTERS[0].SET_RIS_TRIG= 0xFFFFFFFF; //Gpio14 used rising edge /*trigger interrupt on falling edge*/ gpGPIO_regs->BANK_REGISTERS[0].SET_FAL_TRIG= 0xFFFFFFFF; //Gpio15 used falling edge gpGPIO_regs->BANK_REGISTERS[0].SET_FAL_TRIG= 0xFFFFFFFF; /*clear output data*/ gpGPIO_regs->BANK_REGISTERS[0].CLR_DATA= 0xFFFFFFFF; ] 三. 自己写的测试用中断函数 int int15TestCnt = 0; void interrupt GpioInt15Service(void) [ static int Int15TestOutCnt = 0; Uint32 eventFlag; int15TestCnt++; if(int15TestCnt%1000==0) [ Int15TestOutCnt++; puts("int15 test success!rn"); ] ] 四. 中断向量表,更改的地方 1.最顶上宏定义 ;reference to the externally defined ISR .ref _c_int00 .ref GpioInt15Service .ref Exception_service_routine .ref exception_record .global vectors 2. 中断向量表 ;-------------------------------------------------------------- ;interrupt vector table .sect "vecs" .align 1024 vectors: VEC_RESET _c_int00 ;RESET VEC_ENTRY NMI_ISR ;NMI/Exception VEC_DUMMY ;RSVD VEC_DUMMY ;RSVD VEC_DUMMY ;interrupt 4 VEC_DUMMY ;interrupt 5 VEC_DUMMY ;interrupt 6 VEC_DUMMY ;interrupt 7 VEC_DUMMY ;interrupt 8 VEC_DUMMY ;interrupt 9 VEC_DUMMY ;interrupt 10 VEC_DUMMY ;interrupt 11 VEC_DUMMY ;interrupt 12 VEC_DUMMY ;interrupt 13 VEC_ENTRY ;interrupt 14 VEC_DUMMY GpioInt15Service ;interrupt 15 .end 问题1:使用GPIO作为外部中断,通过GPIO15由FPGA向DSP发脉冲促发中断,GPIO方向设置为输入,GPIO15电阻两端用示波器量1.8V,Debug时观测IFR寄存器对应位的值出现变化,但是程序不进中断函数。 问题2:gpGPIO_regs->BINTEN该寄存器在datasheet查询后,BINTEN在6657中只有BIT0的设置有实际意义,即BIT0:disable,BIT1:enable,为什么在例子中赋值为3。 问题3:GPIO BANK_REGISTERS为什么是数组,在资料中并没有找到 |
|
相关推荐
6个回答
|
|
IFR.15置1表示中断发生了,检查一下IER.15和GIE有没有使能?
你用CSL库的话,可以参考下面的wiki网站配置中断。 http://processors.wiki.ti.com/index.php/Configuring_Interrupts_on_Keystone_Devices#Configuring_CIC BINTEN.bit1是reserved位,写0,写1都没影响。 bank_registers是一个结构体,在CSL库里的cslr_gpio.h头文件里 有定义。 |
|
|
|
vuywsdfwf 发表于 2018-6-21 13:35 现在程序跑起来,IFR中IF15置1,TSR中的GIE enable,IER中IE15也是enable。已然不能触发中断函数。 |
|
|
|
在 VEC_DUMMY GpioInt15Service ;interrupt 15这里设置断点,能停在这行代码上吗? |
|
|
|
不能,程序就是进不了中断函数。 |
|
|
|
搞定了 扣掉了KeyStone_Exception_cfg函数 |
|
|
|
检测上升沿,下降沿触发中断函数,是什么意思,要是一样的吧
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
618 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
583 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1035 浏览 1 评论
698 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
507 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
143浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
110浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
116浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
113浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
151浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 19:14 , Processed in 0.873689 second(s), Total 92, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号