您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 10.1 中断控制器IP设计
1中断控制器2目录•中断控制器的作用•中断控制器的硬件设计•中断控制器的软件编程3ARM的异常向量表VectorTableFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x004INTC的作用•连接在APB总线上•对SoC芯片中各个外设的中断进行管理,并送出Irq信号给ARM微处理器INTCnIRQIRQ1IRQ2IRQNARM5INTC在SoC芯片中的位置INTC6目录•中断控制器的作用•中断控制器的硬件设计•中断控制器的软件编程7INTC的特性•响应速度–普通中断(IRQ)–快速中断(FIQ)•中断源–内部硬件中断–外部硬件中断–软件强制中断•中断可屏蔽•中断优先级可配•中断触发方式8INTCIP设计考虑因素–多中断源、软件可配置优先级、中断源序号可查询、中断源可选产生IRQ或者FIQ中断、中断源可软件屏蔽、软件强制中断int_srcsoft_intsoft_int_clrraw_int_srcint_selectraw_irq_statusraw_fiq_statusint_enableint_en_clren_irq_statusen_fiq_statuspriority_maskirq_pendingfiq_pendingvect_irq_numvect_fiq_numall_fiq_maskall_irq_maskirqfiq红色为控制寄存器黑色为状态寄存器9信号列表名称位宽方向说明APB总线接口pclk1bitinAPBclockpreset1bitinAPBresetpsel1bitinAPBperipheralpenable1bitinAPBenablepwrite1bitinAPBwritecontrolpaddr8bitsinAPBaddresspwdata32bitsinAPBwritedataprdata32bitsoutAPBreadbackdata来自其他外设的中断源信号int_srcnuminnumisthewholenumberofinterruptmaximumnumberis64输出到cpu的irq和fiqirq1bitoutirqrequestconnecttoprocessorfiq1bitoutfiqrequestconnecttoprocessor10整体框架APBorAHBapb_interfaceint_genint_srcpriority_logic(irq)irq_statusVectorInterruptControllerpriority_logic(irq)fiq_statusfiqirqApb_interface:是INTC与总线的接口模块;而又同时是INTC的控制模块,里面有INTC所有的寄存器信息;Int_gen:用于接收中断源,选择中断源为irq或者fiq;中断屏蔽;软件中断。Priority_logic:用于软件中断优先级屏蔽,并且在所有的未被屏蔽的中断信号里面选出优先级最高的中断源,并产生中断信号,分为irq模块和fiq模块;11Irq中断产生12INTC中的寄存器•IRSR:IRQ原始中断状态寄存器–当对应的中断源无效时,该位为0•IFR:IRQ软件强制中断寄存器,32位–是否软件强制该位对应的中断源发出中断信号•IER:中断允许寄存器,32位–是否允许对应中断源的IRQ中断信号。•ISR:中断状态寄存器,32位–当对应中断源或使能位(IER)无效时,该位才为013INTC中的寄存器(续)•IMR:中断屏蔽寄存器,32位–是否屏蔽对应的IRQ中断信号•IMSR:屏蔽状态寄存器,32位–对应的中断源、使能位无效或屏蔽位有效时,该位才为0•IFSR:最终中断状态寄存器,32位–只有优先级大于IPLR寄存器所设置的中断源才能在此寄存器相应位置位•IPLR:中断优先级寄存器,4位有效位–设置普通中断的优先级门限,只有优先级大于此值的中断才能通过优先级过滤逻辑送到CPU14Fiq中断产生15INTC中的寄存器(续)•FIRSR:FIQ原始中断状态寄存器•FIFR:FIQ软件强制中断寄存器•FIER:FIQ中断允许寄存器•FISR:FIQ中断状态寄存器•FIMR:FIQ中断屏蔽寄存器•FIFSR:FIQ中断最终状态寄存器16中断源-内部中断•RTC–秒中断、分中断、定时中断、Watchdog中断•UART–数据发送结束中断,数据接收有效中断•TIMER–定时/计时中断•DMAC–DMA错误和DMA传输完成•LCDC–错误响应、帧结束、帧起始•SPI–FIFO空满、发送FIFO下溢、接收FIFO上溢17中断源-外部中断•比内部中断复杂,不可控•通常和GPIO口复用•中断源触发方式–上升沿触发–下降沿触发–高电平触发–低电平触发•外部中断信号特殊处理–去除毛刺、寄存、同步到总线时钟•外部中断需要清除18使用外部中断1、清除外部中断–在使用外部中断以前,必须先清除在此之前的中断信号2、配置GPIO控制寄存器–先配置管脚方向为输入–再配置中断触发类型–最后配置管脚模式为中断模式3、配置中断寄存器–设置INTC的中断屏蔽寄存器的相应位屏蔽中断–设置INTC的相应位以允许该中断源产生的中断19目录•中断控制器的作用•中断控制器的硬件设计•中断控制器的软件编程20ARM异常向量表ExceptionTypeModeVectorAddressResetSupervisor0x00000000UndefinedInstructionUndefined0x00000004SoftwareInterrupt(SWI)Supervisor0x00000008PrefetchAbort(Instructions)Abort0x0000000CDataAbortAbort0x00000010IRQ(Interrupt)IRQ0x00000018FIQ(FastInterrupt)FIQ0x0000001C21异常处理方式Birq_handler(Reserved)Bdata_abort_handlerBprefetch_abort_handlerBSWI_handlerBUndef_handlerBreset_handlerFIQ0x1CIRQ0x180x14DataAbort0x10PrefetchAbort0x0CSWI0x08Undef0x04Reset0x00fiq_handlerirq_handler22异常处理程序•LDRpc,RESET_ENTRY•LDRpc,UNDEF_ENTRY•LDRpc,SWI_ENTRY•LDRpc,PABORT_ENTRY•LDRpc,DABORT_ENTRY•LDRpc,SYSERR_ENTRY•LDRpc,IRQ_ENTRY•LDRpc,FIQ_ENTRY••RESET_ENTRYDCDInitialise_Target•UNDEF_ENTRYDCDUNDEF_Handler•SWI_ENTRYDCDSWI_Handler•PABORT_ENTRYDCDABORT_Handler•DABORT_ENTRYDCDABORT_Handler•SYSERR_ENTRYDCD0•IRQ_ENTRYDCDIRQ_Handler•FIQ_ENTRYDCDFIQ_Handler23IRQ异常处理程序(汇编)•IRQ_Handler••入栈,保存现场•IMPORTint_vector_handler•BLint_vector_handler•出栈,恢复现场•SUBSPC,LR,#424IRQ异常处理程序(C)•externvoidint_vector_handler(void)•{•U32intnum;•U8i=0;••intnum=*(RP)(INTC_IFSTAT);•while(intnum!=1)•{•intnum=intnum1;•i++;•}•(*vector[i].handler)();•return;•}•INT_VECTORvector[]={•/*interruptnumber,handler*/•{INT_NULL,NULL},•{INT_EXT0,NULL},•{INT_EXT1,NULL},•{INT_EXT2,NULL},•{INT_EXT3,NULL},•{INT_EXT4,NULL},•{INT_EXT5,NULL},•{INT_EXT6,NULL},•{INT_EXT7,NULL},•{INT_EXT8,NULL},•{INT_EXT9,NULL},•{INT_EXT10,NULL},•{INT_EXT11,NULL},•{INT_EXT12,NULL},•{INT_EXT13,NULL},•{INT_EXT14,NULL},•{INT_SSI,ssi_handler},•{INT_UART,uart_handler},•{INT_WD,NULL},•{INT_GPT,NULL},•{INT_EMI,NULL},•{INT_DMA,NULL},•};25UART中断的初始化配置•VOIDint_uart0(VOID)•{•UNSIGNEDsysclk=50000000;//系统时钟•UNSIGNEDbaudrate=57600;//波特率•UNSIGNEDdatabit=8;//数据位••INTrecie=1;//接收中断使能0disable,1enble•INTthrie=0;//发送中断使能0disable,1enble••Intc_mask_irq(INT_UART0);//屏蔽uart0中断,中断屏蔽寄存器相应位置1•intc_enable_irq(INT_UART0);//使能uart0中断,*(RP)INTC_IEN|=0X01000000•init_uart0(sysclk,baudrate,databit,trigerlevel);//初始化uart0•uart0_int_en(recie,thrie);//配置UART的寄存器,接受中断使能,发送中断不使能•intc_unmask_irq(INT_UART0);//打开中断屏蔽,中断屏蔽寄存器相应位置0•}••函数int_uart0()完成使用异步通信收发器UART中断的初始化配置,该函数会对中断允许寄存器、中断屏蔽寄存器等寄存器进行操作。26UART中断服务程序•VOIDuart_handler(INTVector)//中断服务子程序•{•case接收数据状态中断接收数据有效中断Timeout中断发送FIFO中断Modem状态变化中断•}27中断控制器小结•挂接在总线上,和各个模块相连•管理各个中断源(中断屏蔽、优先级管理),送出irq和fiq信号给微处理器28Review(1)•中断控制器–挂在APB总线上–对外部中断、内部中断、软件强制中断进行管理,送出IRQ信号给ARM–设计时考虑接口信号和寄存器的设计•APB接口信号•中断源信号•送给ARM的IRQ、FIQ信号29Review(2)•中断控制器产生IRQ中断送给ARM的过程–外设产生的内部中断•外设的中断允许寄存器•外设中断屏蔽寄存器–与GPIO口复用的外部中断•GPIO的管脚方向、管脚模式、中断触发类型–软件强制中断–INTC•原始中断状态寄存器•中断允许寄存器•中断屏蔽寄存器•中断优先级寄存器•最终中断状态寄存器•送出IRQ信号给ARM30Review(3)•ARM处理中断的过程–执行完当前指令后PC指向0x18–跳转指令跳转到IRQ中断服务程序•保存现场•调用C编写的中断服务程序•恢复现场•恢复PC
本文标题:10.1 中断控制器IP设计
链接地址:https://www.777doc.com/doc-3710437 .html