亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smc1.c

?? ads mpc860上smc的驅(qū)動程序
?? C
字號:
/*-------------------------------------------------------------------------
* FILENAME:  smc1.c
*
* DESCRIPTION:   
*
*   The code in this module provides echo capability on SMC1. It's 
*   intent is to provide the beginnings of a debug port that is 
*   mostly compiler independent. If an ASCII terminal is connected
*   at 9600,N,8,1 on Port 2 (PB3) on the ADS board with no hardware
*   control, characters typed on the keyboard will be received by
*   SMC1 and echoed back out the RS232 port to the ASCII terminal.
*   This function was designed and tested on an ADS860 
*   development board. Note that if a different baud rate is 
*   required, there is a header file on the netcomm website under 
*   the General Software category that is labelled "Asynchronous
*   Baud Rate Tables".
*
* REFERENCES:
*
*   1) MPC860 Users Manual
*   2) PowerPC Microprocessor Family: The Programming Environments for 
*      32-Bit Microprocessors
*
* HISTORY:
*
* 27 APR 98  jay    initial release
*
*-------------------------------------------------------------------------*/

#include "netcomm.h"
#include "mpc860.h"
#include "masks860.h"
#include "smc1.h"

int stack[100]=0;
int stackTop;

/***********************/
/* Global Declarations */
/***********************/

EPPC  *IMMR;      /* IMMR base pointer */
BDRINGS *RxTxBD;  /* buffer descriptors base pointer */
LB *SMC1Buffers;  /* SMC1 base pointers */

/*---------------------*/
/* Function Prototypes */
/*---------------------*/

void  startup(void);
void  SMC1Init(void);
void  SMC1PutChar(UBYTE);
UBYTE SMC1GetChar(void);
UBYTE SMC1Poll(void);
void  main(void);
void  InitBDs(void);
void  EchoChar(void);



void startup(void)
{
	 asm("     	.global	_start ");
	 asm("_start:	 ");
	 asm("		addis   r1,r0,stackTop@h");
	 asm("		ori     r1,r1,stackTop@l");

  main();
}

/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  main 
*
* DESCRIPTION:
*
*  This is the main function for the SMC1 code.
*
* EXTERNAL EFFECT: 
*                 
* PARAMETERS:  None
*
* RETURNS: None
*
*---------------------------------------------------------------------------*/

void main(void)

{

   /*------------------------*/
   /* Establish IMMR pointer */
   /*------------------------*/
      
   IMMR = (EPPC *)(GetIMMR() & 0xFFFF0000);  /* MPC8xx internal register
                                                map  */

   /*--------------------------------------------------------------------*/
   /* We add 64 bytes to the start of the buffer descriptors because     */
   /* this code was also tested on the monitor version of SDS debugger.  */
   /* The monitor program on our target uses most of the first 64 bytes  */
   /* for buffer descriptors. If you are not using the SDS monitor  with */
   /* Motorola's ADS development board, you can delete 64 below and      */
   /* start at the beginning of this particular block of Dual Port RAM.  */
   /*--------------------------------------------------------------------*/

   /*----------------------------------*/  
   /* Get pointer to BD area on DPRAM */
   /*----------------------------------*/  
      
   RxTxBD = (BDRINGS *)(IMMR->qcp_or_ud.ud.udata_bd + 64);  

   /*-------------------------------------------------------------------*/
   /* Establish the buffer pool in Dual Port RAM. We do this because the*/
   /* pool size is only 2 bytes (1 for Rx and 1 for Tx) and to avoid    */
   /* disabling data cache for the memory region where BufferPool would */
   /* reside. The CPM does not recognize data in buffer pools once it   */
   /* been cached. It's acesses are direct through DMA to external      */
   /* memory.                                                           */
   /*-------------------------------------------------------------------*/

   SMC1Buffers = (LB *)(IMMR->qcp_or_ud.ud.udata_bd + 80);

   /*----------------------------------------*/
   /* Initialize SMC1 and buffer descriptors */
   /*----------------------------------------*/

   SMC1Init();

   while (1)

   {
      /*--------------------------------------------------*/
      /* if there is a receive character echo it back out */
      /*--------------------------------------------------*/

      if (SMC1Poll())   /* Check BD status for Rx characters */

         EchoChar();
   }

} /* END main */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  SMC1Init 
*
* DESCRIPTION:
*
*  Initialize SMC1 as a UART at 9600 Baud 
*  with 24MHZ CPU clock.
*
* EXTERNAL EFFECT: 
*                 
* PARAMETERS:  None
*
* RETURNS: None
*
*---------------------------------------------------------------------------*/

void SMC1Init(void)

{

unsigned long *bcsr1; 
   
	/*-----------------------*/
	/* Allow SMC1 TX, RX out */
	/*-----------------------*/

   IMMR->pip_pbpar |= (0x00C0);     
   IMMR->pip_pbdir &= 0xFF7F; //pbpar設(shè)置端口線的傳輸模式:0,通用I/O;1,外設(shè)專用;                              //pbdir設(shè)置端口線的傳輸方式:0,輸入;1,輸出。

   /*------------------------------------------------*/
   /* Set Baud Rate to 9600 for 24MHz System Clock.  */
   /* Enable BRG Count.									     */
   /*------------------------------------------------*/

   IMMR->brgc1 = (0x0013E | 0x10000);//看不懂什么意思 

   IMMR->si_simode &= ~(0x0000F000);    /* SMC1:  NMSI mode */
   IMMR->si_simode |= 0x00000000;       /* SMC1:  Tx/Rx Clocks are BRG1 */


   /*----------------------------------------*/
	/* Set RXBD table start at Dual Port +800 */
	/*----------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.rbase = 	//PAGE4 is used by scc4,smc2. PAGE3 is used by scc3,smc1.
    
   (UHWORD)&RxTxBD->RxBD;

   /*----------------------------------------*/
	/* Set TXBD table start at Dual Port +808 */
	/*----------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.tbase =
    
   (UHWORD)&RxTxBD->TxBD;	    	

   /*---------------------------------------*/
   /* Initialize Rx and Tx Params for SMC1: */
   /* Spin until cpcr flag is cleared		  */
   /*---------------------------------------*/

   for(IMMR->cp_cr = 0x0091; IMMR->cp_cr & 0x0001;) ;//cp_cr中的CH_HUM = 1101 指令在SMC1/DSP2/PIP 中運(yùn)行
                                                     // CH_HUM = 1001 指令在SMC1/DSP1 中運(yùn)行

   
	/*--------------------------------------*/
   /* Set RFCR,TFCR -- Rx,Tx Function Code */
   /* Normal Operation and Motorola byte   */
   /* ordering                             */
	/*--------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.rfcr = 0x18; //big-endian 數(shù)據(jù) 
                                                               

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.tfcr = 0x18;  

   /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   /* Protocol Specific Parameters */
   /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

   /*---------------------------*/
   /* MRBLR = MAX buffer length */
   /*---------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.mrblr = 1;    

   /*------------------------------------*/
   /* MAX_IDL = Disable MAX Idle Feature */
   /*------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.max_idl = 0;  

   /*-------------------------------------*/
   /* BRKEC = No break condition occurred */
   /*-------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.brkec = 0;    

   /*---------------------------------------*/
   /* BRKCR = 1 break char sent on top XMIT */
   /*---------------------------------------*/

   IMMR->PRAM[PAGE3].pg.other.smc_dsp1.psmc1.u1.brkcr = 1;    


   /*--------------------*/
   /* Initialize the BDs */
   /*--------------------*/

   InitBDs();

   IMMR->smc_regs[SMC1_REG].smc_smce = 0xFF;  /* Clear any pending events */

   /*--------------------------------------------------*/
   /* SMC_SMCM = Mask all interrupts, use polling mode */
   /*--------------------------------------------------*/

   IMMR->smc_regs[SMC1_REG].smc_smcm = 0;     

   IMMR->cpmi_cicr = 0;           /* Disable all CPM interrups */
   IMMR->cpmi_cipr = 0xFFFFFFFF;  /* Clear all pending interrupt events */
   IMMR->cpmi_cimr = 0;           /* Mask all event interrupts */

   /*-----------------------------------------------*/
   /* Enable RS232 interface on ADS board via BCSR1 */
   /* Get the base address of BCSR                  */ 
   /*-----------------------------------------------*/

   bcsr1 = (UWORD *) ((IMMR->memc_br1 & 0xFFFFFFFE) + 4); //看不懂   
   *bcsr1 &= 0xFFFB0000;  /* Assert the RS232EN* bit */

   /*------------------------------------*/
   /* 8-bit mode,  no parity, 1 stop-bit */
   /* UART SMC Mode							  */
   /* Normal operation (no loopback),	  */
   /* SMC Transmitter/Receiver Enabled	  */
   /*------------------------------------*/

   IMMR->smc_regs[SMC1_REG].smc_smcmr = 0x4823;//SMC模式寄存器,包括字符長度、協(xié)議、診斷模式、發(fā)送和接收使能 

} /* END SMC1Init */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  InitBDs
*
* DESCRIPTION: This function initializes the Tx and Rx Buffer Descriptors.
*
* EXTERNAL EFFECT: RxTxBD
*                 
* PARAMETERS:  None
*
* RETURNS: None
*
*---------------------------------------------------------------------------*/

