最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

我自己用的I2C驅(qū)動(dòng),我只測(cè)過(guò)24C02,其它沒(méi)測(cè)過(guò)

作者:eleven11 欄目:ARM技術(shù)
我自己用的I2C驅(qū)動(dòng),我只測(cè)過(guò)24C02,其它沒(méi)測(cè)過(guò)
/$----------------------COPYRIGHT (c)--------------------------------
$$
$$                      ARM驅(qū)動(dòng)庫(kù)--
$$                     LPC2104通用驅(qū)動(dòng)配置文件
$$
$$------------------------文件信息----------------------------------
$$文   件   名: DriverConfig.h
$$創(chuàng)   建   人: ARMstudent@sina.com
$$最后修改日期: 2005.5.25
$$描        述: 所有外設(shè)驅(qū)動(dòng)的配置文件
$$----------------------------歷史版本信息---------------------------
$$ 創(chuàng)建人: ARMstudent@sina.com
$$ 版  本: V1.0
$$ 日 期: 2005.4.17
$$ 描 述: 完成I2C驅(qū)動(dòng)配置
$$-------------------------------------------------------------------
$$ 修改人: ARMstudent@sina.com
$$ 版  本: V1.1
$$ 日 期: 2005.4.28
$$ 描 述: 完成SPI驅(qū)動(dòng)配置
$$-------------------------------------------------------------------
$$ 修改人: ARMstudent@sina.com
$$ 版  本: V1.2
$$ 日 期: 2005.5.3
$$ 描 述: 完成UART0驅(qū)動(dòng)配置
$$-------------------------------------------------------------------
$$ 修改人: ARMstudent@sina.com
$$ 版  本: V1.3
$$ 日 期: 2005.5.15
$$ 描 述: 完成IAP驅(qū)動(dòng)配置
$$-------------------------------------------------------------------
$$ 修改人: ARMstudent@sina.com
$$ 版  本: V1.4
$$ 日 期: 2005.5.21
$$ 描 述: 完成RTC驅(qū)動(dòng)配置
$$-------------------------------------------------------------$/
#include "myfun.h"
#include "Queue.h"
#include "QueueTAB.h"

#define I2CDriver_En    0     //為1則使用I2C驅(qū)動(dòng)
#define SPIDriver_En    0     //為1則使用SPI驅(qū)動(dòng)
#define UART0Driver_En  0     //為1則使用UART0驅(qū)動(dòng)
#define IAPDriver_En    0     //為1則使用IAP驅(qū)動(dòng)
#define RTCDriver_En    0     //為1則使用RTC驅(qū)動(dòng)

/$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/
#if I2CDriver_En==1
/$-----------------------I2C驅(qū)動(dòng)使用說(shuō)明---------------------------
$$ 描 述:I2C器件存儲(chǔ)空間按頁(yè)存放,0~255字節(jié)為第0頁(yè),256~511字節(jié)為 $$        第1頁(yè),依次類推,(AT24C01只有0頁(yè),大小為128字節(jié))
$$        調(diào)用I2CRead和I2CWrite指定頁(yè)和子地址可向I2C器件進(jìn)行讀寫操作
$$
$$ 函數(shù)參數(shù)限制如下:
$$
$$ I2C_SLA0/1        AT24C01        SLA<=7         
$$                   AT24C02        SLA<=7
$$                   AT24C04        SLA<=3
$$                   AT24C08        SLA<=1   
$$                   AT24C16        SLA=0
$$                   AT24C32        SLA<=7    
$$                   AT24C64        SLA<=7
$$                   AT24C128       SLA=0
$$                   AT24C256       SLA<=3
$$                                     
$$ I2C_PAGEADD0/1    AT24C01        I2C_PAGEADD=0
$$                   AT24C02        I2C_PAGEADD=0
$$                   AT24C04        I2C_PAGEADD<=1  
$$                   AT24C08        I2C_PAGEADD<=3   
$$                   AT24C16        I2C_PAGEADD<=7
$$                   AT24C32        I2C_PAGEADD<=15    
$$                   AT24C64        I2C_PAGEADD<=31
$$                   AT24C128       I2C_PAGEADD<=63
$$                   AT24C256       I2C_PAGEADD<=127
$$                                    
$$ I2C_NUM0/1 I2C_SLAADD0/1    AT24C01    I2C_SLAADD+I2C_NUM<=128
$$                             AT24C02    I2C_SLAADD+I2C_NUM<=256
$$                             AT24C04    I2C_SLAADD+I2C_NUM<=256
$$                             AT24C08    I2C_SLAADD+I2C_NUM<=256
$$                             AT24C16    I2C_SLAADD+I2C_NUM<=256
$$                             AT24C32    I2C_SLAADD+I2C_NUM<=256
$$    &nb
2樓: >>參與討論
eleven11
錯(cuò)了不要扔我,我只是交流學(xué)習(xí)
/$----------------------------------------COPYRIGHT (c)--------------
$$
$$                                        ARM驅(qū)動(dòng)庫(kù)--
$$                                     LPC2104通用驅(qū)動(dòng)文件
$$
$$------------------------------------------文件信息-----------------
$$文   件   名: I2CDriver.h
$$創(chuàng)   建   人: ARMstudent@sina.com
$$最后修改日期: 2005.4.21
$$描        述: LPC2104/2105/2106-AT24C01/02/04/08/16/32/64/128/256 的I2C接口通用驅(qū)動(dòng)文件
$$              可對(duì)總線上多個(gè)同一型號(hào)的AT24C$$進(jìn)行數(shù)據(jù)傳輸
$$----------------------------------------歷史版本信息---------------
$$ 創(chuàng)建人: ARMstudent@sina.com
$$ 版  本: V1.0
$$ 日 期: 2005.4.17
$$ 描 述: 24C02測(cè)試完成,其它條件不允許T_T
$$-----------------------------------------------------------------$/
volatile uint8  I2C_ADD_STA;     //在16位的地址中指示哪些位已發(fā)送,為1為已經(jīng)處理或初始態(tài),為2表示高8位已發(fā)送
volatile uint8  I2C_SLA;         //器件物理地址SLA
volatile uint16 I2C_NUM;         //一次要讀寫I2C數(shù)據(jù)數(shù)
volatile uint8  *I2C_BUFF;       //指定要寫入I2C的數(shù)組的首地址或指定從I2C讀取后存放數(shù)組的首地址
volatile uint8  I2C_WRTYPE;      //讀寫操作的狀態(tài): 為0表示此次調(diào)用是向I2C寫入數(shù)據(jù);為1表示此次調(diào)用是從I2C器件中讀出數(shù)據(jù)
volatile uint8  I2C_SLAADD;      //I2C器件的子地址
volatile uint8  I2C_PAGADD;      //I2C器件的頁(yè)地址
volatile uint8  I2C_ENDSTA;      //傳輸完畢時(shí)的狀態(tài):為0x11則正確傳輸完畢;為0x22則總線出錯(cuò);
volatile uint8  I2C_DATABUF;     //用于單個(gè)字節(jié)寫入時(shí)候的緩沖區(qū)

/$-------------------------------------------------------------------
$$ 函數(shù)名稱: __irq IRQ_I2C
$$ 功能描述: I2C中斷服務(wù)程序,系統(tǒng)函數(shù)
$$ 輸 入:   無(wú)
$$ 輸 出:   無(wú)      
$$ 全局變量: I2C_ENDSTA,I2C_WRTYPE,I2C_ADD_STA,I2C_SLA,I2C_NUM,$I2C_BUFF,I2C_SLAADD,I2C_PAGADD
$$ 調(diào)用模塊: 無(wú)
$$ 作 者:   ARMstudent@sina.com
$$ 日 期:   2005.4.17
$$-----------------------------------------------------------------$/
void __irq IRQ_I2C(void)
{
uint8 TEMP;
TEMP=I2STAT;
if(I2C_WRTYPE==0)                    //判斷此次操作是讀還是寫
{
  SWITCH(TEMP)                        //以下是寫操作
  {
   case 0x08:                         //啟動(dòng)總線
    #if defined AT24C04
    I2DAT=((I2C_SLA<<2)|0xA0)|(I2C_PAGADD<<1);
    #elif defined AT24C08
    I2DAT=((I2C_SLA<<3)|0xA0)|(I2C_PAGADD<<1);   
    #elif defined AT24C16
    I2DAT=(I2C_PAGADD<<1)|0xA0;
    #else
    I2DAT=(I2C_SLA<<1)|0xA0;
    #endif
    I2CONCLR=0x28;
    break;
   case 0x18:                        //發(fā)送寫控制字
    #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256))
    I2DAT=I2C_PAGADD;
    I2C_ADD_STA=2;
    #else
    I2DAT=I2C_SLAADD;
    #endif
    I2CONCLR=0x08;
    break;
   case 0x28:                       //發(fā)送數(shù)據(jù)并接收到從器件應(yīng)答
    #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256))
    if(I2C_ADD_STA==2)
    {
     I2DAT=I2C_SLAADD;
     I2C_ADD_STA=1;
    }
    #endif
    if(I2C_ADD_STA==1)
    {
     if(I2C_NUM>0)
     {
      I2DAT=*I2C_BUFF++;
      I2C_NUM--;      
     }
     else
     {
      I2CONSET=0x10;
      I2C_ENDSTA=0x11;
     }
    }
    I2CONCLR=0x08;               
    break;
   case 0x20:               //錯(cuò)誤
   case 0x30:
   case 0x38:
    I2CONSET=0x10;
    I2CONCLR=0x08;
    I2C_ENDSTA=0x22;
  }
}
else
{
  SWITCH(TEMP)                 //以下執(zhí)行讀操作
  {
   case 0x08:                  //啟動(dòng)總線
    #if defined AT24C04
    I2DAT=((I2C_SLA<<2)|0xA0)|(I2C_PAGADD<<1);
    #elif defined AT24C08
    I2DAT=((I2C_SLA<<3)|0xA0)|(I2C_PAGADD<<1);   
    #elif defined AT24C16
    I2DAT=(I2C_PAGADD<<1)|0xA0;
    #else
    I2DAT=(I2C_SLA<<1)|0xA0;
    #endif
    I2CONCLR=0x28;
    break;
   case 0x18:                //發(fā)送寫控制字
    #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256))
    I2DAT=I2C_PAGADD;
    I2C_ADD_STA=2;
    #else
    I2DAT=I2C_SLAADD;
    #endif
    I2CONCLR=0x08;
    break;
   case 0x28:            
3樓: >>參與討論
eleven11
另外不允許有*號(hào)
替換的時(shí)候不小心把程序中的*頁(yè)替換成$了,需要的自己改一下

4樓: >>參與討論
eleven11
我學(xué)習(xí)ARM時(shí)間也不長(zhǎng)
感覺(jué)學(xué)習(xí)一定要寫筆記,我學(xué)ARM就寫了3萬(wàn)字的筆記,另外應(yīng)該學(xué)完一個(gè)部件寫一個(gè)不在OS運(yùn)行上的驅(qū)動(dòng),等調(diào)試出來(lái)了,再可以寫成UCOS2的,改改別人的程序,小打小鬧的學(xué)的不會(huì)透澈

5樓: >>參與討論
fuck許民誠(chéng)
re:eleven11
頂!

6樓: >>參與討論
eleven11
事實(shí)上除了ZLG提供的資料,還有很多東西可以思考的
    多個(gè)FIQ/IRQ中斷同時(shí)發(fā)生時(shí),該如何人為設(shè)置FIQ/非向量IRQ的優(yōu)先級(jí),1個(gè)定時(shí)器還可以有多個(gè)毫無(wú)聯(lián)系的定時(shí)設(shè)置,是定時(shí),不是PWM,如何同時(shí)使用RTC的全部增量中斷……

這些其實(shí)都是可以思考一下的,也是很有趣的



7樓: >>參與討論
pubstar
長(zhǎng)這大還沒(méi)有寫過(guò)筆記,呵呵,不過(guò),就是改不過(guò)來(lái)
 
8樓: >>參與討論
lh007
樓主的學(xué)習(xí)方法很值得學(xué)習(xí)!
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)問(wèn)這是什么 warning ?如何消除?
在ucos中每個(gè)任務(wù)一定要調(diào)用OSTimeDly嗎?
在ADS下怎樣替換庫(kù)函數(shù)?
如何編寫加載描述符?
求助:LPC2129CAN接收過(guò)濾怎么設(shè)置
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)