日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

解析串口驅(qū)動(dòng)(Serial Drivers)編寫實(shí)例

出處:互聯(lián)網(wǎng)    發(fā)布于:2011-09-05 08:16:40

 
  在當(dāng)前數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)高速發(fā)展的后PC(Post-PC)時(shí)代,嵌入式系統(tǒng)已經(jīng)廣泛地滲透到科學(xué)研究、工程設(shè)計(jì)、軍事技術(shù)、各類產(chǎn)業(yè)和商業(yè)文化藝術(shù)以及人們的日常生活等方方面面中。所謂嵌入式系統(tǒng),是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序等四個(gè)部分組成,用于實(shí)現(xiàn)對其他設(shè)備的控制、監(jiān)視或管理等功能。Windows CE.net是微軟公司推出的32位嵌入式操作系統(tǒng),具備多任務(wù)、實(shí)時(shí)性、模塊化及可伸縮性、強(qiáng)大的通信能力以及圖形界面友好等優(yōu)點(diǎn)。將操作系統(tǒng)和相應(yīng)硬件設(shè)備連接起來,需要通過編寫設(shè)備驅(qū)動(dòng)程序。下面介紹一個(gè)串口驅(qū)動(dòng)編寫實(shí)例。
 
  [代碼步驟:Code Steps]
  .初始化
  .定義支持的串口通道數(shù)
  .初始化驅(qū)動(dòng)的設(shè)備描述
  .寫你的設(shè)備初始化代碼
  .寫入口程序(entry point routines)
  .寫ISRs(中斷服務(wù)程序)來管理設(shè)備
  .使用模板 wind/target/src/drv/ssio/templateSio.c
  注意:串口驅(qū)動(dòng)在VxWorks系統(tǒng)開始的代碼里初始化
  [設(shè)備描述:The Device Descriptor]
  .XX_DRV結(jié)構(gòu)每個(gè)通道有一個(gè)XX_CHAN
  .每個(gè)XX_CHAN指向SIO_DRV_FUNCS
  .SIO_DRV_FUNCS引誘驅(qū)動(dòng)的入口(entry point)
  .XX_DRV是xxDrv使用的中心數(shù)據(jù)結(jié)構(gòu)
  .xx_CHAN包括:
  .xxDrv需要的通道特定信息
  .指向驅(qū)動(dòng)SIO_DRV_FUNCS結(jié)構(gòu)的指針
  .例:
  /* device and channel structures */
  typedef struct
  {
  /* must be first */
  SIO_CHAN sio; /* standard SIO_CHAN element */
  /* callbacks */
  STATUS (*getTxChar) ();
  STATUS (*putRcvChar) ();
  void * getTxArg;
  void * putRcvArg;
  /* register addresses */
  volatile char * cr; /* channel control register */
  volatile char * dr; /* channel data register */
  volatile char * sr; /* channel status register */
  volatile char * ms; /* channel modem status register */
  volatile char * mc; /* channel modem control register */
  volatile short * br; /* channel baud coNStant register */
  /* misc */
  int mode; /* current mode (interrupt or poll) */
  int baudFreq; /* input clock frequency */
  int options; /* Hardware options */
  } TEMPLATE_CHAN;
  typedef struct
  {
  TEMPLATE_CHAN portA; /* DUSRAT has two channels */
  TEMPLATE_CHAN portB;
  volatile char * masterCr; /* master control register */
  } TEMPLATE_DUSART;
  [SIO_CHAN結(jié)構(gòu)]
  .對一般字符驅(qū)動(dòng),一個(gè)指向DEV_FDR的指針被用來在驅(qū)動(dòng)和I/O system 之間通訊
  .對一個(gè)串口驅(qū)動(dòng),一個(gè)指向SIO_CHAN的指針用來在驅(qū)動(dòng)和高層協(xié)議之間通訊
  在 wind/target/h/sioLib.h;里,SIO_CHAN如下定義:
  typedef struct sio_chan/* a serial channel */
  {
  SIO_DRV_FUNCS * pDrvFuncs;
  /* device data */
  } SIO_CHAN;
  .由于高層協(xié)議不知道驅(qū)動(dòng)的XX_CHAN結(jié)構(gòu),SIO_CHAN被用來允許一個(gè)精心定義的數(shù)據(jù)類型在協(xié)議間交換數(shù)據(jù)
  .ttyDrv通過SIO_DRV_FUNCS里的入口向xxDrv發(fā)送信息,而xxDrv通過回調(diào)向ttyDrv發(fā)送信息
  [入口:Entry Points]
  xxCallBackInstall() 安裝到高層協(xié)議的入口(I/O system,target agent(目標(biāo)代理),等等)
  xxPollOutPut() 輪巡模式輸出
  xxPollInput() 輪巡模式輸入
  xxIoctl() 支持設(shè)備特定的ioctl命令
  xxTxStaartup() 初始化一個(gè)傳輸循環(huán)(transmit cycle)
  [驅(qū)動(dòng)回調(diào)安裝程序]
  int xxCallbackInstall(pSsioChan,callbackType,callback,callbbackArg)
  pSioChan 指向SIO_CHAN的指針
  callbackType SIO_CALLBACK_GET_TX_CHAR 或 SIO_CALLBACK_PUT_RCV_CHAR
  callback 指向回調(diào)程序的指針
  callbackArg 回調(diào)的參數(shù)
  .初始化SIO_CHAN結(jié)構(gòu)里的特定成員
  .返回OK 或 ENOSYS(當(dāng)callbackType不是上兩種中的一種)
  /********************************************************************************
  templateCallbackInstall - install ISR callbacks to get/put chars
  This driver allows interrupt callbacks for transmitting characters
  and receiving characters. In general, drivers may support other
  types of callbacks too.
  *
  * RETURNS: OK on success, or ENOSYS for an unsupported callback type.*/
  LOCAL int templateCallbackInstall
  (
  SIO_CHAN * pSioChan, /* channel */
  int callbackType, /* type of callback */
  STATUS (*callback)(), /* callback */
  void * callbackArg /* parameter to callback */
  )
  {
  TEMPLATE_CHAN * pChan = (TEMPLATE_CHAN *)pSioChan;
  switch (callbackType)
  {
  case SIO_CALLBACK_GET_TX_CHAR:
  pChan->getTxChar = callback;
  pChan->getTxArg = callbackArg;
  return (OK);
  case SIO_CALLBACK_PUT_RCV_CHAR:
  pChan->putRcvChar = callback;
  pChan->putRcvArg = callbackArg;
  return (OK);
  default:
  return (ENOSYS);
  }
  }
  [驅(qū)動(dòng)初始化]
  .參數(shù)是沒一個(gè)指向XX_DRV的指針
  .初始化XX_CHAN
  .帶你的程序的SIO_DRV_FUNCS
  .傀儡回調(diào)
  .所有設(shè)備特定
  .重啟芯片
  /* local variables */
  LOCAL SIO_DRV_FUNCS templateSioDrvFuncs =
  {
  templateIoctl,
  templateTxStartup,
  templateCallbackInstall,
  templatePollInput,
  templatePollOutput
  };
  void templateDevInit
  (
  TEMPLATE_DUSART * pDusart
  )
  {
  /* initialize each channel"s driver function pointers */
  pDusart->portA.sio.pDrvFuncs = &templateSioDrvFuncs;
  pDusart->portB.sio.pDrvFuncs = &templateSioDrvFuncs;
  /* install dummy driver callbacks */
  pDusart->portA.getTxChar = dummyCallback;
  pDusart->portA.putRcvChar = dummyCallback;
  pDusart->portB.getTxChar = dummyCallback;
  pDusart->portB.putRcvChar = dummyCallback;
  /* reset the chip */
  TEMPLATE_REG_WRITE(pDusart, masterCr,
  TEMPLATE_RESET_CHIP);
  /* setting polled mode is one way to make the device quiet */
  templateIoctl ((SIO_CHAN *)&pDusart->portA, SIO_MODE_SET,
  (void *)SIO_MODE_POLL);
  templateIoctl ((SIO_CHAN *)&pDusart->portB, SIO_MODE_SET,
  (void *)SIO_MODE_POLL);
  }
  /*******************************************************************************
  *
  * dummyCallback - dummy callback routine
  *
  * RETURNS: ERROR.
  */
  LOCAL STATUS dummyCallback (void)
  {
  return (ERROR);
  }

 


  
關(guān)鍵詞:串口驅(qū)動(dòng)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!