void InitBDs(void)

{
   /*-----------------------------------*/
   /* Setup Receiver Buffer Descriptors */
   /*-----------------------------------*/
   
   RxTxBD->RxBD.bd_cstatus = 0xA000;  //和mpc850 的RxBD不一樣 E=1 ,W=1        /* Enable, Last BD */
   RxTxBD->RxBD.bd_length = 1;
   RxTxBD->RxBD.bd_addr = &(SMC1Buffers->RxBuffer);


   /*--------------------------------------*/
   /* Setup Transmitter Buffer Descriptors */
   /*--------------------------------------*/

   RxTxBD->TxBD.bd_cstatus = 0x2000;//和mpc850 的TxBD不一樣 W=1    /* Buffer not yet ready; Last BD */
   RxTxBD->TxBD.bd_length = 1;
   RxTxBD->TxBD.bd_addr = &(SMC1Buffers->TxBuffer);


} /* END InitBDs */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  EchoChar
*
* DESCRIPTION: This function facilitates the echoing of a received character.
*
* EXTERNAL EFFECT: RxTxBD
*                 
* PARAMETERS:  None
*
* RETURNS: None
*
*---------------------------------------------------------------------------*/

void  EchoChar(void)

{

    UBYTE mych;

   mych = SMC1GetChar();
   SMC1PutChar(mych); 

} /* end EchoChar */


/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  SMC1PutChar
*
* DESCRIPTION: Output a character to SMC1
*
* EXTERNAL EFFECT: RxTxBD
*                 
* PARAMETERS:  ch - input character
*
* RETURNS: None
*
*---------------------------------------------------------------------------*/

void SMC1PutChar(UBYTE ch)

{
   /*-----------------------------------*/
	/* Loop until transmission completed */
	/*-----------------------------------*/
   
   while (RxTxBD->TxBD.bd_cstatus  &  0x8000);    
   
   /*------------*/ 
	/* Store data */
	/*------------*/

   *(RxTxBD->TxBD.bd_addr) = ch;                  
   RxTxBD->TxBD.bd_length = 1;

   /*---------------*/
   /* Set Ready bit */
 	/*---------------*/

   RxTxBD->TxBD.bd_cstatus |= 0x8000;              


} /* END SMC1PutChar */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  SMC1GetChar
*
* DESCRIPTION: Get a character from SMC1
*
* EXTERNAL EFFECT: RxTxBD
*                 
* PARAMETERS:  NONE
*
* RETURNS: A character from SMC1
*
*---------------------------------------------------------------------------*/

UBYTE SMC1GetChar(void)

