» »

Komunikacija med XP6840 in AT91SAM9260EJS preko I2C vodila

Komunikacija med XP6840 in AT91SAM9260EJS preko I2C vodila

KernelPanic ::

Spostovani!

Pisem driver za I2C modul na ARM procesorju Atmel ARM91SAM9260EJS preko I2C vodila (Atmelova nomenklatura za I2C vodil je TWI-Two Wire Interface) in stvar mi dela obcasno. Skusam realizirati osnovno funkcionalnost (posiljanje naslova integriranega vezja XP6840) in stvar je zjutraj delovala, sedaj pa ne in ne vem, kaj delam narobe. Koda je sledeca:
int TWI_write_single(AT91PS_TWI pTWI,
                     const unsigned int iDeviceAddress,
                     const char pData)
{
    volatile unsigned int iStatus=0;
    volatile unsigned int iError=0;
    volatile unsigned int iEnd=0;

    if(pTWI==0)
        return;

    // System Reset
    pTWI->TWI_CR=AT91C_TWI_SWRST;

    // Sets TWI Clock
    pTWI->TWI_CWGR=(0x8)|
                   (0x8<<8)|
                   (0x7<<16);

    // Sets up device address and data direction
    pTWI->TWI_MMR=(iDeviceAddress<<16)|
                  (iDirectionWrite<<iMasterDirection);

    // **** Interupt Enable Setup (enable NACK interrupt)
    pTWI->TWI_IER|=(iOn<<iNotAckowledged);
    // **** END OF Interrupt Enable Setup

    // Sets up Master Mode
    pTWI->TWI_CR=(iOn<<iConditionStart)|
                 (iOn<<iMasterModeEnable)|
                 (iOn<<iSlaveModeDisable);


    pTWI->TWI_THR=pData;

/*
    pTWI->TWI_CR|=((iOff<iConditionStart)|
                   (iOn<<iConditionStop)|
                   (iOff<iMasterModeEnable));
*/
/*
    TWI_delay(40);
    while(!iEnd)
    {
        iStatus=pTWI->TWI_SR;
        if((iStatus&AT91C_TWI_NACK)==AT91C_TWI_NACK)
        {
            iError++;
            iEnd=1;
        }   // if

        if((iStatus&AT91C_TWI_TXRDY)==AT91C_TWI_TXRDY)
        {
            iEnd=1;
        }   // if
    }   // while

    iStatus=pTWI->TWI_SR;
    while(!(iStatus&AT91C_TWI_TXCOMP))
    {
        iStatus=pTWI->TWI_SR;
    }   // while
*/

    return iError;
}   // TWI_write_signle
Po dokumentaciji sledec se ob polnitvi registra TWI_THR posiljanje prozi samodejno, vendar se LED dioda na evaluation boardu vezja XP6840 (Ready) ne prizge. Na tem boardu je tudi gumb, ki prozi praznjenje kondenzatorja za blisk 3 LED diod in zjutraj mi je to delovalo, sedaj pa ne. Zanima me, ce se je kdo s tem ze ukvarjal (I2C nasplosno) in kaksne so zacetniske napake. Konektor sem zlotal sam in z voltmetrom sem preveril povezavo, povezava je ok. Evaluation board napajam iz predelanega napajalnika za PC (pomeril sem dovod napajalne napetosti, je ok - 5.2V), ARM board (SMS razvojna plosca od Fakultete za Racunalnistvo in Informatiko) se pa napaja preko USB komunikacije z PCjem. Ima kdo kaksne nasvete?

Lp,
M.

KernelPanic ::

Spostovani!

Stvar mi je uspela, TWI port ni bil pravilno skonfiguriran in sem vam hotel posneti par LED efektov, ampak, na zalost, ker sem storast, sem nehote vezje skuril in cakam novega. :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

I2C komunikcija

Oddelek: Elektrotehnika in elektronika
61303 (539) r-a-m
»

Arduino "leteče luči"

Oddelek: Elektrotehnika in elektronika
133012 (1889) zrataj4201
»

C in funkcije ter #define

Oddelek: Programiranje
463969 (2330) misek
»

priklop lcd preko i2c

Oddelek: Elektrotehnika in elektronika
141513 (1282) cefizl88
»

C - pomoč

Oddelek: Programiranje
111457 (1197) Thagirion

Več podobnih tem