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

绕过GIC,GICC_CTLR[0] = 0

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

	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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值