xscugic.h文件中定义了以下多个函数。 //连接:设置中断服务函数注册 //入口参数:SCU GIC实例,中断ID,定义中断处理函数,中断 s32 XScuGic_Connect (XScuGic *InstancePtr, u32 Int_Id, Xil_InterruptHandler Handler, void *CallBackRef); //断开连接:中断服务程序不再连接//暂时这么理解吧,反正对于我这种垃圾来说也用不上 void XScuGic_Disconnect(XScuGic *InstancePtr, u32 Int_Id); //SCU GIC使能和禁用,入口参数是SCU GIC实例,中断ID void XScuGic_Enable(XScuGic *InstancePtr, u32 Int_Id); void XScuGic_Disable(XScuGic *InstancePtr, u32 Int_Id); //SCU GIC配置初始化函数 s32 XScuGic_CfgInitialize(XScuGic *InstancePtr, XScuGic_Config *ConfigPtr, u32 EffectiveAddr); //软件中断,入口参数:SCU GIC实例,中断ID,CPU的ID s32 XScuGic_SoftwareIntr(XScuGic *InstancePtr, u32 Int_Id, u32 Cpu_Id); //获取中断优先级触发类型。入口参数:SCU GIC实例,中断ID,优先级,触发类型? void XScuGic_GetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id,u8 *Priority, u8 *Trigger); //设置中断优先级触发类型。入口参数:SCU GIC实例, 中断ID,优先级,触发类型? void XScuGic_SetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id, u8 Priority, u8 Trigger); //中断映射到CPU中。入口:SCU GIC实例,CPU ID,中断ID void XScuGic_InterruptMaptoCpu(XScuGic *InstancePtr, u8 Cpu_Id, u32 Int_Id); //来自于CPU的中断不映射,入口参数:SCU GIC实例,CPU ID,中断ID void XScuGic_InterruptUnmapFromCpu(XScuGic *InstancePtr, u8 Cpu_Id, u32 Int_Id); //来自于CPU的中断全都不映射,入口参数:SCU GIC实例,CPU ID void XScuGic_UnmapAllInterruptsFromCpu(XScuGic *InstancePtr, u8 Cpu_Id); //暂停GIC,入口参数:SCU GIC实例 void XScuGic_Stop(XScuGic *InstancePtr); //设置CPU的ID。 void XScuGic_SetCpuID(u32 CpuCoreId); //获取CPU的ID u32 XScuGic_GetCpuID(void); //查询配置。入口参数:设备ID,返回值:GIC配置结构体指针 XScuGic_Config *XScuGic_LookupConfig(u16 DeviceId); //中断处理函数 void XScuGic_InterruptHandler(XScuGic *InstancePtr); //自测函数,入口参数:SCU GIC实例 s32 XScuGic_SelfTest(XScuGic *InstancePtr); 下边对比一下初始化中断函数的共同点: 1、在配置某个功能的建立中断系统函数前需要对某几种功能进行配置。这些功能配置也有相同的部分: 2、在建立中断系统函数时(也就是在XxxSetupInterSystem函数中)总有以下语句是重复的: 这些中断配置的相同点终于完成了!!!!! 3、相同点配置完之后:我们就该配置与功能模块相关的东西了。 例如设置串口接收中断的触发方式(RxFIFO的出发等级1)!例如使能定时器中断的开启!例如配置引脚输入触发中断的方式!使能引脚下降沿中断等等!这时候再去看UG585! 4、配置XxxHandler函数。有关XxxHandler函数的编写还没总结,应该是参考UG585和例程吧。一、 GIC头文件中的那些函数
二 、ZYNQ中配置函数的步骤过程
//就是查询当前设备(如串口)的ID。 DeviceConfig = XScuGic_LookupConfig(DEVICE_ID); //对DeviceConfig的初始化。第一个参数:Device的实例 //第二个参数IntcConfig是查找器件后获得的配置信息。 //第三个参数是这个Device配置信息的CPU基地址(我TM都不知道我在说些什么了,哈哈哈哈~)。 XScuGic_CfgInitialize(DeviceInstancePtr, DeviceConfig, DeviceConfig->CpuBaseAddress); //然后配置这个Device的模式,功能等等参数。如串口的波特率,GPIO的方向等等吧~这写模式或者功能都能在相应的头文件中找到。
//入口参数:中断设备的ID,但貌似最终都是宏定义到了0U(我也不知道什么时候能定义到其他数值) //返回值:IntcConfig的类型是结构体指针。XScuGicConfig * IntcConfig;C语言能力欠缺的表示不要去深究这里边的信息究竟是什么了。 //只要按照这个步骤会配置就行了。 IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID); //对SCU GIC配置的初始化。第一个参数:SCU GIC的实例 //第二个参数IntcConfig是查找器件后获得的配置信息。 //第三个参数是这个设备配置信息的CPU基地址(我TM都不知道我在说些什么了,哈哈哈哈~)。综合可知,GIC就是一个Device! XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig, IntcConfig->CpuBaseAddress); Xil_ExceptionInit();//中断异常的初始化,这句话可以不要,因为函数里边没什么内容 //建立中断异常处理。第一个参数是不变的:可以查找得到,无论这个数值有几层宏定义,最终结果总是等于5 //第二个参数总是不变的,它恒对应中断处理函数——XScuGic_InterruptHandler //第三个参数也是不可变的,总是SCU GIC的实例 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, GicInstancePtr); //使能中断异常,这个函数也是更古不变的! Xil_ExceptionEnable(); //中断服务函数的注册。那么这里的后两个入口参数需要注意一点了! //第一个入口参数:是更古不变的,无论怎么查找,无论经过了多少层宏定义,那么它的最终形式是GIC的实例,类型是XScuGic。 //第二个参数:中断ID //第三个参数:Xxx功能正常发生中断时候,所定义的中断服务函数的名称(有的人称之为句柄,都一个道理)。 //第四个参数:Xxx功能的实例。如UART的实例(含波特率,校验位等数值),又比如私有定时器的实例等。 XScuGic_Connect(IntcInstancePtr, Int_Id, (Xil_ExceptionHandler)XxxHandler, (void *)XxxInstancePtr); XScuGic_Enable(IntcInstancePtr, Int_Id);//第一个参数不用说了,第二个参数是中断ID
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算