{

UBYTE ch;   /* output character from SMC1 */
   
	/*--------------------*/
	/* Loop if RxBD empty */
	/*--------------------*/

   while (RxTxBD->RxBD.bd_cstatus  &  0x8000);      

	/*--------------*/
   /* Receive data */
	/*--------------*/

   ch = *(RxTxBD->RxBD.bd_addr);   
                   
	/*----------------------*/
   /* Set Buffer Empty bit */
	/*----------------------*/

   RxTxBD->RxBD.bd_cstatus |= 0x8000;   

   return ch;

} /* END SMC1GetChar */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  SMC1Poll
*
* DESCRIPTION: Poll SMC1 RxBD and check to see if a character was received
*
* EXTERNAL EFFECT: NONE
*                 
* PARAMETERS:  NONE
*
* RETURNS: A one if there is a character available in the receive buffer,
*          else zero.
*
*---------------------------------------------------------------------------*/

UBYTE SMC1Poll(void)

{
      
   if(RxTxBD->RxBD.bd_cstatus & 0x8000) 
   
   {
       return 0;  /*  character NOT available */
   } 
   
   else
   
   {
       return 1;  /*  character IS available */
   }

} /* END SMC1Poll */



/*-----------------------------------------------------------------------------
*
* FUNCTION NAME:  GetIMMR
*
* DESCRIPTION: Returns current value in the IMMR register.
*
* EXTERNAL EFFECT: NONE
*                 
* PARAMETERS:  NONE
*
* RETURNS: The IMMR value in r3. The compiler uses r3 as the register 
*          containing the return value.
*
*---------------------------------------------------------------------------*/

GetIMMR()

