C6455下基于BIOS的GPIO中断配置(转,包含配置以及完整测试代码)
2013-06-20 21:36:00
源自网络。
之前在非BIOS下利用CSL库函数配置GPIO中断成功,后来由于工作需要,得在BIOS下使用Event事件来触发,于是开始了漫漫长路的征程。经过一番努力,终于取得成果,现在和大家一起分享一下。
主函数中的外设接口的初始化就不多说了,直奔主题开始配置GPIO。
初始化GPIO;
void IntiGPIO(void)
{
GPIO_PERLOCK = GPIO_PERLOCK_Value;
GPIO_PERCFG0 = GPIO_PERCFG0_Value; //Set GPIO to enabled mode
//然后修改GPIO控制寄存器
GPIO_BINTEN = GPIO_BINTEN_Value; //打开GPIO中断功能
GPIO_DIR = GPIO_DIR_Value; //GP4、GP5、GP6、GP7 pin configured as input pin
GPIO_CLR_DATA = GPIO_CLR_DATA_Value;
//GPINT4、GPINT5、GPINT6、GPINT7 interrupt and EDMA event is triggered on rising edge//
GPIO_CLR_RIS_TRIG = GPIO_CLR_RIS_TRIG_Value;
GPIO_SET_RIS_TRIG = GPIO_SET_RIS_TRIG_Value;
//GPIO_CLR_FAL_TRIG = GPIO_CLR_FAL_TRIG_Value;
//GPIO_SET_FAL_TRIG = GPIO_SET_FAL_TRIG_Value;
GPIO_EVTCLR1 = GPIO_EVTCLR1_Value; //Event Clear Register 1
GPIO_EVTSET1 = GPIO_EVTSET1_Value;
GPIO_INTMUX1 = GPIO_INTMUX1_Value; //Interrupt Multiplexor Register 1
CSR = 0x10002503;
IER = 0x000000f3; //Reset interrupt enable, NMIE Enable, IE4,IE5,IE6,IE7 Enable
}
GPIO里面的寄存器均是自己设置的地址,并根据手册自己配置。其中CSR和IER属于全局中断寄存器,所以是没有地址的,通过extern cregister voilatile unsign int CSR或IER来定义。当初找两个寄存器的时候几乎把手册翻遍了也没有找到,最后还是论坛中的朋友给了帮助,在此非常感谢sasa188朋友。
2.新建BIOS,在图形配置文件中选择HWI-Hardware Interrupt Service Routine Manager,选择HWI_INT4,右键它,点“Properties”,打开属性编辑框。
3. 其次,在"Genral"选项中的“interrupt selection number ”中输入1,(因为GPINT4事件号是55,属于Event1),点击“应用”,这时"function"中会自动生成"_ECM_dispatch"。点“确定”退出属性设置。
(此处要使能use dispatcher,原因详见:http://www.cnblogs.com/youngforever/articles/3147153.html)
4. 选择“ECM-Event Combiner Manager”,点右键“Properties”,选择属性框中"Enable event combiner manager"中的复选框
5.在源文件中编写FPGA_UNPRO_BLOCK_intr中断服务程序。(目前只测试能否进入中断,并且响应多少下)。另一个中断使用GPINT5事件号是56,按照上述方法进行设置完成后,也编FPGA_UNPRO_FRAME_intr中断服务程序。
最后测试帧中断和块中断两者之间的数量关系是否对应。
void FPGA_UNPRO_BLOCK_intr()
{
BLOCK_unprointr_cnt++;
}
void FPGA_UNPRO_FRAME_intr()
{
FRAME_unprointr_cnt++;
if(FRAME_unprointr_cnt == 10)
{
BLOCK_unprointr_cnt = 0;
}
}
6. 在EVENT55中点右键,选择"Properties",打开属性框,在"function"中输入"_ FPGA_UNPRO_BLOCK_intr "."arg"框中输入55(事件号),同时选中"unmask event source“(作用是??),点确定
7.设置完毕,运行程序,当有中断来的时候即会进入FPGA_UNPRO_BLOCK_intr函数中。

浙公网安备 33010602011771号