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

📄 cpu_support.s

📁 toppers操作系统源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	swi   r24, r1,  28	swi   r25, r1,  24	swi   r26, r1,  20	swi   r27, r1,  16	swi   r28, r1,  12	swi   r29, r1,  8	swi   r30, r1,  4	swi   r31, r1,  0	lwi   r4 , r13, runtsk     /* r4 <- runtsk */	swi   r1 , r4,  TCB_sp 	   /* タスクスタックをTCBに瘦赂 */		la    r5 , r0,  dispatch_r /* 悸乖浩倡戎孟を瘦赂 */	swi   r5 , r4,  TCB_pc     /* 悸乖浩倡戎孟をTCBに瘦赂   */	bri   dispatcherdispatch_r:	lwi  r31,  r1, 0      /* レジスタを牲耽 */	lwi  r30,  r1, 4	lwi  r29,  r1, 8	lwi  r28,  r1, 12	lwi  r27,  r1, 16	lwi  r26,  r1, 20	lwi  r25,  r1, 24	lwi  r24,  r1, 28	lwi  r23,  r1, 32	lwi  r22,  r1, 36	lwi  r21,  r1, 40	lwi  r20,  r1, 44	lwi  r19,  r1, 48	lwi  r18,  r1, 52    lwi  r3,   r1, 56   /* MSRを提す(キャッシュの肋年を提す) */    mts  rmsr,r3            	addi r1,   r1, 60   /* スタックポインタを提す */	/*	 *  タスク毋嘲借妄ル〖チンの弹瓢	 *  dispatch_r は dispatcher から钙び叫されるため·	 *  tcb のアドレスは r4 に掐っている     *  Not Yet!	 */	lwi  r5,  r4,  TCB_enatex  /* r5 <- enatex                 */	andi r6,  r5,  TCB_enatex_mask  	beqi r6,  dispatch_r_1     /* enatex が FALSE ならリタ〖ン */	lwi  r7,  r4,  TCB_texptn  /* r5 <- texptn                 */	beqi r7,  dispatch_r_1     /* texptn が 0 でなければ       */	brlid r15  call_texrtn     /* タスク毋嘲ル〖チンの钙び叫し */		 nopdispatch_r_1:	Pop     r15	rtsd	r15,8 	 nop	.globl exit_and_dispatchexit_and_dispatch:	/* interrupt_count をクリア */	swi   r0,  r13, interrupt_count dispatcher:	/*	 * ここは充哈み敦贿で丸ること	 */	lwi  r4,  r13, schedtsk  /* r4 <- schedtsk              */	swi  r4,  r13, runtsk    /* schedtsk を runtsk に       */        	beqi r4,  dispatcher_1   /* schedtsk があるか           */	lwi  r1,  r4,  TCB_sp    /* TCBからタスクスタックを牲耽 */	lwi  r5,  r4,  TCB_pc    /* TCBから悸乖浩倡戎孟を牲耽   */	bra  r5	  dispatcher_1:	/*	 * ここで充哈みモ〖ドに磊り仑えるのは·ここで券栏する充哈み借妄     * にどのスタックを蝗うかという啼玛の豺疯と·充哈みハンドラ柒で	 * のタスクディスパッチの松贿という2つの罢蹋があるˉ	 */	la   r1,  r0,  STACKTOP         /* 充哈みスタックに恃构             */	la   r6,  r0,  1                /* interrupt_count を1に            */	swi  r6,  r13, interrupt_count	la   r5,  r0, 0x02 | MSR_CACHE_SETTING /* IE = '1'               */	la   r4,  r0, MSR_CACHE_SETTING        /* IE = '0'               */        dispatcher_2:	mts   rmsr, r5   /* 充哈み钓材(MSR(IE)をセット)      */	nop	nop	mts   rmsr, r4                  /* 充哈み敦贿(MSR(IE)をクリア)      */	lwi   r6,  r13,  reqflg         /* r6 <- reqflg                     */	beqi  r6,  dispatcher_2         /* reqflg が FALSE なら             */	swi   r0,  r13, interrupt_count /* interrupt_count をクリア         */	swi   r0,  r13,  reqflg         /* reqflg を FALSE に               */		bri   dispatcher	/*	 *  充哈みハンドラ/CPU毋嘲ハンドラ叫庚借妄	 * 	 * 提り黎がタスクで reqflg がセットされている眷圭のみここにくるˉ	 * interrupt_count = 0·充哈み敦贿觉轮·スクラッチレジスタを瘦赂した	 * 觉轮で钙び叫すことˉ	 */	.align 2	.globl ret_int	.globl ret_excret_exc:ret_int:	swi  r0,  r13,  reqflg   /* reqflg を FALSE に */	lwi  r5,  r13,  runtsk   /* r5 <- runtsk        */	lwi  r6,  r13,  enadsp   /* r6 <- enadsp        */	beqi r6,  ret_int_1      /* enadsp が FALSE なら ret_int_1 へ */	lwi  r4,  r13,  schedtsk /* r4 <- schedtsk                    */	sub  r6,  r4,   r5       /* runtsk と schedtsk が票じなら     */	beqi r6,  ret_int_1      /* ret_int_1 へ                      */	addi  r1,  r1,  -52      /* 荒りのレジスタを瘦赂する          */	swi   r19, r1,  48	swi   r20, r1,  44	swi   r21, r1,  40	swi   r22, r1,  36	swi   r23, r1,  32	swi   r24, r1,  28	swi   r25, r1,  24	swi   r26, r1,  20	swi   r27, r1,  16	swi   r28, r1,  12	swi   r29, r1,  8	swi   r30, r1,  4	swi   r31, r1,  0		swi   r1 , r5,  TCB_sp 	   /* タスクスタックをTCBに瘦赂 */		la    r6 , r0,  ret_int_r  /* 悸乖浩倡戎孟を瘦赂 */	swi   r6 , r5,  TCB_pc     /* 悸乖浩倡戎孟をTCBに瘦赂   */	bri   dispatcherret_int_r:		lwi  r31,  r1,  0      /* レジスタを牲耽 */	lwi  r30,  r1,  4	lwi  r29,  r1,  8	lwi  r28,  r1,  12	lwi  r27,  r1,  16	lwi  r26,  r1,  20	lwi  r25,  r1,  24	lwi  r24,  r1,  28	lwi  r23,  r1,  32	lwi  r22,  r1,  36	lwi  r21,  r1,  40	lwi  r20,  r1,  44	lwi  r19,  r1,  48	addi r1,   r1,  52	lwi  r3,   r1,   0    /* MSR を提す∈キャッシュの肋年を提す∷*/	mts  rmsr, r3                ret_int_1:	/*	 * タスク毋嘲ル〖チンの弹瓢	 * ret_int_r は dispatcher から钙び叫されるため·	 * tcb のアドレスは r4 に掐っている     * Not Yet!	 */	lwi  r5,  r4,  TCB_enatex  /* r5 <- enatex                 */	andi r6,  r5,  TCB_enatex_mask  	beqi r6,  ret_int_2        /* enatex が FALSE ならリタ〖ン */	lwi  r7,  r4,  TCB_texptn  /* r5 <- texptn                 */	beqi r7,  ret_int_2        /* texptn が 0 でなければ       */	brlid r15  call_texrtn     /* タスク毋嘲ル〖チンの钙び叫し */		 nopret_int_2:	lwi  r3,  r1, 0    /* MSR を提す∈充哈みIE=0で充哈み敦贿になる∷*/	mts  rmsr,r3	lwi  r18, r1, 4	lwi  r17, r1, 8	lwi  r16, r1, 12	lwi  r15, r1, 16	lwi  r14, r1, 20	lwi  r12, r1, 24	lwi  r11, r1, 28	lwi  r10, r1, 32	lwi  r9,  r1, 36	lwi  r8,  r1, 40	lwi  r7,  r1, 44	lwi  r6,  r1, 48	lwi  r5,  r1, 52	lwi  r4,  r1, 56	lwi  r3,  r1, 60	rtid r14,0 	 addik r1,r1,64		/*	 * タスク弹瓢借妄     *        *  スタックの艰り数     *  Microblaze Processor Reference Guide 52×53より     *  簇眶钙叫しのさい苞眶は·r5×r10 に呈羌するˉ     *  それと票箕に钙叫し傅はスタックフレ〖ムに苞眶の呈羌眷疥を澄瘦する涩妥     *  があるˉさらにその惧にはリンクレジスタ(R15)の尸の挝拌が涩妥となるˉ     *  钙叫し黎は构に戮の簇眶を钙び叫す眷圭霹に r5×r10 をこの挝拌に瘦赂す     * るˉ     *  Low Address     *             --------------------     *  new_sp -> | Link Register(R15) |     *             --------------------     *            |   Arg1脱の挝拌     |     *             --------------------     *            |   Arg2脱の挝拌     |     *             --------------------             *            |      ....          |     *             --------------------     *  High Address	 */	.text	.globl activate_r	.align 2activate_r:	ori   r4,  r0, 0x02 | MSR_CACHE_SETTING  /* msrの介袋猛        */	mts   rmsr,r4              /* 充哈み钓材(MSR(IE)をセット)      */    lw    r11, r1, r0          /* タスクの悸乖戎孟                 */    lwi   r5,  r1,  4          /* 苞眶∈exinf∷                    */	la    r15, r0,  ext_tsk -8 /* タスクからの提り黎               */	bra   r11                  /* タスクの悸乖倡幌                 */            /*     * 腮警箕粗略ち     */     .globl _sil_dly_nse_sil_dly_nse:     addi   r5, r5, -SIL_DLY_TIM1     bgti   r5, _sil_dly_nse_1     rtsd   r15, 8      nop  _sil_dly_nse_1:     addi   r5, r5, -SIL_DLY_TIM2     bgti   r5, _sil_dly_nse_1     rtsd   r15, 8      nop          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -