⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ct11mpcore_eb.h

📁 FDMP the body of the kernel, the Information-Technology Promotion Agency (IPA) adopted by the unexpl
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *  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 + -