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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sm1.c

?? MC9S08DZ60的一個SPI實例!比較適合初學者閱讀!
?? C
?? 第 1 頁 / 共 2 頁
字號:
**         ---             - Error code, possible codes:
**                           ERR_OK - OK
**                           ERR_SPEED - This device does not work in
**                           the active speed mode
**                           ERR_DISABLED - Device is disabled (only
**                           if output DMA is supported and enabled)
**                           ERR_TXFULL - Transmitter is full
** ===================================================================
*/
byte SM1_SendChar(SM1_TComData Chr)
{
  if (SerFlag & FULL_TX) {             /* Is any char in the TX buffer? */
    return ERR_TXFULL;                 /* If yes then error */
  }
  EnterCritical();                     /* Save the PS register */
  BufferWrite = Chr;                   /* Store char to the temporary variable */
  if(EnUser) {                         /* Is the device enabled by user? */
    SPID = Chr;                        /* Store char to transmitter register */
  }
  SerFlag |= FULL_TX;                  /* Set the flag "full TX buffer" */
  ExitCritical();                      /* Restore the PS register */
  return ERR_OK;                       /* OK */
}

/*
** ===================================================================
**     Method      :  SM1_CharsInRxBuf (bean SynchroMaster)
**
**     Description :
**         Returns the number of characters in the input buffer.
**         Note: If the Interrupt service is disabled, and the
**         Ignore empty character is set to yes, and a character has
**         been received, then this method returns 1 although it was
**         an empty character.
**         (deprecated method)
**     Parameters  :
**         NAME            - DESCRIPTION
**       * Chr             - A pointer to number of characters in
**                           the input buffer
**     Returns     :
**         ---             - Error code, possible codes:
**                           ERR_OK - OK
**                           ERR_SPEED - This device does not work in
**                           the active speed mode
** ===================================================================
*/
byte SM1_CharsInRxBuf(word *Chr)
{
  *Chr = (word)((SerFlag >> 3) & 1);   /* Return number of chars in receive buffer */
  return ERR_OK;                       /* OK */
}

/*
** ===================================================================
**     Method      :  SM1_GetCharsInRxBuf (bean SynchroMaster)
**
**     Description :
**         Returns the number of characters in the input buffer.
**         Note: If the Interrupt service is disabled, and the
**         Ignore empty character is set to yes, and a character has
**         been received, then this method returns 1 although it was
**         an empty character.
**     Parameters  : None
**     Returns     :
**         ---             - Number of characters in the input
**                           buffer.
** ===================================================================
*/
word SM1_GetCharsInRxBuf(void)
{
  return (word)((SerFlag >> 3) & 1);   /* Return number of chars in receive buffer */
}
/*
** ===================================================================
**     Method      :  SM1_CharsInTxBuf (bean SynchroMaster)
**
**     Description :
**         Returns the number of characters in the output buffer.
**         (deprecated method)
**     Parameters  :
**         NAME            - DESCRIPTION
**       * Chr             - A pointer to the number of characters
**                           in the output buffer
**     Returns     :
**         ---             - Error code, possible codes:
**                           ERR_OK - OK
**                           ERR_SPEED - This device does not work in
**                           the active speed mode
** ===================================================================
*/
byte SM1_CharsInTxBuf(word *Chr)
{
  *Chr = (word)((SerFlag >> 4) & 1);   /* Return number of chars in the transmit buffer */
  return ERR_OK;                       /* OK */
}

/*
** ===================================================================
**     Method      :  SM1_GetCharsInTxBuf (bean SynchroMaster)
**
**     Description :
**         Returns the number of characters in the output buffer.
**     Parameters  : None
**     Returns     :
**         ---             - Number of characters in the output
**                           buffer.
** ===================================================================
*/
word SM1_GetCharsInTxBuf(void)
{
  return (word)((SerFlag >> 4) & 1);   /* Return number of chars in the transmit buffer */
}
/*
** ===================================================================
**     Method      :  SM1_GetError (bean SynchroMaster)
**
**     Description :
**         Returns a set of errors on the channel (errors that
**         cannot be returned in given methods). The errors
**         accumulate in a set; after calling [GetError] this set is
**         returned and cleared.
**     Parameters  :
**         NAME            - DESCRIPTION
**       * Err             - A pointer to the returned set of errors
**     Returns     :
**         ---             - Error code (if GetError did not succeed),
**                           possible codes:
**                           ERR_OK - OK
**                           ERR_SPEED - This device does not work in
**                           the active speed mode
** ===================================================================
*/
byte SM1_GetError(SM1_TError *Err)
{
  EnterCritical();                     /* Save the PS register */
  Err->err = 0;
  Err->errName.OverRun = ((ErrFlag & OVERRUN_ERR) != 0); /* Overrun error */
  ErrFlag = 0x00;                      /* Reset error flags */
  ExitCritical();                      /* Restore the PS register */
  return ERR_OK;                       /* OK */
}

