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

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

?? i2c.c

?? I2C library for LPC21xx processor
?? C
?? 第 1 頁 / 共 3 頁
字號:
                                  &ctrl,&addr_hi,&addr_lo);
   if(rc != I2C_NO_ERR)
      return rc;

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl); //-- Now WR (RD/WI = 0)
   if(rc != I2C_NO_ERR)
      return rc;
   //--- wr ADDRESS
   i2c_lpc_wr_byte(addr_hi);
   if(addr_lo != -1)
      i2c_lpc_wr_byte(addr_lo);
   //---  Write  data
   while(num--)                 //-- transmit data until length>0
   {
      rc = *buf++; //---
      i2c_lpc_wr_byte(rc);
   }
   //-----------------------
   i2c_lpc_stop();

   rc = i2c_lpc_ask_polling_op(ctrl);    //-- wait until write finished
   i2c_lpc_stop();
   return I2C_NO_ERR;
}

//----------------------------------------------------------------------------
int m24xx_write(
    int eeprom_type,    //-- EEPROM type
    int eeprom_addr,    //-- start eeprom addr ( not included Hardware A2,A1,A0)
    int eeprom_cs_val,  //-- Hardware A2,A1,A0 (valid from 24XX32)
    char * buf,         //-- Data src buf
    int num)            //-- Bytes to write qty
{
   int page_size = 0;
   int rc;
   int b_to_wr;

#if defined(__UCOS_)
   INT8U err;

   OSSemPend(gpSemI2Cop,0,&err);  //-- Wait until I2C released(sem on)
   VICIntEnClear = 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#elif defined(__TNKERNEL_)
   tn_sem_acquire(&gSemI2Cop,TN_WAIT_INFINITE); //-- Wait until I2C released(sem on)
   VICIntEnClear |= 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#endif

   rc = I2C_NO_ERR;
   for(;;)
   {
      rc = m24xx_page_size(eeprom_type,eeprom_addr,&page_size);
      if(rc != I2C_NO_ERR)
         break;
      if(page_size == 0)
      {
         rc = I2C_ERR_24XX_BAD_PAGESIZE;
         break;
      }

      rc = eeprom_addr%page_size;
      if(rc != 0) //-- not fit on page alignment
      {
         b_to_wr = page_size - rc;
         if(num < b_to_wr)
            b_to_wr = num;
         if(b_to_wr > 0)
         {
             rc = i2c_lpc_m24xx_wr(eeprom_type,eeprom_addr,eeprom_cs_val, buf,b_to_wr);
             if(rc != I2C_NO_ERR)
                break;
             num -= b_to_wr;
             eeprom_addr += b_to_wr;
             buf += b_to_wr;
         }
      }
       //--- write remainder(by pages,if possible)
      while(num > 0)
      {
          if(num < page_size)
             b_to_wr = num;
          else
             b_to_wr = page_size;

          rc = i2c_lpc_m24xx_wr(eeprom_type,eeprom_addr,eeprom_cs_val, buf,b_to_wr);
          if(rc != I2C_NO_ERR)
             break;
          num -= b_to_wr;
          eeprom_addr += b_to_wr;
          buf += b_to_wr;
      }

      break;
   }

#if defined(__UCOS_)
   VICIntEnable  |= 0x00004000;       //-- Enable Int 0
   OSSemPost(gpSemI2Cop);             //-- Set sem on(I2C is free)
#elif defined(__TNKERNEL_)
   VICIntEnable  |= 0x00004000;       //-- Enable Int 0
   tn_sem_signal(&gSemI2Cop);         //-- Set sem on(I2C is free)
#endif

   return rc;
}

