历史上的今天
今天是:2025年03月31日(星期一)
2020年03月31日 | cortex-a8 S5PC100中断机制
2020-03-31 来源:eefocus
1.向量中断概述
S5PC100集成了3个向量中断控制器(后文用VIC来表示),采用的是ARM基于PrimeCell技术下的PL192核心,另外还包括了3个TZIC,即针对于TrustZone技术所涉及的中断控制器(后文都用TZIC表示),其核心为SP890。
S5PC100下支持94个中断源,其中TZIC为TrustZone单独设计以了一个安全软件中断接口,它提供了基于安全控制技术的nFIQ中断以及屏蔽来自非安全系统下的所有中断源。以下是S5PC100中断控制器的特点:
●支持94个向量IRQ中断
●灵活的硬件中断优先级
●可编程的中断优先级设置
●支持硬件上的优先级屏蔽
●支持编程上的优先级屏蔽
●内置IRQ/FIQ/软件中断产生器
●内置用于调试方案的寄存器
●原始中断状态寄存器/中断源请求状态寄存器
●支持特权模式下的限制性存取数据
当S5PC100收到来自片内外设和外部中断请求引脚的多个中断请求时,S5PC100的中断控制器在中断仲裁过程后向S5PC100,内核请求FIQ或IRQ中断。中断仲裁过程依靠处理器的硬件优先级逻辑,在处理器这边会跳转到中断异常处理例程中,执行异常处理程序,这个时候VICADDRESS寄存器的值就是仲裁后中断源对应的(ISR)中断处理程序的入口地址。
S5PC100的中断控制器的任务是在有多个中断发生时,选择其中一个中断通过IRQ或FIQ向CPU内核发出中断请求。实际上,最初CPU内核只有FIQ(快速中断请求)和IRQ(通用中断请求)两种中断,其他中断都是各个芯片厂家在设计芯片时,通过加入一个中断控制器来扩展定义的,这些中断根据中断的优先级高低来进行处理,更符合实际应用系统中要求提供多个中断源的要求,除此之外,向量中断控制器比以前的中断方式更加灵活,方便,把判断的任务留给了硬件,使得中断编程更为简洁。
在整个S5PC100的中断向量控制器中,可以看到所有中断源会先进入TZIC仲裁单元,该单元需要配置为是否可通过该中断源到VIC单元,默认下是可以通过的,即默认为非安全模式,这样所有中断直接到VIC下仲裁以及处理。
2.S5PC100中断控制
(1)程序状态寄存器的F位和I位。
如果CPSR程序状态寄存器的F位被设置为1,那么CPU将不接受来自中断控制器的FIQ(快速中断请求),如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受来自中断控制器的IRQ(中断请求)。因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零。
(2)中断模式(IntSelect)。
Cortex-A8提供了2种中断模式,即FIQ模式和IRQ模式。所有的中断源在中断请求时都要确定使用哪一种中断模式。
3.S5PC100中断源简介
在该芯片中,有三个VIC单元,其中VIC0涵盖了系统,DMA,定时器的中断源,VIC1包含了ARM核心,电源管理,内存管理,存储管理的中断源,VIC2则包含了多媒体,安全扩展等中断源,限于篇幅,这里只是简要的介绍,详细请读者自行查看用户手册。
史海拾趣
|
遥控器用的红外LED,因为红外LED发出的光不完全是红外光,也包含部分的可见光(红色)成分,所以肉眼能看到少许光。遥控器使用的LED,一般发射角度是30度左右,用户即使没有完全对准目标,也能有效操作。在没有外界红外线干扰的时候,遥控距离可以 ...… 查看全部问答> |
|
在wince 6.0中我有一个客户端程序,先后两次调用InitializeSecurityContext用于和google服务器端进行安全认证,第一次调用返回的是SEC_I_CONTINUE_NEEDED,第二次返回的是SEC_E_WRONG_PRINCIPAL,请问怎么解决啊?是不是和证书有关系?相同程序在wi ...… 查看全部问答> |
|
各位有需要电子元件的请和我联系,库存商品优惠啦!:D 小店欢迎您的光临 石家庄傲尔科技有限公司是一家专注于国外中小电子工程分包商,经过多年的发展,我公司与国际大的元件供应商如MOUSER, DIGIKEY建立了稳定的合作。 我们的优势:1. 保证 ...… 查看全部问答> |
|
void main(){ init_serialcom(); //步进电机不能有这个函数,这是一个初始化串口的函数, ATE0(); //步进电机也不能有这个函数,这是个向串口发送AT指令的函数。 为什么去掉这前两个函 ...… 查看全部问答> |
|
u8 sd_raw_get_info(struct sd_raw_info* info)中struct怎么理解 u8 sd_raw_get_info(struct sd_raw_info* info) { …… } 这个子程序怎么用啊,像u8 mmcWrite(u32 sector, u8* buffer)这种,我在主程序中只要定义unsigned char SD_Write1[]={\"0123456789\"}; 就可以用了mmcWrite(SD_Write1); 但是这个定义 ...… 查看全部问答> |
|
SD24的SD24CCTLx寄存器 SD24GRP 位 SD24_A group. Groups SD24_A channel with next higher channel. Not used for the last channel. 如何使用该位?… 查看全部问答> |




