📄 ct11mpcore_eb.h
字号:
eb_gic_int_enable(id);}/* * GIC CPUインタフェ〖ス簇息のドライバ *//* * DICのプロセッサの充哈み庭黎刨を肋年 */ Inline voideb_gic_cpu_set_priority(int pri){ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_PR), pri);}/* * DICのプロセッサの充哈み庭黎刨のどのビットを蝗脱するか */Inline voideb_gic_cpu_enable_priority(int mask_bit){ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_BPR), mask_bit);}Inline voideb_gic_cpu_disable(void){ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_CCR), 0x00);} /* * GIC CPUインタフェ〖スの介袋步 * maks_bit : 孺秤滦据とする充哈み庭黎刨のビットを回年 * pri : プロセッサの充哈みマスクを回年 */ Inline voideb_gic_cpu_init(int mask_bit, int pri){ /* 铜跟步 */ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CPUIF_CCR), EB_GIC_CPUIF_CCR_EN); /* 充哈み庭黎刨のうち铜跟にするbitを回年*/ eb_gic_cpu_enable_priority(mask_bit); /* プロセッサの充哈みマスクを肋年 */ eb_gic_cpu_set_priority(pri);}Inline voideb_gic_init(int mask_bit, int pri){ eb_gic_disable(); eb_gic_cpu_disable(); /* * 充哈み链敦贿 */ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x00), 0xFFFFFFFF); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x04), 0xFFFFFFFF); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_ECR + 0x08), 0xFFFFFFFF); /* * ペンディングクリア */ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x00), 0xFFFFFFFF); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x04), 0xFFFFFFFF); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_PCR + 0x08), 0xFFFFFFFF); /* * コンフィギュレ〖ション */ sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x00), 0x55555555); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x04), 0x55555555); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x08), 0x55555555); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x0C), 0x55555555); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x10), 0x55555555); sil_wrw_mem((VP)(EB_GIC_BASE + EB_GIC_CFGR + 0x14), 0x55555555); eb_gic_enable(); eb_gic_cpu_init(mask_bit, pri);}/* * ドライバ *//* * DIC簇息のドライバ */ /* * DICの铜跟步 */Inline voidmpcore_dic_enable(void){ int i; /* DICインタフェ〖スを痰跟に */ sil_wrw_mem((VP)MPCORE_DIC_CR, 0x00); /* 充哈みを链て敦贿 */ for(i = 0; i < MPCORE_DIC_TNUM_INT/32; i++){ sil_wrw_mem((VP)(MPCORE_DIC_CE + (4 * i)), 0xffffffff); } /* ペンディングをクリア */ for(i = 0; i < MPCORE_DIC_TNUM_INT/32; i++){ sil_wrw_mem((VP)(MPCORE_DIC_CP + (4 * i)), 0xffffffff); } /* 庭黎刨呵你に肋年 */ for(i = 0; i < MPCORE_DIC_TNUM_INT/4; i++){ sil_wrw_mem((VP)(MPCORE_DIC_IPR + (4 * i)), 0xffffffff); } /* モ〖ド介袋步(1-N Level) */ for(i = 0; i < MPCORE_DIC_TNUM_INT/16; i++){ sil_wrw_mem((VP)(MPCORE_DIC_ICR + (4 * i)), 0x55555555); } /* DICインタフェ〖スを铜跟に */ sil_wrw_mem((VP)MPCORE_DIC_CR, MPCORE_DIC_CR_ENABLE); }/* * DIC充哈み钓材 */Inline voidmpcore_dic_int_enable(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(MPCORE_DIC_SE + offset_addr), (1 << offset_bit));}/* * DIC充哈み敦贿 */Inline voidmpcore_dic_int_disable(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(MPCORE_DIC_CE + offset_addr), (1 << offset_bit));}/* * DIC充哈みペンディングクリア */Inline voidmpcore_dic_int_clear(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(MPCORE_DIC_CP + offset_addr), (1 << offset_bit));}/* * DIC充哈みペンディングセット */static inline voidmpcore_dic_int_set(int id){ UW offset_addr; UW offset_bit; offset_addr = (id / 32) * 4; offset_bit = id % 32; sil_wrw_mem((VP)(MPCORE_DIC_SP + offset_addr), (1 << offset_bit)); }/* * DIC充哈み庭黎刨の肋年 */ Inline voidmpcore_dic_set_priority(int id, int pri){ UW offset_addr; UW offset_bit; offset_addr = (id / 4) * 4; offset_bit = ((id % 4) * 8) + 4; sil_wrw_mem((VP)(MPCORE_DIC_IPR + offset_addr), (sil_rew_mem((VP)(MPCORE_DIC_IPR + offset_addr)) & ~(0xf << offset_bit)) | (pri << offset_bit));}/* * DIC充哈みタ〖ゲットの肋年 * CPUはORで回年 */ Inline voidmpcore_dic_set_target(int id, int cpu){ UW offset_addr; UW offset_bit; offset_addr = (id / 4) * 4; offset_bit = ((id % 4) * 8); sil_wrw_mem((VP)(MPCORE_DIC_ITR + offset_addr), (sil_rew_mem((VP)(MPCORE_DIC_ITR + offset_addr)) & ~(0xf << offset_bit)) | (cpu << offset_bit)); }/* * DIC充哈みコンフィギュレ〖ション肋年 */ Inline voidmpcore_dic_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)(MPCORE_DIC_ICR + offset_addr), (sil_rew_mem((VP)(MPCORE_DIC_ICR + offset_addr)) & ~(0x3 << offset_bit)) | (set << offset_bit)); }/* * DICに掐蜗する充哈みの介袋步 * id : 充哈みID(DICの瓷妄ID) * pri : 充哈み庭黎刨 * cpu : タ〖ゲットCPU * 0を回年するとsys_defs.hで回年したPRCIDで回年したプロセッサを * 回年する * cfg : コンフィギュレ〖ション */Inline voidmpcore_dic_init_int_source(int id, int pri, int cpu, int cfg){ /* 充哈み庭黎刨の肋年 */ mpcore_dic_set_priority(id, pri); if(cpu != 0){ /* タ〖ゲットプロセッサの回年 */ mpcore_dic_set_target(id, cpu); } else{ mpcore_dic_set_target(id, (1<<(PRCID-1))); } /* level high + N-N software model */ mpcore_dic_set_config(id, cfg); /* 充哈みペンディングクリア */ mpcore_dic_int_clear(id); /* 充哈み钓材 */ mpcore_dic_int_enable(id);}/* * ソフトウェア充哈みを券乖 */Inline voidmpcore_dic_swi(int cpu, int id){ sil_wrw_mem((VP)MPCORE_DIC_SIR, (cpu << MPCORE_DIC_SIR_CPU_OFFSET) |id);}/* * DIC CPUインタフェ〖ス簇息のドライバ *//* * DICのプロセッサの充哈み庭黎刨を肋年 */ Inline voidmpcore_dic_cpu_set_priority(int pri){ sil_wrw_mem((VP)MPCORE_DIC_CPUIF_PMR, (pri << MPCORE_DIC_CPUIF_PMR_OFFSET));}/* * DICのプロセッサの充哈み庭黎刨のどのビットを蝗脱するか */Inline voidmpcore_dic_cpu_enable_priority(int mask_bit){ sil_wrw_mem((VP)MPCORE_DIC_CPUIF_BPR, mask_bit);}/* * DIC CPUインタフェ〖スの介袋步 * maks_bit : 孺秤滦据とする充哈み庭黎刨のビットを回年 * pri : プロセッサの充哈みマスクを回年 */ Inline voidmpcore_dic_cpu_init(int mask_bit, int pri){ /* 铜跟步 */ sil_wrw_mem((VP)MPCORE_DIC_CPUIF_CR, MPCORE_DIC_CPUIF_CR_EN); /* 充哈み庭黎刨のうち铜跟にするbitを回年*/ mpcore_dic_cpu_enable_priority(mask_bit); /* 链ビット铜跟 */ /* プロセッサの充哈みマスクを肋年 */ mpcore_dic_cpu_set_priority(pri);}/* * EBのリソ〖スの拎侯 */ Inline voideb_led_out(unsigned char ptn){ sil_wrw_mem((VP)EB_LED, ptn);}Inline voidset_led(unsigned char ptn){ sil_wrw_mem((VP)EB_LED, ((ptn & 0x3) << (PRCID-1)*2) | (sil_rew_mem((VP)EB_LED) & ~(0x03 << (PRCID-1)*2)));}/* * EB と Core Tile 粗の充哈みの介袋步 * 充哈みモ〖ドをnewモ〖ドwithoutDCCへ */Inline voideb_core_tile_init_int_mode(void){ /* EBのシステムレジスタをアンロック */ sil_wrw_mem((VP)EB_SYS_LOCK, EB_SYS_LOCK_UNLOCK); /* 充哈みモ〖ドをnewモ〖ドwithoutDCCへ */ sil_wrw_mem((VP)EB_SYS_PLD_CTRL1, (sil_rew_mem((VP)EB_SYS_PLD_CTRL1) & ~EB_SYS_PLD_CTRL1_INTMODE) | EB_SYS_PLD_CTRL1_INTMODE_NEW_NODCC); /* EBのシステムレジスタをロック */ sil_wrw_mem((VP)EB_SYS_LOCK, EB_SYS_LOCK_LOCK);} /* * 柒垄UART脱 词白SIOドライバ *//* * カ〖ネル弹瓢箕脱の介袋步(sys_putcを蝗脱するため) */extern void eb_uart_init(void);/* * シリアルI/Oポ〖ト介袋步ブロック * ドライバ巴赂 */typedef struct sio_port_initialization_block { VP reg_base; /* レジスタのベ〖スアドレス */ UW int_id; /* 充哈み戎规 */}SIOPINIB;/* * シリアルI/Oポ〖ト瓷妄ブロックの年盗 */typedef struct sio_port_control_block { const SIOPINIB *siopinib; /* シリアルI/Oポ〖ト介袋步ブロック */ VP_INT exinf; /* 橙磨攫鼠 */ BOOL openflag; /* オ〖プン貉みフラグ */ BOOL sendflag; /* 流慨充哈みイネ〖ブルフラグ */ BOOL getready; /* 矢机を减慨した觉轮 */ BOOL putready; /* 矢机を流慨できる觉轮 */}SIOPCB;/* * コ〖ルバックル〖チンの急侍戎规 */#define SIO_ERDY_SND 1u /* 流慨材墙コ〖ルバック */#define SIO_ERDY_RCV 2u /* 减慨奶梦コ〖ルバック *//* * オンチップのUARTからのポ〖リング叫蜗 */extern void uart_putc(char c);/* * SIOドライバの介袋步ル〖チン */extern void uart_initialize(void);/* * オ〖プンしているポ〖トがあるか々 */extern BOOL uart_openflag(void);/* * シリアルI/Oポ〖トのオ〖プン */extern SIOPCB *uart_opn_por(ID siopid, VP_INT exinf);/* * シリアルI/Oポ〖トのクロ〖ズ */extern void uart_cls_por(SIOPCB *siopcb);/* * シリアルI/Oポ〖トへの矢机流慨 */extern BOOL uart_snd_chr(SIOPCB *siopcb, char c);/* * シリアルI/Oポ〖トからの矢机减慨 */extern INT uart_rcv_chr(SIOPCB *siopcb);/* * シリアルI/Oポ〖トからのコ〖ルバックの钓材 */extern void uart_ena_cbr(SIOPCB *siopcb, UINT cbrtn);/* * シリアルI/Oポ〖トからのコ〖ルバックの敦贿 */extern void uart_dis_cbr(SIOPCB *siopcb, UINT cbrtn);/* * SIOの充哈みサ〖ビスル〖チン */extern void uart_in_isr(void);extern void uart_out_isr(void);/* * シリアルI/Oポ〖トからの流慨材墙コ〖ルバック */extern void uart_ierdy_snd(VP_INT exinf);/* * シリアルI/Oポ〖トからの减慨奶梦コ〖ルバック */extern void uart_ierdy_rcv(VP_INT exinf);/* * SMPモ〖ドの铜跟步 */extern void mpcore_smp_mode_enable(void);/* * キャッシュ簇息の簇眶 */extern void mpcore_dcache_enable(void);extern void mpcore_dcache_disable(void);extern void mpcore_icache_enable (void);extern void mpcore_icache_disable(void);extern void mpcore_cache_enable(void);extern void mpcore_cache_disable(void);/* * MMUの介袋步 */extern void mpcore_mmu_init(void);/* * スピンロックを艰评 */Inline voidmpcore_spin_lock(UINT *lock){ UINT locked; for(;;){ Asm(" mov r2, #0x01 \n" "\t ldrex r1, [%1] \n" "\t cmp r1, #0x00 \n" "\t wfene \n" "\t strexeq r1, r2,[%1] \n" "\t mov %0, r1 \n" :"=r"(locked):"r"(lock):"r1","r2", "cc"); /* 喇根したらリタ〖ン */ if(locked == 0){ mpcore_data_memory_barrier(); return; } }}/* * スピンロックを倡庶 */Inline voidmpcore_spin_unlock(UINT *lock){ mpcore_data_memory_barrier(); *lock = 0; mpcore_data_sync_barrier(); Asm("sev");}#endif /* _MACRO_ONLY */#endif /* _EB_MPCORE_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -