S5P4418裸机开发(十三):GIC

GIC系列文章:

  • arm GIC介绍之一
  • arm GIC介绍之二
    在这里插入图片描述
    GIC由Distributor和CPU interface组成;
    Group0,Secure accesses,FIQ驱动
    Group1,Non-secure accesses,IRQ驱动
    VIC和GIC:VIC可以用传统单片机中断的思维去理解,GIC应该从Linux系统的角度去考虑。
    VIC中外设的中断号n 对应到GIC中是 32 + n,GIC中SGI(ID0-ID15),PPI(ID16-ID31),SPI(ID16~ID1019)。

在这里插入图片描述

S5P4418的芯片手册只说明了通过VIC配置中断,尝试着通过GIC来配置中断一直没成功。但是使用VIC必须失能GIC,CPU才会响应VIC的中断。
另外A9的GIC好像是PL390。GICv1。
在这里插入图片描述
手册中提示参考文档 Cortex A9 MP Core Technical Reference Manual

  • GICD相关寄存器(Distributor)
    在这里插入图片描述

  • GICC相关寄存器(CPU interface)
    在这里插入图片描述

  • 这里还有一个命名的问题
    在这里插入图片描述

  • ARM® Generic Interrupt Controller Architecture Specification 中有对各寄存器详细描述

绕过GIC,GICC_CTLR[0] = 0

GICC_CTLR寄存器地址偏移为0x00,而基值在PERIPHBASE[31:13]中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过协处理器CP15 c15来获取基值。
Cortex-A9 Technical Reference Manual 中有具体说明。
在这里插入图片描述
MRC指令格式:
MCR{}

,< opcode_1>,,,{,}

	u32 periphbase;__asm__("MRC p15, 4, %0, c15, c0, 0\n":"=r"(periphbase));printf("PERIPHBASE:%x\r\n", periphbase);

这样就获取到基值了0xF0000000

#define PERIPHBASE              0xF0000000      // "MRC p15, 4, %0, c15, c0, 0\n"
#define GICC_ADDR               (PERIPHBASE + 0x0100)
#define GICD_ADDR               (PERIPHBASE + 0x1000)#define GICC_CTLR			    __REG(GICC_ADDR + 0x00)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部