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的中斷。
另外A的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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章