{
    asm(" mfspr  r3,638 ");        /* IMMR is spr #638 */
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲专一区二区三区| 久久久国产精品麻豆| 亚洲综合偷拍欧美一区色| 99精品桃花视频在线观看| 中文在线一区二区| av激情综合网| 亚洲人成网站精品片在线观看| 91影院在线观看| 成人免费一区二区三区视频| 91麻豆国产福利在线观看| 一级精品视频在线观看宜春院| 色94色欧美sute亚洲线路一ni| 一区二区激情视频| 7777精品伊人久久久大香线蕉 | 久国产精品韩国三级视频| 欧美xingq一区二区| 国产精品一区二区三区99| 国产精品蜜臀在线观看| 在线观看视频欧美| 日本aⅴ亚洲精品中文乱码| 精品福利一二区| 成人白浆超碰人人人人| 亚洲图片欧美视频| 精品欧美黑人一区二区三区| www.综合网.com| 亚洲图片欧美色图| 久久久久久久综合日本| 91麻豆成人久久精品二区三区| 亚洲gay无套男同| 久久久久久久久久久黄色| 91在线高清观看| 免费在线观看一区二区三区| 国产精品婷婷午夜在线观看| 欧美三区在线观看| 国产综合色在线视频区| 一区二区三区在线视频免费| 91精品国产综合久久香蕉的特点| 国产精品一区二区不卡| 亚洲一区二区在线观看视频| 欧美成人vr18sexvr| 色拍拍在线精品视频8848| 美美哒免费高清在线观看视频一区二区| 国产人成亚洲第一网站在线播放 | 韩国av一区二区三区| 一区二区在线观看免费视频播放| 91精品国产91久久久久久最新毛片 | 国产一区二区在线观看视频| 一区二区三区免费观看| 久久嫩草精品久久久久| 欧美视频一二三区| 99久久伊人精品| 国产呦精品一区二区三区网站| 亚洲福利一二三区| 国产精品久久久久久户外露出 | 亚洲一级在线观看| 日本一区二区三区免费乱视频| 欧美肥妇bbw| 91网站在线观看视频| 国产精品综合一区二区| 丝袜a∨在线一区二区三区不卡| 国产精品美女久久久久aⅴ | 91九色02白丝porn| 国产成人鲁色资源国产91色综| 日韩在线卡一卡二| 午夜影院久久久| 亚洲人成人一区二区在线观看 | 国产一区二区三区| 日韩av中文在线观看| 亚洲一区二区三区在线| 亚洲欧洲日韩综合一区二区| 国产欧美综合在线观看第十页| 日韩欧美一区在线| 制服丝袜成人动漫| 欧美日韩不卡一区二区| 色综合久久88色综合天天6| 成人小视频在线观看| 一本色道**综合亚洲精品蜜桃冫| 国产精品一卡二| 国内精品久久久久影院色| 免费成人你懂的| 蜜臀va亚洲va欧美va天堂 | 国产精品久久三| 国产欧美日韩在线| 久久精品视频在线免费观看| 久久人人97超碰com| 欧美一级二级在线观看| 日韩美女视频在线| 日韩一区二区麻豆国产| 日韩精品中文字幕一区| 日韩欧美黄色影院| 久久综合狠狠综合久久综合88| 欧美xxx久久| 久久久不卡网国产精品一区| 久久精品无码一区二区三区| 国产精品丝袜黑色高跟| 亚洲视频一区在线| 亚洲午夜视频在线观看| 婷婷久久综合九色综合绿巨人| 日本不卡视频在线观看| 国产一区二区三区四区五区入口 | www.在线欧美| 在线欧美一区二区| 在线不卡a资源高清| 欧美精品一区二区三区一线天视频| 久久嫩草精品久久久久| 亚洲欧洲制服丝袜| 亚洲成人自拍一区| 黄色成人免费在线| 成人a区在线观看| 欧美三级视频在线观看| 精品久久国产老人久久综合| 中文字幕av资源一区| 亚洲亚洲精品在线观看| 裸体健美xxxx欧美裸体表演| 高清日韩电视剧大全免费| 色综合天天做天天爱| 欧美一区二区观看视频| 中文字幕国产一区| 亚洲v中文字幕| 激情欧美一区二区三区在线观看| av亚洲精华国产精华| 69av一区二区三区| 中文字幕免费不卡| 日韩中文字幕区一区有砖一区 | 国产盗摄一区二区| 色综合久久99| 久久影音资源网| 亚洲精品大片www| 激情综合色综合久久| 91福利社在线观看| 国产亚洲午夜高清国产拍精品| 亚洲综合无码一区二区| 国产69精品久久777的优势| 欧美日韩国产成人在线91| 国产色综合久久| 五月婷婷综合在线| 成人精品免费视频| 欧美大尺度电影在线| 亚洲精品菠萝久久久久久久| 国模一区二区三区白浆| 欧美日韩aaaaa| 日韩美女精品在线| 韩国三级在线一区| 欧美精品粉嫩高潮一区二区| 亚洲丝袜美腿综合| 国产成人免费9x9x人网站视频| 欧美一区二区网站| 亚洲午夜三级在线| 91麻豆福利精品推荐| 国产精品拍天天在线| 久久成人免费网站| 91精品国产综合久久精品app| 亚洲欧洲无码一区二区三区| 国产福利91精品一区二区三区| 91精品国产品国语在线不卡| 亚洲综合色网站| 91在线云播放| 中文字幕欧美三区| 国产激情视频一区二区在线观看| 欧美一区二区三区免费大片| 亚洲高清不卡在线| 欧美在线你懂的| 亚洲免费观看高清在线观看| 成人av资源下载| 国产午夜亚洲精品午夜鲁丝片| 麻豆视频观看网址久久| 欧美一区二区视频在线观看| 天天av天天翘天天综合网| 欧美吞精做爰啪啪高潮| 一区二区三区四区高清精品免费观看 | 不卡视频一二三| 国产无遮挡一区二区三区毛片日本| 蜜臀久久久久久久| 日韩视频在线观看一区二区| 婷婷开心激情综合| 日韩一区二区在线观看视频| 日韩国产一区二| 欧美一区二区免费| 黄网站免费久久| 国产色91在线| av一区二区三区在线| 国产精品入口麻豆原神| 99久久精品国产一区| 亚洲欧美日韩国产综合在线 | 国内精品视频一区二区三区八戒| 日韩一区二区在线看| 精品午夜一区二区三区在线观看| 亚洲精品一区二区三区蜜桃下载 | 久久精品久久99精品久久| 日韩一区二区三区免费观看| 麻豆视频观看网址久久| 久久久久久久久蜜桃| www.综合网.com| 亚洲国产成人高清精品| 日韩欧美一级二级| 处破女av一区二区| 亚洲综合图片区| 精品国产精品一区二区夜夜嗨| 国产成人在线影院| 一区二区三区不卡视频在线观看|