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

📄 mpc860_smc.c

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 C
📖 第 1 页 / 共 2 页
字号:
SIOPCB *smc_opn_por(ID siopid, VP_INT exinf){	SIOPCB *siopcb;	siopcb = get_siopcb(siopid);	     					/*  流减慨匿贿  */	mpc860_andh_mem(SMCMR1, ~(SMCMR_TEN | SMCMR_REN));	/*	 *  ピンˇアサイン	 *    ポ〖トBの肋年	 *     BP25ピン¨SMTXD1	 *     BP24ピン¨SMRXD1	 */         				/*  漓脱ペリフェラル怠墙联买  */     	mpc860_orw_mem(PBPAR, (PBPAR_DD24 | PBPAR_DD25));        				/*  ペリフェラル怠墙0联买  */     	mpc860_andw_mem(PBDIR, ~(PBDIR_DR24 | PBDIR_DR25));        				/*  アクティブにドライブ  */     	mpc860_andw_mem(PBODR, ~(PBODR_OD24 | PBODR_OD25));    	/*    	 *  VCOUTからBRGCLKへの尸件犯眶肋年    	 *      SCCR.DFBRG=00¨尸件孺1    	 */    	unlock_sccr();          		/*  SCCRアンロック  */    	mpc860_andw_mem(SCCR, ~SCCR_DFBRG);    	/*  尸件孺肋年  */    	lock_sccr();            		/*  SCCRロック  */    	/*    	 *  ボ〖レ〖ト肋年∈BRG1∷    	 *    EN=1¨BRGカウントイネ〖ブル    	 *    EXTC=00¨クロックソ〖スにBRGCLKを联买    	 *    ATB=0¨オ〖トボ〖怠墙ディセ〖ブル    	 *    CD¨尸件孺    	 *    DIV16¨16尸件するか容か    	 */    	mpc860_wrw_mem(BRGC1, BRGC1_EN | (BRGC1_CD_VAL<<1));        	/*    	 *  BRG1とSMC1の儡鲁    	 *    SMC1=0¨NMSIモ〖ド∈驴脚步しない∷    	 *    SMC1CS=000¨クロックソ〖スBRG1    	 */    	mpc860_andw_mem(SIMODE, ~(SIMODE_SMC1 | SIMODE_SMC1CS));        	/* クロックが奥年するまで略つ */    	sil_dly_nse(SMC_1BIT_TIME);    	/*    	 *  バッファˇディスクリプタBDの肋年    	 */    					/*  RxBDベ〖スアドレス  */    	mpc860_wrh_mem(RBASE1, RxBD_BASE_ADDRESS);         				/*  TxBDベ〖スアドレス  */    	mpc860_wrh_mem(TBASE1, TxBD_BASE_ADDRESS);    	/*    	 *  奶慨プロセッサCPにINIT RX AND TX PARAMETERSコマンドを券乖    	 */    	mpc860_CP_command(CPCR_INIT_RX_TX_PARAMETERS, CPCR_CH_NUM_SMC1);        	/*  SDMAのUバス拇匿庭黎刨を肋年  */    	mpc860_wrw_mem(SDCR, SDCR_RAID_RB5);   /*  庭黎刨5¨奶撅借妄  */    	/*  バッファˇディスクリプタBDのエンディアン肋年  */    	mpc860_wrb_mem(RFCR1, RFCR_BO);		/*  减慨  */    	mpc860_wrb_mem(TFCR1, TFCR_BO);		/*  流慨  */    	    			/*  呵络减慨バッファ墓  */    	mpc860_wrh_mem(MRBLR1, PIC_BUFFER_SIZE);       		/*  アイドルキャラクタ眶浮叫怠墙ディセ〖ブル  */    	mpc860_wrh_mem(MAX_IDL1, 0);        	/*  减慨ブレ〖クに簇する肋年は涩妥ないのでクリア  */    	mpc860_wrh_mem(BRKLN1, 0);    	mpc860_wrh_mem(BRKEC1, 0);        	/*  STOP TRANSMITコマンドで流慨されるブレ〖クキャラクタの眶を肋年  */    	mpc860_wrh_mem(BRKCR1, 1);    	/*  减慨バッファˇディスクリプタRxBDの介袋步  */    	mpc860_wrh_mem(RxBD_STATUS,                 RxBD_STATUS_E | RxBD_STATUS_W | RxBD_STATUS_I);                /*  Eフラグセット  */                /*  W=1¨テ〖ブル柒の呵姜BD  */                /*  I=1¨减慨充哈み券栏  */    	mpc860_wrh_mem(RxBD_LENGTH, PIC_BUFFER_SIZE);  /*  デ〖タ墓  */       					/*  减慨バッファポインタ  */    	mpc860_wrw_mem(RxBD_BUFFP, (VW)Rx_buffer);    	/*  流慨バッファˇディスクリプタTxBDの介袋步  */    	mpc860_wrh_mem(TxBD_STATUS,    		TxBD_STATUS_R | TxBD_STATUS_W | TxBD_STATUS_I);                /*  Rフラグセット  */                /*  W=1¨テ〖ブル柒の呵姜BD  */                /*  I=1¨流慨充哈み券栏  */    	mpc860_wrh_mem(TxBD_LENGTH, PIC_BUFFER_SIZE);  /*  デ〖タ墓  */    					/*  流慨バッファポインタ  */    	mpc860_wrw_mem(TxBD_BUFFP, (VW)Tx_buffer);        	/*  笆涟のイベントをクリア  */    	mpc860_wrb_mem(SMCE1,    		SMCE_BRKE | SMCE_BRK | SMCE_BSY | SMCE_TX | SMCE_RX);    	/*  すべてのUART充哈みを钓材  */    	mpc860_wrb_mem(SMCM1,     		SMCM_BRKE | SMCM_BRK | SMCM_BSY | SMCM_TX | SMCM_RX);        	/*  SMCモ〖ド肋年  */    	mpc860_wrh_mem(SMCMR1, (VH)((0x9<<11) | SMCMR_SM_UART));        	/*          	 *  CLEN=9¨キャラクタ墓        	 *  SL=0¨1ストップビット        	 *  PEN=0¨パリティなし        	 *  SM=10¨SMCモ〖ド UART        	 *  DM=00¨壳们モ〖ド 奶撅瓢侯        	 *  TEN=0¨SMC流慨ディセ〖ブル        	 *  REN=0¨SMC减慨ディセ〖ブル        	 *   この箕爬ではまだ、流慨も减慨もイネ〖ブルではない        	 */        	mpc860_orh_mem(SMCMR1, (SMCMR_TEN | SMCMR_REN));        	/*          	 *  惧淡に裁えて        	 *   TEN=1¨SMC流慨イネ〖ブル        	 *   REN=1¨SMC减慨イネ〖ブル        	 */	siopcb->exinf = exinf;	siopcb->openflag = TRUE;	return(siopcb);}/* *  シリアルI/Oポ〖トのクロ〖ズ */voidsmc_cls_por(SIOPCB *siopcb){         					/*  流减慨匿贿  */	mpc860_andh_mem(SMCMR1, ~(SMCMR_TEN | SMCMR_REN));	siopcb->openflag = FALSE;}/* *  シリアルI/Oポ〖トへの矢机流慨 */BOOLsmc_snd_chr(SIOPCB *siopcb, char c){	if (smc_putready(siopcb)) {		smc_putchar(siopcb, c);		return(TRUE);	}	return(FALSE);}/* *  シリアルI/Oポ〖トからの矢机减慨 */INTsmc_rcv_chr(SIOPCB *siopcb){	if (smc_getready(siopcb)) {		return((INT)(UB) smc_getchar(siopcb));	}	return(-1);}/* *  シリアルI/Oポ〖トからのコ〖ルバックの钓材 */voidsmc_ena_cbr(SIOPCB *siopcb, UINT cbrtn){	SIL_PRE_LOC;		switch (cbrtn) {	case SIO_ERDY_SND:	/* 流慨充り哈み妥滇を钓材 */		SIL_LOC_INT();		mpc860_orh_mem(SMCMR1, SMCMR_TEN);		SIL_UNL_INT();		break;	case SIO_ERDY_RCV:	/* 减慨充り哈み妥滇を钓材 */		SIL_LOC_INT();		mpc860_orh_mem(SMCMR1, SMCMR_REN);		SIL_UNL_INT();		break;	}}/* *  シリアルI/Oポ〖トからのコ〖ルバックの敦贿 */voidsmc_dis_cbr(SIOPCB *siopcb, UINT cbrtn){	SIL_PRE_LOC;	switch (cbrtn) {	case SIO_ERDY_SND:	/* 流慨充り哈み妥滇を敦贿 */		SIL_LOC_INT();		mpc860_andh_mem(SMCMR1, ~SMCMR_TEN);		SIL_UNL_INT();		break;	case SIO_ERDY_RCV:	/* 减慨充り哈み妥滇を敦贿 */		SIL_LOC_INT();		mpc860_andh_mem(SMCMR1, ~SMCMR_REN);		SIL_UNL_INT();		break;	}}/* *  シリアルI/Oポ〖トに滦する流慨充哈み借妄 */Inline voidsmc_isr_siop_out(SIOPCB *siopcb){	/*  SMCE1での充哈み妥傍のチェックは貉んでいる  */		if (smc_putready(siopcb)) {		/*		 *  流慨奶梦コ〖ルバックル〖チンを钙び叫すˉ		 */		smc_ierdy_snd(siopcb->exinf);	}}/* *  シリアルI/Oポ〖トに滦する减慨充哈み借妄 */Inline voidsmc_isr_siop_in(SIOPCB *siopcb){	/*  SMCE1での充哈み妥傍のチェックは貉んでいる  */	if (smc_getready(siopcb)) {		/*		 *  减慨奶梦コ〖ルバックル〖チンを钙び叫すˉ		 */		smc_ierdy_rcv(siopcb->exinf);	}}/* *  SILを蝗脱したときのログ怠墙 */#ifdef SIL_DEBUG#define ENTER_SMC_ISR						\	if (sil_debug_on) {					\		syslog(LOG_EMERG, "Enter selial interrupt.");	\	}#else /* SIL_DEBUG */#define ENTER_SMC_ISR#endif /* SIL_DEBUG *//* *  SIO流慨充哈みサ〖ビスル〖チン *   *   流减慨鼎奶 *   */voidsmc_isr(){    	UB smce1, smcm1, event;    	SIL_PRE_LOC;	ENTER_SMC_ISR	    	if (!siopcb_table[0].openflag) goto exit_label;        	smce1 = mpc860_reb_mem(SMCE1);    	smcm1 = mpc860_reb_mem(SMCM1);    	event = smce1 & smcm1;    	    	if (event & (SMCE_BRKE | SMCE_BRK | SMCE_BSY)) {    		/*  エラ〖借妄¨踏窗喇  */    		goto exit_label;    	}    	    	if (event & SMCE_RX) {         /*  减慨充哈み  */	        	/*  1をセットすることにより、イベントをクリア  */        	mpc860_wrb_mem(SMCE1, SMCE_RX);        	smc_isr_siop_in(&siopcb_table[0]);    	}    	if (event & SMCE_TX) {         /*  流慨充哈み  */	        	/*  1をセットすることにより、イベントをクリア  */        	mpc860_wrb_mem(SMCE1, SMCE_TX);        	smc_isr_siop_out(&siopcb_table[0]);    	}exit_label:    	/*    	 *  充哈み妥滇のクリア    	 *    充哈みコントロ〖ラ巴赂    	 *    ∈sys_config.hで年盗∷    	 */    	SIL_LOC_INT();	CLEAR_IRQ_TO_ICU(SMC1);	    	SIL_UNL_INT();}/* * ポ〖リングによる矢机の流慨 */voidsmc_putc_pol(char c){	BOOL is_ten_ok;	VH smcmr;	if (smc_openflag()) {	/*  介袋步されているかチェック  */		smcmr = mpc860_reh_mem(SMCMR1);		is_ten_ok = smcmr & SMCMR_TEN;		if (!is_ten_ok) {						/*  流慨钓材  */			mpc860_orh_mem(SMCMR1, SMCMR_TEN);		}				/*  バッファが鄂になるのを略つ  */		while(!smc_putready(&siopcb_table[0]));			smc_putchar(&siopcb_table[0], c);	/*  1矢机流慨  */		if (!is_ten_ok) {				/*  バッファが鄂になるのを略つ  */			while(!smc_putready(&siopcb_table[0]));				/*  2キャラクタ尸略つ  */			sil_dly_nse(SMC_1BIT_TIME*18*10);							/*  流慨敦贿  */			mpc860_andh_mem(SMCMR1, ~SMCMR_TEN);		}	}}/*  end of file  */

⌨️ 快捷键说明

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