//----------------------------------------------------------------------------
int m24xx_read(
  int eeprom_type,    //-- EEPROM type
  int eeprom_addr,    //-- start eeprom addr ( not included Hardware A2,A1,A0)
  int eeprom_cs_val,  //-- Hardware A2,A1,A0 (valid from 24XX32)
  char * buf,         //-- Data dst buf
  int num)            //-- Bytes to read qty
{
   int page_size;
   int rc;
   int ctrl;
   int addr_hi;
   int addr_lo;

#if defined(__UCOS_)
   INT8U err;

   OSSemPend(gpSemI2Cop,0,&err);  //-- Wait until I2C released(sem on)
   VICIntEnClear = 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#elif defined(__TNKERNEL_)
   tn_sem_acquire(&gSemI2Cop,TN_WAIT_INFINITE); //-- Wait until I2C released(sem on)
   VICIntEnClear |= 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#endif

   rc = I2C_NO_ERR;
   for(;;)
   {
      if(num <=0)
      {
         rc = I2C_ERR_24XX_WRONG_NUM;
         break;
      }
       //--- Here - just for addr checking
      page_size = 0;
      rc = m24xx_page_size(eeprom_type,eeprom_addr,&page_size);
      if(rc != I2C_NO_ERR)
         break;
      if(page_size == 0)
      {
         rc = I2C_ERR_24XX_BAD_PAGESIZE;
         break;
      }
      rc = m24xx_set_addr(eeprom_type,eeprom_addr,eeprom_cs_val,
                                           &ctrl,&addr_hi,&addr_lo);
      if(rc != I2C_NO_ERR)
         break;

       //--- wr START + CONTROL
      rc = i2c_lpc_ctrl(ctrl & 0xFE); //-- Now WR (RD/WI = 0)
      if(rc != I2C_NO_ERR)
         break;
       //--- wr ADDRESS
      i2c_lpc_wr_byte(addr_hi);
      if(addr_lo != -1)
         i2c_lpc_wr_byte(addr_lo);

       //--- wr START + CONTROL again - for read start
      rc = i2c_lpc_ctrl(ctrl | 0x01); //-- Now RD (RD/WI = 1)
      if(rc != I2C_NO_ERR)
         break;

      rc = i2c_lpc_rx_to_buf(buf,num);
      if(rc != I2C_NO_ERR)
         break;

      i2c_lpc_stop();     //---- Set STOP ---

      break;
   }

#if defined(__UCOS_)
   VICIntEnable  |= 0x00004000;       //-- Enable Int 0
   OSSemPost(gpSemI2Cop);             //-- Set sem on(I2C is free)
#elif defined(__TNKERNEL_)
   VICIntEnable  |= 0x00004000;       //-- Enable Int 0
   tn_sem_signal(&gSemI2Cop);         //-- Set sem on(I2C is free)
#endif

   return rc;
}

//===========================================================================
//================ Temperature sensor LM75 ==================================
//===========================================================================

//----------------------------------------------------------------------------
static int lm75_set_addr(int cs_val,      //-- Value of A0,A1,A2 for IC instance
                         int mode,        //-- 8 - 8bit reg, 16 - 16 bit reg
                         int reg,         //-- register that  access
                         int * ctrl_val,  //-- return - ctrl
                         int * point_val) //-- return - pointer reg val
{
   int ctrl;
   int point;

   ctrl  = (cs_val<<1) & 0x0E;
   ctrl |= 0x90; //-- 1001xxxx
   point = 0;
   if(mode == 16)
   {
      if(reg == LM75_REG_TEMP)
         point = 0;
      else if(reg == LM75_REG_THYST)
         point = 2;
      else if(reg == LM75_REG_TSET)
         point = 3;
      else
         return I2C_ERR_LM75_WRONG_REGISTER;
   }
   else if(mode == 8)
   {
      if(reg == LM75_REG_CONFIG)
         point = 1;
      else
         return I2C_ERR_LM75_WRONG_REGISTER;
   }
   else
      return I2C_ERR_WRONG_PARAM;

   if(ctrl_val)
      *ctrl_val  = ctrl;
   if(point_val)
      *point_val = point;

   return I2C_NO_ERR;
}
//----------------------------------------------------------------------------
int lm75_read16(int cs_val,
                int reg,
                int * ret_val)
{
   int point;
   int ctrl;
   int rc,rd_val;
   unsigned char buf[4];

   rc = lm75_set_addr(cs_val,16,reg,&ctrl,&point);
   if(rc != I2C_NO_ERR)
      return rc;

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl & 0xFE); //-- Now WR (RD/WI = 0)
   if(rc != I2C_NO_ERR)
      return rc;
   //--- wr point
   i2c_lpc_wr_byte(point);

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl | 0x01); //-- Now RD (RD/WI = 1)
   if(rc != I2C_NO_ERR)
      return rc;

   rc = i2c_lpc_rx_to_buf(&buf[0],2);
   if(rc != I2C_NO_ERR)
      return rc;

   i2c_lpc_stop();

   rd_val = (buf[0]<<1)& 0x01FE; //-- msb
   if(buf[1] & 0x80)             //-- lsb
      rd_val |= 0x01;

   *ret_val = rd_val;

   return I2C_NO_ERR;
}