/*
** ===================================================================
**     Method      :  SM1_Interrupt (bean SynchroMaster)
**
**     Description :
**         The method services the error interrupt of the selected 
**         peripheral(s) and eventually invokes the bean's event(s).
**         This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
#define ON_ERROR    0x01
#define ON_FULL_RX  0x02
#define ON_RX_CHAR  0x04
#define ON_FREE_TX  0x08
#define ON_TX_CHAR  0x10
ISR(SM1_Interrupt)
{
  SM1_TComData Data;                   /* Temporary variable for data */
  byte Flags = 0;                      /* Temporary variable for flags */
  byte Status;                         /* Temporary variable for flags */

  Status = SPIS;                       /* Read the device error register */
  Data = SPID;                         /* Read data from receiver */
  if (SerFlag & CHAR_IN_RX) {          /* Is the overrun error flag set? */
    SerFlag |= OVERRUN_ERR;            /* If yes then set the OnError flag */
    Flags |= ON_ERROR;                 /* If yes then set the OnError flag */
  }
  SerFlag |= CHAR_IN_RX;               /* Set flag "char in RX buffer" */
  BufferRead = Data;                   /* Read data from receiver */
  ErrFlag |= SerFlag;                  /* Update error flag mirror */
  SerFlag &= ~FULL_TX;                 /* Reset flag "full TX buffer" */
  if(Flags & ON_ERROR) {               /* Is the error flag set? */
    SM1_OnError();                     /* If yes then invoke user event */
  }
  else {
    SM1_OnRxChar();                    /* If yes then invoke user event */
    SM1_OnRxCharExt(Data);             /* If yes then invoke user event */
  }
  SM1_OnTxChar();                      /* If yes then invoke user event */
}

/*
** ===================================================================
**     Method      :  SM1_Init (bean SynchroMaster)
**
**     Description :
**         Initializes the associated peripheral(s) and the bean internal 
**         variables. The method is called automatically as a part of the 
**         application initialization code.
**         This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void SM1_Init(void)
{
  SerFlag = 0;                         /* Reset all flags */
  ErrFlag = 0;                         /* Reset all flags in mirror */
  EnUser = TRUE;                       /* Enable device */
  #pragma MESSAGE DISABLE C4002        /* Disable warning C4002 "Result not used" */
  (void)SPIS;                          /* Read the status register */
  (void)SPID;                          /* Read the device register */
  /* SPIBR: ??=0,SPPR2=1,SPPR1=0,SPPR0=0,??=0,SPR2=0,SPR1=1,SPR0=1 */
  setReg8(SPIBR, 0x43);                /* Set the baud rate register */ 
  /* SPIC2: ??=0,??=0,??=0,MODFEN=0,BIDIROE=0,??=0,SPISWAI=0,SPC0=0 */
  setReg8(SPIC2, 0x00);                /* Configure the SPI port - control register 2 */ 
  /* SPIC1: SPIE=0,SPE=0,SPTIE=0,MSTR=1,CPOL=0,CPHA=1,SSOE=0,LSBFE=1 */
  setReg8(SPIC1, 0x15);                /* Configure the SPI port - control register 1 */ 
  HWEnDi();                            /* Enable/disable device according to the status flags */
}


/* END SM1. */

/*
** ###################################################################
**
**     This file was created by UNIS Processor Expert 3.01 [03.92]
**     for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕亚洲一区二区va在线 | 国产欧美日韩亚州综合 | 欧美精品一区二区三区蜜桃 | 亚洲成人在线网站| 亚洲日本乱码在线观看| 中文字幕综合网| 综合久久综合久久| 亚洲一二三区不卡| 亚洲mv在线观看| 日韩电影在线一区| 狠狠色狠狠色综合系列| 丁香激情综合五月| 91啪在线观看| 欧美精品tushy高清| 久久精品日产第一区二区三区高清版 | 91精品国产欧美一区二区| 精品国产乱码久久久久久影片| 国产精品卡一卡二卡三| 偷拍一区二区三区| 国产99久久久精品| 欧美大片拔萝卜| 亚洲日本一区二区| 蜜臀久久久99精品久久久久久| 国产精品18久久久久| 91丨九色丨国产丨porny| 99国产精品视频免费观看| 精品毛片乱码1区2区3区| 国产精品久久看| 国产福利一区二区三区视频在线| 在线视频观看一区| 亚洲三级理论片| 成人免费毛片a| 久久久久久久久99精品| 琪琪久久久久日韩精品| 在线观看一区二区视频| 国产精品欧美经典| 国产精品一区在线观看你懂的| 欧美精品在线观看播放| 亚洲国产精品人人做人人爽| av电影在线观看完整版一区二区| 久久精品男人天堂av| 日产国产高清一区二区三区| 色噜噜狠狠色综合欧洲selulu| 欧美国产日韩精品免费观看| 国产呦精品一区二区三区网站 | 99精品久久只有精品| 亚洲欧洲日韩av| 波多野结衣亚洲| 亚洲免费av观看| 欧美视频在线观看一区二区| 国产喷白浆一区二区三区| 国产剧情一区二区| 91精品国产乱码久久蜜臀| 老司机精品视频在线| 久久久另类综合| caoporen国产精品视频| 国产视频911| aaa亚洲精品| 成人精品国产福利| 国产精品入口麻豆九色| 色综合中文字幕| 丝袜美腿亚洲综合| 国产亚洲一二三区| 在线观看国产日韩| 精品亚洲国产成人av制服丝袜| 久久久国产精品不卡| 97久久精品人人爽人人爽蜜臀 | 韩国欧美国产1区| 久久久99精品久久| 欧美日韩一区国产| 国产成人免费9x9x人网站视频| 亚洲美女屁股眼交| 日韩无一区二区| 91首页免费视频| 激情综合网天天干| 中文字幕一区二| 日韩欧美一二三| 欧美色精品天天在线观看视频| 国产麻豆视频一区| 免费看精品久久片| 久久精品人人爽人人爽| 日韩一区二区三区视频在线观看| 成人国产精品免费观看动漫| 免费三级欧美电影| 亚洲国产一区二区三区| 亚洲欧洲成人av每日更新| 精品国产91乱码一区二区三区| 91成人在线精品| 99久久精品免费| 国产真实乱偷精品视频免| 日韩精品乱码av一区二区| 亚洲一区二区三区视频在线播放 | 亚洲精品一区二区三区福利| 欧美日韩久久一区二区| 欧美中文字幕一区二区三区| jiyouzz国产精品久久| 精品一区二区三区的国产在线播放| 亚洲成在人线免费| 一二三区精品视频| 亚洲成人免费视频| 亚洲成a人v欧美综合天堂| 亚洲精品国产无套在线观| 亚洲人快播电影网| 2021久久国产精品不只是精品| 精品国产91乱码一区二区三区| 欧美午夜精品一区| 欧美日韩国产在线播放网站| 久久99久久99精品免视看婷婷| 成人av在线资源| 国产乱人伦偷精品视频免下载| 人禽交欧美网站| 免费成人av资源网| 久久99最新地址| 国产乱子轮精品视频| 国产91富婆露脸刺激对白| 懂色av一区二区三区免费观看| 成人av高清在线| 色欧美日韩亚洲| 欧美顶级少妇做爰| 精品福利在线导航| 亚洲精品国产成人久久av盗摄| 香蕉乱码成人久久天堂爱免费| 韩国女主播一区| 日本电影欧美片| 国产午夜精品美女毛片视频| 亚洲私人黄色宅男| 久久成人久久鬼色| 91丨porny丨中文| 日韩一区二区在线观看视频播放| 国产亚洲精品超碰| 亚洲午夜电影在线观看| 成人少妇影院yyyy| 日韩欧美激情一区| 久久综合综合久久综合| 日韩二区三区四区| 韩国在线一区二区| 欧美一区二区在线免费播放| 国产精品欧美极品| 精品一区二区精品| 欧美日韩高清一区二区三区| 国产精品沙发午睡系列990531| 久久国产视频网| 欧美日韩一区二区电影| 亚洲欧美另类小说视频| 国产白丝网站精品污在线入口| 欧美一区二区三区四区高清 | 国产精品高清亚洲| 国产一区三区三区| 精品乱人伦小说| 日韩va亚洲va欧美va久久| 欧美三级日韩三级国产三级| 中文字幕一区二区不卡 | 国产精品久久久久aaaa樱花 | 亚洲视频在线一区观看| 国产久卡久卡久卡久卡视频精品| 日韩一区二区三区四区五区六区| 午夜在线成人av| 欧美精品自拍偷拍| 日韩中文字幕1| 日韩美女主播在线视频一区二区三区| 五月激情综合网| 日韩欧美一级在线播放| 免费精品99久久国产综合精品| 欧美一区二区三区视频在线 | 美女脱光内衣内裤视频久久网站| 欧美日韩国产免费一区二区 | 国产清纯白嫩初高生在线观看91 | 欧美精品一区在线观看| 国产福利一区二区三区视频| 国产精品你懂的在线| 91免费视频网| 免费av成人在线| 国产精品私人自拍| 欧美日韩中文字幕精品| 国产精品一区二区黑丝| 最新国产成人在线观看| 欧美日韩国产一区二区三区地区| 国产综合久久久久久鬼色| 亚洲桃色在线一区| 欧美精品一区二区三区蜜臀| 国产在线视视频有精品| 一区二区三区四区乱视频| 91精品国产综合久久小美女| 国产乱人伦精品一区二区在线观看 | 在线免费观看一区| 美女一区二区久久| 亚洲视频免费观看| 日韩一级大片在线| 91麻豆精品一区二区三区| 日本中文字幕不卡| 亚洲综合久久av| 国产精品福利一区| 久久免费电影网| 欧美日本一道本| 在线看日本不卡| 成人午夜看片网址| 精品一区二区三区不卡| 天天影视涩香欲综合网| 亚洲18女电影在线观看| 一区二区三区产品免费精品久久75|