- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
UART中断的初始化配置 中断的初始化配置
• • • • • • • • • • • • • • • • • • VOID int_uart0(VOID) { UNSIGNED sysclk = 50000000; // 系统时钟 UNSIGNED baudrate = 57600; // 波特率 UNSIGNED databit = 8; // 数据位 UNSIGNED trigerlevel = 8; // 触发级 INT recie = 1; INT thrie = 0; // 接收中断使能 0 disable, 1 enble // 发送中断使能 0 disable, 1 enble
19
异常处理方式
reset_handler
FIQ 0x1C IRQ 0x18 0x14
fiq_handler
B irq_handler
(Reserved) Data Abort 0x10 B data_abort_handler
Prefetch Abort 0x0C B prefetch_abort_handler SWI 0x08 Undef 0x04 Reset 0x00 B SWI_handler
UART中断服务程序 中断服务程序
• VOID uart_handler(INT Vector) • { • case 接收数据状态中断 接收数据有效中断 Timeout中断 发送FIFO中断 Modem状态变化中断 • } //中断服务子程序 中断服务子程序
25
中断控制器小结
• 挂接在总线上,和各个模型相连 • 管理各个中断源(中断屏蔽、优先级管 理),送出irq和fiq信号给微处理器
21
IRQ异常处理程序(汇编) 异常处理程序(汇编) 异常处理程序
• IRQ_Handler • • IMPORT int_vector_handler • BL int_vector_handler • SUBS PC , LR ,#4
22
IRQ异常处理程序(C) 异常处理程序( ) 异常处理程序
26
6
INTC的特性 的特性
• 响应速度
– 普通中断(IRQ) – 快速中断(FIQ)
• 中断源
– 内部硬件中断 – 外部硬件中断 – 软件强制中断
• 中断可屏蔽 • 中断优先级可配 • 中断触发方式
7
INTC的结构框图 的结构框图
8
INTC的接口信号 的接口信号
信号名 位宽 方向 描述 APB时钟 pclk 1 input APB时钟 presetn 1 input 复位信号 paddr 8 input 地址信号 模块选择信号, psel 1 input 模块选择信号,高电平有效 使能信号, penable 1 input 使能信号,高电平使能 写信号。 pwrite 1 input 写信号。低电平读高电平写 APB总线32位写数据总线 总线32 pwdata 32 input APB总线32位写数据总线 APB总线32位读数据总线 总线32 prdata 32 output APB总线32位读数据总线 个快速中断(FIQ) Fiq_intsrc 4 input 4个快速中断(FIQ)输入 32个普通中断 IRQ) 个普通中断( Irq_intsrc 32 input 32个普通中断(IRQ)输入 FIQ输出 输出, fiq 1 output FIQ输出,高电平有效 irq 1 output IRQ输出,高电平有效 IRQ输出, 输出
– – – – 上升沿触发 下降沿触发 高电平触发 低电平触发
• 外部中断信号特殊处理
– 去除毛刺、寄存、同步到总线时钟
• 外部中断需要清除
16
使用外部中断
1、清除外部中断
– – – – – – 在使用外部中断以前,必须先清除在此之前的中断信号 先配置管脚方向为输入 再配置中断触发类型 最后配置管脚模式为中断模式 设置INTC的中断屏蔽寄存器的相应位屏蔽中断 设置INTC的相应位以允许该中断源产生的中断
• IFSR:最终中断状态寄存器,32位
– 只有优先级大于IPLR寄存器所设置的中断源才能在此 寄存器相应位置位
• IPLR:中断优先级寄存器,4位有效位
– 设置普通中断的优先级门限,只有优先级大于此值的 中断才能通过优先级过滤逻辑送到CPU
12
Fiq中断产生 中断产生
13
INTC中的寄存器(续) 中的寄存器( 中的寄存器
• UART
– 数据发送结束中断,数据接收有效中断
• TIMER
– 定时/计时中断
• DMAC
– DMA错误和DMA传输完成
• PWM
– 采样数据FIFO满
• LCDC
– 错误响应、帧结束、帧起始
• SSI
– FIFO空满、发送FIFO下溢、接收FIFO上溢
15
中断源- 中断源-外部中断
• 比内部中断复杂,不可控 • 通常和GPIO口复用 • 中断源触发方式
• • • • • • • • • • • • • • • • • • • • • • • • • INT_VECTOR vector[]={ /* interrupt number, 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 }, };
• ISR:中断状态寄存器,32位
– 当对应中断源或使能位(IER)无效时,该位才为0
11
INTC中的寄存器(续) 中的寄存器( 中的寄存器
• IMR:中断屏蔽寄存器,32位
– 是否屏蔽对应的IRQ中断信号
• IMSR:屏蔽状态寄存器,32位
– 对应的中断源、使能位无效或屏蔽位有效时,该位才 为0
Reset
Vector Table
3
INTC的作用 的作用
• 连接在APB总线上 • 对SoC芯片中各个外设的中断进行管理,并 送出Irq信号给ARM微处理器
ARM nIRQ
IRQ1 IRQ2
INTC
IRQN
4
INTC在SoC芯片中的位置 在 芯片中的位置
INTC
5
目录
• 中断控制器的作用 • 中断控制器的硬件设计 • 中断控制器的软件编程
2、配置IO控制寄存器
3、配置中断寄存器
17
目录
• 中断控制器的作用 • 中断控制器的硬件设计 • 中断控制器的软件编程
18ຫໍສະໝຸດ Baidu
ARM异常向量表 异常向量表
Exception Type Reset Undefined Instruction Software Interrupt (SWI) Prefetch Abort (Instructions) Data Abort IRQ (Interrupt) FIQ (Fast Interrupt) Mode Supervisor Undefined Supervisor Abort Abort IRQ FIQ Vector Address 0x00000000 0x00000004 0x00000008 0x0000000C 0x00000010 0x00000018 0x0000001C
• • • • • • • • • • • • • • extern void int_vector_handler(void) { U32 intnum; U8 i = 0; intnum = *(RP)(INTC_IFSTAT); while(intnum != 1) { intnum = intnum>>1; i++; } (*vector[i].handler)(); return; }
B Undef_handler
B reset_handler
20
异常处理程序
• • • • • • • • • • • • • • • • • LDR LDR LDR LDR LDR LDR LDR LDR RESET_ENTRYDCD UNDEF_ENTRY SWI_ENTRY DCD PABORT_ENTRY DABORT_ENTRY SYSERR_ENTRY IRQ_ENTRY DCD FIQ_ENTRY DCD pc,RESET_ENTRY pc,UNDEF_ENTRY pc,SWI_ENTRY pc,PABORT_ENTRY pc,DABORT_ENTRY pc,SYSERR_ENTRY pc,IRQ_ENTRY pc,FIQ_ENTRY Initialise_Target DCD UNDEF_Handler SWI_Handler DCD ABORT_Handler DCD ABORT_Handler DCD 0 IRQ_Handler FIQ_Handler
• • • • • • FIRSR:FIQ原始中断状态寄存器 FIFR:FIQ软件强制中断寄存器 FIER:FIQ中断允许寄存器 FISR:FIQ中断状态寄存器 FIMR:FIQ中断屏蔽寄存器 FIFSR:FIQ中断最终状态寄存器
14
中断源- 中断源-内部中断
• RTC
– 秒中断、分中断、定时中断、Watchdog中断
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中断的初始化配置,该函数会对中断 中断的初始化配置, 函数 完成使用异步通信收发器 中断的初始化配置 允许寄存器、中断屏蔽寄存器等寄存器进行操作。 允许寄存器、中断屏蔽寄存器等寄存器进行操作。 24
9
Irq中断产生 中断产生
10
INTC中的寄存器 中的寄存器
• IRSR:IRQ原始中断状态寄存器
– 当对应的中断源无效时,该位为0
• IFR:IRQ软件强制中断寄存器,32位
– 是否软件强制该位对应的中断源发出中断信号
• IER IER:中断允许寄存器,32位 32
– 是否允许对应中断源的IRQ中断信号。
中断控制器
1
目录
• 中断控制器的作用 • 中断控制器的硬件设计 • 中断控制器的软件编程
2
ARM的异常向量表 的异常向量表
0x1C 0x18 0x14 0x10 0x0C 0x08 0x04 0x00
FIQ IRQ (Reserved) Data Abort Prefetch Abort
Software Interrupt Undefined Instruction