//----------------------------------------------------------------------------
int lm75_read_cfg(int cs_val,int * ret_val)
{
   int point;
   int ctrl;
   int rc;
   unsigned char buf[4];

   rc = lm75_set_addr(cs_val,8,LM75_REG_CONFIG,&ctrl,&point);
   if(rc != I2C_NO_ERR)
      return rc;

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl & 0xFE); //-- Now WR (RD/WI = 0)
   if(rc != I2C_NO_ERR)
      return rc;
   //--- wr point
   i2c_lpc_wr_byte(point);

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl | 0x01); //-- Now RD (RD/WI = 1)
   if(rc != I2C_NO_ERR)
      return rc;

   rc = i2c_lpc_rx_to_buf(&buf[0],1);
   if(rc != I2C_NO_ERR)
      return rc;

   i2c_lpc_stop();                 //-- Set STOP condition

   *ret_val = buf[0];

   return I2C_NO_ERR;
}
//----------------------------------------------------------------------------
int lm75_write16(int cs_val,
                int reg,
                int wr_val)
{
   int ctrl;
   int point;
   int rc;

   rc = lm75_set_addr(cs_val,16,reg,&ctrl,&point);
   if(rc != I2C_NO_ERR)
      return rc;

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl & 0xFE); //-- Now WR (RD/WI = 0)
   if(rc != I2C_NO_ERR)
      return rc;
   //--- wr point
   i2c_lpc_wr_byte(point);
   //--- wr msb
   i2c_lpc_wr_byte((wr_val>>8)& 0xFF);
   //--- wr lsb
   i2c_lpc_wr_byte(wr_val & 0xFF);

   i2c_lpc_stop();

   return I2C_NO_ERR;
}
//----------------------------------------------------------------------------
int lm75_write_cfg(int cs_val,int wr_val)
{
   int point;
   int ctrl;
   int rc;

   rc = lm75_set_addr(cs_val,8,LM75_REG_CONFIG,&ctrl,&point);
   if(rc != I2C_NO_ERR)
      return rc;

   //--- wr START + CONTROL
   rc = i2c_lpc_ctrl(ctrl & 0xFE); //-- Now WR (RD/WI = 0)
   if(rc != I2C_NO_ERR)
      return rc;
   //--- wr point
   i2c_lpc_wr_byte(point);
   //--- wr data
   i2c_lpc_wr_byte(wr_val & 0xFF);

   i2c_lpc_stop();

   return I2C_NO_ERR;
}

//---------------------------------------------------------------------------
int lm75_init()
{
   int rc;

#if defined(__UCOS_)
   INT8U err;

   OSSemPend(gpSemI2Cop,0,&err);  //-- Wait until I2C released(sem on)
   VICIntEnClear = 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#elif defined(__TNKERNEL_)
   tn_sem_acquire(&gSemI2Cop,TN_WAIT_INFINITE); //-- Wait until I2C released(sem on)
   VICIntEnClear |= 0x00004000;  //-- Disable Int 0 - from I/O extender PCA9555
#endif

   rc = lm75_write_cfg(0,0);

#if defined(__UCOS_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚一区二区| 国产午夜精品久久| 成人aaaa免费全部观看| 国产尤物一区二区在线| 免费成人在线视频观看| 日本不卡123| 国产中文字幕精品| 国产在线一区二区综合免费视频| 美腿丝袜亚洲综合| 久久精品国产精品亚洲综合| 精品一区二区成人精品| 国内欧美视频一区二区| 国产91对白在线观看九色| 国产不卡视频在线播放| 91热门视频在线观看| 色综合久久66| 这里只有精品免费| 精品嫩草影院久久| 国产欧美一区二区精品仙草咪| 欧美国产日韩一二三区| 亚洲品质自拍视频| 亚洲不卡av一区二区三区| 免费观看91视频大全| 九色综合狠狠综合久久| 国产v综合v亚洲欧| 欧美在线不卡视频| 日韩免费在线观看| 国产精品视频观看| 青青草一区二区三区| 国产精品77777竹菊影视小说| 91麻豆高清视频| 日韩三级精品电影久久久| 国产精品视频一二三区 | 欧美日本一区二区| 日韩欧美www| 专区另类欧美日韩| 蜜乳av一区二区| 一本到三区不卡视频| 精品日韩在线观看| 亚洲综合在线五月| 国产激情视频一区二区三区欧美| 91黄色在线观看| 国产网站一区二区| 日韩影院在线观看| 97精品久久久久中文字幕| 日韩精品中文字幕一区二区三区| 国产精品福利电影一区二区三区四区 | 欧美视频在线观看一区| 欧美精品一区二区三区一线天视频 | 成人av电影在线播放| 欧美一区二区免费观在线| 亚洲日本护士毛茸茸| 国产成人av资源| 久久亚洲欧美国产精品乐播| 亚洲午夜久久久久中文字幕久| 不卡一区中文字幕| 欧美国产激情一区二区三区蜜月| 蜜桃久久av一区| 欧美精品18+| 亚洲成人资源在线| 91黄色在线观看| 亚洲欧美日韩久久| 成年人网站91| 国产精品久久久久久久久久免费看| 六月婷婷色综合| 欧美成人一级视频| 精品亚洲国产成人av制服丝袜| 欧美精品乱码久久久久久| 亚洲成a人片在线不卡一二三区 | 9191成人精品久久| 亚洲一区二区在线视频| 色成人在线视频| 一二三四区精品视频| 日本精品一级二级| 亚洲在线观看免费| 欧美日韩一区中文字幕| 亚洲成人tv网| 欧美一卡2卡三卡4卡5免费| 日韩av电影免费观看高清完整版| 7777精品伊人久久久大香线蕉经典版下载| 一区二区三区在线观看动漫| 欧美三级日韩三级国产三级| 午夜精品成人在线视频| 在线成人高清不卡| 久色婷婷小香蕉久久| 久久久午夜电影| 成年人午夜久久久| 亚洲午夜一区二区三区| 51精品久久久久久久蜜臀| 免费xxxx性欧美18vr| 久久久久久久网| 成人av网站免费| 亚洲成人免费视| 精品久久久久久最新网址| 国产91精品久久久久久久网曝门| 1024成人网| 欧美日韩精品免费观看视频| 成人黄色小视频| 亚洲欧美国产毛片在线| 在线成人高清不卡| 国产一区二区三区在线观看免费视频| 亚洲国产精品传媒在线观看| 色婷婷综合五月| 久久综合综合久久综合| 亚洲日本在线看| 日韩三级中文字幕| 99精品一区二区| 麻豆久久久久久| 一区二区三区在线高清| 2023国产精华国产精品| 色婷婷亚洲一区二区三区| 麻豆国产欧美日韩综合精品二区 | 成人福利视频网站| 亚洲午夜羞羞片| 国产欧美一区二区精品忘忧草 | 91精品国产91综合久久蜜臀| 韩国精品久久久| 亚洲二区在线视频| 国产精品天干天干在观线| 欧美日本一区二区| 91污在线观看| 国产精品一区二区免费不卡 | 不卡视频免费播放| 日韩二区三区四区| 综合激情成人伊人| 欧美精品一区二区三区一线天视频 | 国产精品护士白丝一区av| 555www色欧美视频| 在线视频你懂得一区二区三区| 狠狠色2019综合网| 日本欧美韩国一区三区| 亚洲综合一区二区| 国产精品三级视频| 中文文精品字幕一区二区| 欧美zozo另类异族| 欧美一区二区视频网站| 欧美视频一区二区在线观看| 91麻豆国产自产在线观看| 成人蜜臀av电影| 国产成人在线视频网址| 国产一区在线观看麻豆| 久久精品久久综合| 精品亚洲成av人在线观看| 免费人成网站在线观看欧美高清| 亚洲成a天堂v人片| 99在线热播精品免费| 成人免费高清视频| av在线不卡免费看| 国产99久久久国产精品潘金| 国产精品亚洲第一| 国产成人午夜视频| 丁香婷婷综合网| 豆国产96在线|亚洲| 国产91在线看| 成人av资源下载| 91在线视频免费观看| 色综合网色综合| 色综合久久六月婷婷中文字幕| 一道本成人在线| 欧美精品粉嫩高潮一区二区| 在线不卡a资源高清| 日韩欧美久久一区| 久久久久国色av免费看影院| 国产婷婷色一区二区三区四区| 久久婷婷国产综合精品青草| 久久久久久电影| 亚洲日本乱码在线观看| 亚洲成人动漫精品| 久久精品国产在热久久| 国产成人免费9x9x人网站视频| 成人精品一区二区三区四区 | 久久免费视频色| 国产精品美女www爽爽爽| 亚洲男人天堂av| 丝袜美腿亚洲一区| 国产麻豆9l精品三级站| 成人18精品视频| 3atv在线一区二区三区| 国产亚洲欧美日韩在线一区| 亚洲视频一区在线观看| 亚洲国产精品欧美一二99| 麻豆精品国产传媒mv男同| 99久久er热在这里只有精品15| 欧美影院一区二区| 国产亚洲精品超碰| 亚洲精品国产成人久久av盗摄| 日韩电影在线观看一区| 国产成人精品免费网站| 欧美日韩国产综合草草| 欧美电视剧免费全集观看| 中文字幕在线观看不卡| 日韩专区欧美专区| caoporn国产一区二区| 678五月天丁香亚洲综合网| 亚洲国产高清在线观看视频| 亚洲mv大片欧洲mv大片精品| 成人精品视频.| 日韩欧美高清dvd碟片| 亚洲在线中文字幕| 岛国精品在线播放|