📄 ct11mpcore_eb.h
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2006 by Embedded and Real-Time Systems Laboratory * Graduate School of Information Science, Nagoya Univ., JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: ct11mpcore_eb.h,v 1.6 2007/07/18 01:57:53 honda Exp $ *//* * ARM CT11MPCore with the RealView Emulation Board脱ドライバ年盗 */#ifndef _EB_MPCORE_H_#define _EB_MPCORE_H_#ifndef _MACRO_ONLY#include <itron.h>#include <sil.h>#endif /* _MACRO_ONLY */#include "arm.h"#include "sys_config.h"#include "cpu_config.h"#ifndef _MACRO_ONLY/* * コプロへのアクセスマクロ */#define CP15_CONTROL_READ(x) Asm("mrc p15, 0, %0, c1, c0, 0":"=r"(x))#define CP15_CONTROL_WRITE(x) Asm("mcr p15, 0, %0, c1, c0, 0"::"r"(x))#define CP15_AUXILIARY_READ(x) Asm("mrc p15, 0, %0, c1, c0, 1":"=r"(x))#define CP15_AUXILIARY_WRITE(x) Asm("mcr p15, 0, %0, c1, c0, 1"::"r"(x))#define CP15_ICACHE_INVALIDATE() Asm("mcr p15, 0, %0, c7, c5, 0"::"r"(0))#define CP15_DCACHE_INVALIDATE() Asm("mcr p15, 0, %0, c7, c6, 0"::"r"(0))#define CP15_DCACHE_CLEAN_AND_INVALIDATE() Asm("MCR p15, 0, %0, c7, c14, 0"::"r"(0))#define CP15_PBUFFER_FLUSH() Asm("mcr p15, 0, %0, c7, c5, 4"::"r"(0))#define CP15_DATA_SYNC_BARRIER() Asm("mcr p15, 0, %0, c7, c10, 4"::"r"(0))#define CP15_DATA_MEMORY_BARRIER() Asm("mcr p15, 0, %0, c7, c10, 5"::"r" (0));#define CP15_INVALIDATE_UNIFIED_TLB() Asm("mcr p15, 0, r0, c7, c10, 4"::"r"(0))#define CP15_TTBCR_WRITE(x) Asm("mcr p15, 0, %0, c2, c0, 2"::"r"(x))#define CP15_TTB0_READ(x) Asm("mrc p15, 0, %0, c2, c0, 0":"=r"(x))#define CP15_TTB0_WRITE(x) Asm("mcr p15, 0, %0, c2, c0, 0"::"r"(x))#define CP15_DOMAINS_WRITE(x) Asm("mcr p15, 0, %0, c3, c0, 0":: "r"(x))/* * コプロのビット年盗 */#define CP15_CONTROL_XP_BIT (1 << 23)#define CP15_CONTROL_I_BIT (1 << 12)#define CP15_CONTROL_C_BIT (1 << 2)#define CP15_CONTROL_M_BIT (1 << 0)#define CP15_AUXILIARY_SA_BIT (1 << 5)#define CP15_TTB0_RGN_S (1 << 1)#define CP15_TTB0_RGN_WBWA (1 << 3)/* * コプロを脱いたル〖チン *//* * Data Synchronization Barrier * ˇ黎に券乖された read と write の姜位を略つ * ˇキャッシュ·ブランチプリディクション·TLBの拎侯の姜位を略つ * ˇこの炭吾の稿に今かれた炭吾は悸乖されない */Inline voidmpcore_data_sync_barrier(void){ CP15_DATA_SYNC_BARRIER();}/* * Data Memory Barrier * ˇプログラムの淡揭に骄って·黎に今かれた炭吾でのメモリアクセスが * 姜位するまで略つˉ * */Inline voidmpcore_data_memory_barrier(void){ CP15_DATA_MEMORY_BARRIER();}/* * TLBの痰跟步 */Inline voidmpcore_invalidate_unfied_tlb(void){ CP15_DATA_SYNC_BARRIER();}/* * Dキャッシュの痰跟步 */Inline voidmpcore_dcache_invalidate(void){ CP15_DCACHE_INVALIDATE();}/* * Dキャッシュのクリ〖ンと痰跟步 */Inline voidmpcore_dcache_clean_and_invalidate(void){ CP15_DCACHE_CLEAN_AND_INVALIDATE();}/* * Iキャッシュの痰跟步 */Inline voidmpcore_icache_invalidate(void){ CP15_ICACHE_INVALIDATE();}/* * プリフェッチバッファをクリア */Inline voidmpcore_pbuffer_flash(void){ CP15_PBUFFER_FLUSH();}#endif /* _MACRO_ONLY *//* * MPCoreのリソ〖ス *//* * MPCore タイマ */ #define MPCORE_TM_LR 0x1f000600 /* ロ〖ドレジスタ */#define MPCORE_TM_COUNT 0x1f000604 /* カウンタ〖レジスタ */#define MPCORE_TM_CNT 0x1f000608 /* コントロ〖ルレジスタ */#define MPCORE_TM_ISR 0x1f00060C /* 充哈みステ〖タスレジスタ */#define MPCORE_TM_CNT_EN 0x1#define MPCORE_TM_CNT_AR 0x2#define MPCORE_TM_CNT_IEN 0x4#define MPCORE_TM_CNT_PS_OFFSET 8#define MPCORE_TM_ISR_SCBIT 0x01/* * Snoop Control Unit */#define MPCORE_SCU_CTRL 0x1f000000 /* コントロ〖ルレジスタ */#define MPCORE_SCU_CONFIG 0x1f000004 /* コンフィギュレ〖ションレジスタ */#define MPCORE_SCU_CPUST 0x1f000008 /* CPUステ〖タス */#define MPCORE_SCU_IALL 0x1f00000C /* インバリッドオ〖ル */#define MPCORE_SCU_CTRL_EN (1 << 0) /* イネ〖ブル *//* * Distributed Interrupt Controller */#define MPCORE_DIC_CR 0x1f001000 /* コントロ〖ルレジスタ */#define MPCORE_DIC_SE 0x1f001100 /* 充哈みイネ〖ブルセット */#define MPCORE_DIC_CE 0x1f001180 /* 充哈みイネ〖ブルクリア〖 */#define MPCORE_DIC_SP 0x1f001200 /* 充哈みセットペンディング */#define MPCORE_DIC_CP 0x1f001280 /* 充哈みクリア〖ペンディング */#define MPCORE_DIC_IPR 0x1f001400 /* 充哈み庭黎刨レジスタ */#define MPCORE_DIC_ITR 0x1f001800 /* 充哈みタ〖ゲットレジスタ */#define MPCORE_DIC_ICR 0x1f001C00 /* 充哈みコンフィギュレ〖ションレジスタ */#define MPCORE_DIC_SIR 0x1f001F00 /* ソフトウェア充哈みレジスタ */#define MPCORE_DIC_CR_ENABLE 0x01#define MPCORE_DIC_ITR_CPU0 0x01#define MPCORE_DIC_ITR_CPU1 0x02#define MPCORE_DIC_ITR_CPU2 0x04#define MPCORE_DIC_ITR_CPU3 0x08#define MPCORE_DIC_SIR_CPU0 0x01#define MPCORE_DIC_SIR_CPU1 0x02#define MPCORE_DIC_SIR_CPU2 0x04#define MPCORE_DIC_SIR_CPU3 0x08#define MPCORE_DIC_SIR_CPUS 0x0f#define MPCORE_DIC_SIR_CPU_OFFSET 16#define MPCORE_DIC_TNUM_INT 224/* * 充哈み戎规(DICでの戎规) */#define DIC_INTID_NUM 47 /* 另眶 */#define DIC_INTID_TM 29#define DIC_INTID_EB_UART0 36#define DIC_INTID_EB_UART1 37//#define DIC_INTID_EB_UART2 42 /* GIC1を蝗脱 *///#define DIC_INTID_EB_UART3 43 /* GIC2を蝗脱 */#define DIC_INTID_EB_UART2 44 /* GIC1を蝗脱 */#define DIC_INTID_EB_UART3 45 /* GIC2を蝗脱 *//* * Distributed Interrupt Controller CPU Interface */ #define MPCORE_DIC_CPUIF_CR 0x1f000100 /* コントロ〖ルレジスタ */#define MPCORE_DIC_CPUIF_PMR 0x1f000104 /* 庭黎刨マスクレジスタ */#define MPCORE_DIC_CPUIF_BPR 0x1f000108 /* バイナリポイントレジスタ */#define MPCORE_DIC_CPUIF_IAR 0x1f00010C /* Interrupt Acknowledge Register */#define MPCORE_DIC_CPUIF_EOI 0x1f000110 /* End of Interrupt Register */#define MPCORE_DIC_CPUIF_RII 0x1f000114 /* Running Interrupt Register */#define MPCORE_DIC_CPUIF_CR_EN 0x01#define MPCORE_DIC_CPUIF_PMR_OFFSET 0x04#define MPCORE_DIC_CPUIF_BPR_ALL 0x03 /* 链てのビットが铜跟 */#define MPCORE_DIC_CPUIF_BPR_3 0x04 /* 3ビット铜跟 */#define MPCORE_DIC_CPUIF_BPR_2 0x05 /* 2ビット铜跟 */#define MPCORE_DIC_CPUIF_BPR_1 0x06 /* 1ビット铜跟 *//* * EBボ〖ドのリソ〖ス */#define EB_LED 0x10000008#define EB_SYS_LOCK 0x10000020#define EB_SYS_PLD_CTRL1 0x10000074#define EB_SYS_PLD_CTRL2 0x10000078#define EB_SYS_LOCK_LOCK 0x0000#define EB_SYS_LOCK_UNLOCK 0xA05F#define EB_SYS_PLD_CTRL1_INTMODE 0x01C00000#define EB_SYS_PLD_CTRL1_INTMODE_LEGACY 0x00000000#define EB_SYS_PLD_CTRL1_INTMODE_NEW_DCC 0x00400000#define EB_SYS_PLD_CTRL1_INTMODE_NEW_NODCC 0x00800000/* * システムコントロ〖ラ */#define EB_SYS_CTRL 0x10001000 #define EB_SYS_CTRL_TIMER01_1MHZ 0x00008000 /* 1MHzでカウント *//* * EBタイマ簇息 */#define EB_TIMER01_BASE (0x10011000)#define EB_TIMER01_0_LOAD (EB_TIMER01_BASE + 0x00)#define EB_TIMER01_0_VALUE (EB_TIMER01_BASE + 0x04)#define EB_TIMER01_0_CTRL (EB_TIMER01_BASE + 0x08)#define EB_TIMER01_0_CLR (EB_TIMER01_BASE + 0x0C)#define EB_TIMER_CTRL_TIMER_EN 0x00000080#define EB_TIMER_CTRL_PERIODIC 0x00000040#define EB_TIMER_CTRL_INT_EN 0x00000020#define EB_TIMER_CTRL_PRESCALE_1 0x00000000#define EB_TIMER_CTRL_PRESCALE_16 0x00000004#define EB_TIMER_CTRL_PRESCALE_256 0x00000008#define EB_TIMER_CTRL_TIMESIZE_16 0x00000000#define EB_TIMER_CTRL_TIMESIZE_32 0x00000002#define EB_TIMER_CTRL_ONE_SHOT 0x00000001/* * UART0簇息の年盗 */#define EB_UART0_BASE 0x10009000#define EB_UART1_BASE 0x1000A000#define EB_UART2_BASE 0x1000B000#define EB_UART3_BASE 0x1000C000#define EB_UART_DR 0x00 /* デ〖タレジスタ */#define EB_UART_RSR 0x04 /* 减慨ステ〖タスレジスタ */#define EB_UART_TECR 0x04 /* エラ〖クリア〖レジスタ */#define EB_UART_FR 0x18 /* フラグレジスタ */#define EB_UART_IBRD 0x24 /* 腊眶ボ〖レ〖トレジスタ */#define EB_UART_FBRD 0x28 /* 尸眶ボ〖レ〖トレジスタ */#define EB_UART_LCR_H 0x2C /* ラインコントロ〖ルレジスタ(H) */#define EB_UART_CR 0x30 /* コントロ〖ルレジスタ */#define EB_UART_IFLS 0x34 /* 充哈みFIFOレベル肋年レジスタ */#define EB_UART_IMSC 0x38 /* 充哈みマスクレジスタ */#define EB_UART_RIS 0x3C /* 充哈みステ〖タスレジスタ */#define EB_UART_MIS 0x40 /* マスク充哈みステ〖タスレジスタ */#define EB_UART_ICR 0x44 /* 充哈みクリアレジスタ */#define EB_UART_LCR_H_FEN 0x10 /* FIFOを铜跟に */#define EB_UART_LCR_H_WLEN_8 0x60 /* 8bit墓 */#define EB_UART_CR_RXE 0x0200 /* 减慨を铜跟に */#define EB_UART_CR_TXE 0x0100 /* 流慨を铜跟に */#define EB_UART_CR_UARTEN 0x0001 /* UARTを铜跟に */#define EB_UART_FR_TXFF 0x20 /* バッファがフルなら"1" */#define EB_UART_FR_RXFE 0x10 /* 铜跟なデ〖タがなければ"1" */#define EB_UART_IMSC_RXIM 0x0010 /* 减慨充哈みマスク */#define EB_UART_IMSC_TXIM 0x0020 /* 流慨充哈みマスク *//* * UARTのBPS肋年 */ #define EB_UART_IBRD_38400 0x27 /* 38400bps */#define EB_UART_FBRD_38400 0x04 /* 38400bps *//* * GICの肋年 */#define EB_GIC1_BASE 0x10040000#define EB_GIC2_BASE 0x10050000 #define EB_GIC_CPUIF_CCR 0x0000 /* CPUコントロ〖ルレジスタ */#define EB_GIC_CPUIF_PR 0x0004 /* 庭黎刨レジスタ */#define EB_GIC_CPUIF_BPR 0x0008 /* バイナリポイントレジスタ */#define EB_GIC_CPUIF_ACK 0x000C /* アクノリッジレジスタ */#define EB_GIC_CPUIF_EOI 0x0010 /* End of Interrupt レジスタ */#define EB_GIC_CPUIF_RPR 0x0014 /* Runnning priority レジスタ */#define EB_GIC_CPUIF_PER 0x0016 /* Pendingレジスタ */#define EB_GIC_CR 0x1000 /* コントロ〖ルレジスタ */#define EB_GIC_ESR 0x1100 /* 充哈みイネ〖ブルセット */#define EB_GIC_ECR 0x1180 /* 充哈みイネ〖ブルクリア */#define EB_GIC_PSR 0x1200 /* ペンディングセット */#define EB_GIC_PCR 0x1280 /* ペンディングクリア */#define EB_GIC_ACR 0x1300 /* アクティブレジスタ */#define EB_GIC_PR 0x1400 /* 庭黎刨レジスタ */#define EB_GIC_CFGR 0x1C00 /* コンフィギュレ〖ションレジスタ */#define EB_GIC_SFT 0x1F00 /* ソフトウェアインタラプトレジスタ */#define EB_GIC_CPUIF_CCR_EN 0x0001 /* 铜跟 */#define EB_GIC_BPR_ALL 0x0000 /* 链て铜跟 */#define EB_GIC_CR_EN 0x0001 /* 铜跟 */#define EB_GIC_INTID_UART2 46#define EB_GIC_INTID_UART3 47#ifdef USE_GIC1#define EB_GIC_BASE EB_GIC1_BASE#else /* USE_GIC2 */#define EB_GIC_BASE EB_GIC2_BASE#endif /* USE_GIC1 */#ifndef _MACRO_ONLY/* * GIC簇息のドライバ *//* * GICの铜跟步 */Inline voideb_gic_enable(void){ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CR), EB_GIC_CR_EN);}/* * GICの痰跟步 */Inline voideb_gic_disable(void){ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CR), 0x00);}/* * GIC充哈み钓材 */Inline voideb_gic_int_enable(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ESR + offset_addr), (1 << offset_bit));}/* * GIC充哈み敦贿 */Inline voideb_gic_int_disable(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + offset_addr), (1 << offset_bit));}/* * GIC充哈みペンディングクリア */Inline voideb_gic_int_clear(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + offset_addr), (1 << offset_bit));}/* * GIC充哈みペンディングセット */static inline voideb_gic_int_set(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PSR + offset_addr), (1 << offset_bit)); }/* * GIC充哈み庭黎刨の肋年 */ Inline voideb_gic_set_priority(int id, int pri){ UW offset_addr; UW offset_bit; offset_addr = (id / 4) * 4; offset_bit = ((id % 4) * 8); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PR + offset_addr), (sil_rew_mem((VP)(EB_GIC_BASE + EB_GIC_PR + offset_addr)) & ~(0xff << offset_bit)) | (pri << offset_bit));}/* * GIC充哈みコンフィギュレ〖ション肋年 */ Inline voideb_gic_set_config(int id, int set){ UW offset_addr; UW offset_bit; offset_addr = (id / 16) * 4; offset_bit = ((id % 16) * 2); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + offset_addr), (sil_rew_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + offset_addr)) & ~(0x3 << offset_bit)) | (set << offset_bit)); }/* * GICに掐蜗する充哈みの介袋步 * id : 充哈みID(DICの瓷妄ID) * pri : 充哈み庭黎刨 * cpu : タ〖ゲットCPU * 0を回年するとsys_defs.hで回年したPRCIDで回年したプロセッサを * 回年する * cfg : コンフィギュレ〖ション */Inline voideb_gic_init_int_source(int id, int pri, int cfg){ /* 充哈み庭黎刨の肋年 */ eb_gic_set_priority(id, pri); /* level high + N-N software model */ eb_gic_set_config(id, cfg); /* 充哈みペンディングクリア */ eb_gic_int_clear(id); /* 充哈み钓材 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -