LPC2138I2C

Intel od jakiegoś czasu przekłada wprowadzenie na rynek swoich najnowszych, 14-nanometrowych procesorów o nazwie kodowej Broadwell. Według wcześniejszych informacji wersje dedykowane dla komputerów przenośnych mają pojawić się pod koniec tego roku, a dla komputerów stacjonarnych dopiero w przyszłym roku. Teraz wiemy na ten temat trochę więcej, bo w...

Read more...
 
Salam,

Code:

/ *

i2c støtte til LPC21XX(c) 2004 Yuri Tiomkin (Yuri (at) tnkernel.com)Omfatter drivere:- EEPROM 24XX serie (fra 24XX04 til 24XX512)

- Real Time Clock DS1307

- I / O-Extender PCA9555

- Temperaturføler LM75Støtter uCOS-II og TNKernelDenne software er FREMLÆGGES AF Yuri TIOMKIN og bidragyderer `` AS IS''OG

ALLE UDTRYKKELIGE ELLER UNDERFORSTÅEDE GARANTIER, HERUNDER, MEN IKKE BEGRÆNSET TIL,

UNDERFORSTÅEDE GARANTIER FOR SALGBARHED OG EGNETHED TIL ET BESTEMT FORMÅL

ER misbilliget.
UNDER INGEN OMSTÆNDIGHEDER SKAL Yuri TIOMKIN ELLER BIDRAGSYDERNE HÆFTER

FOR NOGEN DIREKTE, INDIREKTE, TILFÆLDIGE, SPECIELLE, eksemplarisk, ELLER FØLGESKADER

SKADER (HERUNDER, MEN IKKE BEGRÆNSET TIL INDKØB AF ERSTATNINGSPRODUKTER

Eller tjenesteydelser; TAB AF BRUG, DATA ELLER FORTJENESTE ELLER BUSINESS AFBRYDELSE)

UANSET ÅRSAG OG PÅ NOGET AF ANSVAR, HVERKEN PÅ BAGGRUND AF KONTRAKT, STRICT

ANSVAR ELLER (HERUNDER UAGTSOMHED ELLER ANDET) OPSTÅET PÅ NOGEN MÅDE

UD AF BRUG AF DENNE SOFTWARE, SELVOM UNDERRETTET OM MULIGHEDEN FOR

Sådan skade.* /
 
En anden I2C Kode

Code:

/ * Dette er en modificeret I2C modul baseret på code af Pierre Seguin * /

/ * Det tests status over alle transaktioner og returnerer eventuelle fejlkoder * /

/ * Via en "longjmp" * /

/ * Det er let modificeret til direkte at returnere statuskoder i stedet for * /

/ * Bruge longjmps * /

/ * Denne kode vises en fejl værdi på 1 for de mest likley fejl: - * /

/ * - Ingen enhed rådighed.
Dette er ikke en kode, der kan forveksles med den * /

/ * Standard status værdier. * /

/ * En prøve af dets anvendelse er getBattery () ved hjælp af en PCF8591 A / D-enhed * /

/ * Owen Mooney * /jmp_buf i2cerror;# define STA 0x20

# define SIC 0x08

# define SI 0x08

# define STO 0x10

# define STAC 0x20

# define AA 0x04void InitI2C (void) (

I2CONCLR = 0xFF;

PINSEL0 | = 0x50; / / Set pinouts som SCL og sda

I2SCLL = 19 / / hastighed ved 100kHz til VPB Clock Divider = 4 ved 14 MHz

I2SCLH = 19;

/ / I2SCLL = 60 / / hastighed ved 375Khz til VPB Clock Divider = 1

/ / I2SCLH = 70 / / Pierre Seguin's oprindelige værdier.

I2CONSET = 0x40; / / Active Master Mode på I2C bus

)void SendI2CAddress (usignerede CHAR Addr_S) (

usignerede CHAR r;

I2CONCLR = 0xFF; / / klar I2C - inkluderet, hvis brugeren har glemt at "StopI2C ()"

/ / Andet denne funktion ville hænge.

I2CONSET = 0x40; / / Active Master Mode på I2C bus

hvis ((Addr_S & 0x01)) / / test, hvis det er at læse

I2CONSET = STA | AA / / sæt STA - tillade master til acknowlege slave;

anden

I2CONSET = STA / / sæt STA dont tillade erkender;

while (I2STAT! = 0x08); / / Vent til start, der skal udfyldes

I2DAT = Addr_S / / Debiter slave Adresse

I2CONCLR = SIC | STAC / / Clear i2c afbryder bit for at sende data

while (! (I2CONSET & SI)); / / vente indtil status rådighed

r = I2STAT / / læse-status.
Se standard fejlkoder pdf (link i manualen).

if (! (Addr_S & 0x01)) (/ / hvis vi gør en skrive

if (r! = 0x18) (/ / udseende for "SLA W er blevet fremsendt; ACK har modtaget"

if (R == 0x20) / / check for "SLA W er blevet fremsendt, ikke ACK har modtaget"

longjmp (i2cerror, 1); / / nej acknowlege - formentlig ingen enhed der.
Retur en 1 i longjmp

longjmp (i2cerror, r); / / andre fejl - returnere statuskoden i longjmp

)

) Else (

if (r! = 0x40) (/ / udseende for "SLA R er blevet fremsendt; ACK har modtaget"

if (R == 0x48) / / check for "SLA R er blevet fremsendt, ikke ACK har modtaget"

longjmp (i2cerror, 1); / / nej acknowlege - formentlig ingen enhed der.
Retur en 1 i longjmp

longjmp (i2cerror, r); / / andre fejl - returnere statuskoden i longjmp

)

)

)usignerede CHAR ReadI2C (void) (

usignerede CHAR r;

I2CONCLR = SIC / / klar SIC;

while (! (I2CONSET & 0x8)); / / vente indtil status rådighed

r = I2STAT / / tjek for fejl

if (r! = 0x50) (/ / udseende for "Data byte er modtaget; ACK er tilbagegivet"

longjmp (i2cerror, r); / / læse mislykkes

)

tilbagevenden I2DAT;

)void WriteI2C (usignerede CHAR Data) (

usignerede CHAR r;

I2DAT = Data; / / Debiter Data

I2CONCLR = 0x8 / / SIC; Clear i2c afbryder bit for at sende data

while (! (I2CONSET & 0x8)); / / vente indtil status rådighed

r = I2STAT;

if (r! = 0x28) (/ / udseende for "Data byte i S1DAT er blevet fremsendt; ACK har modtaget"

longjmp (i2cerror, r); / / skrive mislykkes

)

)void StopI2C (void) (

I2CONCLR = SIC;

I2CONSET = STO;

mens ((I2CONSET & STO)); / / vente på Stoppet bus I2C

)Svømmerens getBattery (void) (/ / Læs batterispænding med en PCF8591 A / D-enhed

usignerede CHAR fejle, r;

CHAR rod [10];

int x;

InitI2C ();

if (fejle = setjmp (i2cerror)) (

if (fejle == 1)

error ( "no A / D-enhed fundet");

anden

sprintf (rod, "I2C fejl% d", ERR);

fejl (rod);

tilbagevenden;

)

SendI2CAddress (0x90); / / PCF8591 A / D-enhed adresse

WriteI2C (0) / / Indstil kontrol havn værdi

WriteI2C (0) / / og D / A output

StopI2C ();

SendI2CAddress (0x91); / / Start læse

ReadI2C (); / / dummy læse cyklus at gøre den første konvertering

r = ReadI2C (); / / læse resultatet

StopI2C ();

tilbagevenden r * 12.15/118 / / returnere batterispænding

)
 
Jeg brugte LPC2148 og 8 PCA9555 bruge denne kode.Alt nice bortset StopI2C funktion.Det er nødvendigt at ændre på den side nogle gange er det vente evigt.

void StopI2C (void) (
I20CONSET = STO;
I20CONCLR = SIC;
mens ((I20CONSET & STO)); / / vente på Stoppet bus I2C
)

 
Hjælp.Jeg har fejl: Temperat.c (4): Fejl: # 20: identifier "jmp_buf" er udefineret

(Keil mVision 3)Lagt efter 6 minutter:Ohh lol))) Jeg har rettet en fejl.

Jeg vil slutte biblioteket: setjmp.h

 

Welcome to EDABoard.com

Sponsor

Back
Top