Problem med avbryter mellom I2C dataoverføring

N

Navid T

Guest
Hei venner jeg ønsker å lese ITG-3200 (med I2C modul av dspic30F2011). i vanlig program er det ok, og jeg kan lese den uten problem, men problemet er mitt hovedprogram har avbryte timeren også, skjer timeren avbruddet det raskere enn å lese fra I2C og når det leser ITG-3200 fra I2C modul mye avbrudd kommer mellom lesing og etter kort tid gjør det problem for ITG lese. (Jeg bruker timer interrupt å lage programvare PWM) har du noen forslag? Hilsen
 
Ja, men jeg trodde ingen leste masse koder her:
Code:
 / * ertebat BA ITG-3200 (khandane xyz) va PWM rooye 4 kanal (hamzaman) (barname Kami Irad darad va gaahi Gir mikonad va nemoone Bardari anjam nemidahad bayad TABE Haa ra Kami taghir daham ke ba timer moshkel Peyda nakonand * / # include "P30F2011.h" # define itgaddw 0B11010010 # define itgaddr 0B11010011 _FOSC (CSW_FSCM_OFF & FRC_PLL16); _FWDT (WDT_OFF); _FBORPOR (PBOR_OFF & PWRT_64 & MCLR_EN); _FGS ( CODE_PROT_OFF); / / --------------- FUNKSJONER ---------------- void send (unsigned char); unsigned char få (void) ; void i2c_start (); void i2c_restart (); void i2c_stop (); void i2c_ack (); void i2c_nack (); void i2c_write (unsigned char); unsigned char i2c_read (); / / --------- ----- Globale Vars ------------ usignerte int teller, foran, bak, venstre, høyre, / / ​​-------------- Timer 1 INT ------------------- void _ISR _T1Interrupt (void) {teller + +; if (counter
 
Først når vi ønsker å gi gode råd! : Lol: [COLOR = "Silver"] [SIZE = 1] ---------- Post lagt ved 15:12 ---------- Forrige post var på 15:10 - -------- [/size] [/color] Jeg skal se koden over og komme tilbake med deg etter at jeg spiser frokost.
 
Jeg bare ga koden din en rask titt. Setter du har den NSTDIS bit?
Hvis NSTDIS bit (INTCON1) er satt, er nesting av avbrudd forhindret. Dermed, hvis et avbrudd blir nå reparert, er behandlingen av en ny interrupt forhindret selv om den nye avbruddet er av høyere prioritet enn en dag blir betjent.
Tilbake til frokost.
 
Takk for hjelpen Her er bare en interrupt kilde (Timer 1), det gjorde jeg ikke bruke I2C interrupt, så vil nesting avbruddet ikke skje. i dette programmet PWM er generere riktig, men problemet er med å lese 6byte stream fra I2C og sende disse verdiene throught UART.
 
Du spesifiserte ikke de observerte problemene. Ved design, vil en I2C slave tolerere master klokker ned til null frekvens. Jeg antar det kan være et problem med data konsistens, hvis registre blir lest på ulike tidspunkter. I så fall er det heller et design problem av slave.
 
Jeg tror Slave har ikke noe problem, er problemet i programmet mitt, men dessverre jeg ikke nå er det for Tidtaker avbrutt eller noe annet! [COLOR = "Silver"] [SIZE = 1] ----- ----- Post lagt på 16:33 ---------- Forrige post var på 15:59 ---------- [/size] [/color] nå jeg deaktivere Timer avbryter befor lesing og gjør det etter å ha lest I2C streng ferdig, på denne måten alt fungerer bra, men PWM frekvens er ikke ok (lavere på grunn av varighet som avbryter er deaktiver)
 
Problemet er i mitt program
Ja, jeg tror det. Du fortalte ikke ennå hvordan problemet viser. Jeg anmeldt koden og funnet at bruk av avbruddet flaggene for pollet UART operasjon er ganske uvanlig, og muligens forårsaker problemer. Det er den UTXBF flagget tilgjengelig for pollet drift. I tillegg lurer jeg, hvis 30F2011 har en silisium bug knyttet til IO port lese-endre-skrive og I2C drift, som noen 8-biters PICS hadde. I så fall ville det bli nevnt i avsnittet om skrivefeil ark.
 
når tidsuret interrupt er deaktivere, leser programmet fra I2C og sende disse data gjennom UART for alltid i while (1) loop (jeg ser data fra UART på PC), men når tidtaker avbruddet er at det bare sender data på kort tid (ca 1 sek) og deretter ingenting sender gjennom UART. [COLOR = "Silver"] [SIZE = 1] ---------- Post lagt ved 17:53 ---------- Forrige post var kl 17.30 ---------- [/size] [/color] Hva mener du med silisium bug?
 
hva mener du med silisium bug?
Erratical maskinvare oppførsel. Ifølge dspic30f2011 skrivefeil ark, er det ingen kjente problemer, imidlertid.
bare sender data på kort tid (ca. 1 sek) og deretter ingenting sender gjennom UART.
Du skal kunne finne ut, hva prosessoren som venter i denne situasjonen. Enten I2C skipsføreren eller UART kan "henge". Hardware debugging med MPLAB ville være det beste alternativet for å finne ut hva som skjer.
 
Jeg fant hengende i Reade funksjon, etter kort tid at det fungerer det vil låse på "while (_RBF!),« Det betyr å lese er ikke komplett og I2CRCV er tom. Jeg vet ikke årsaken, men jeg ser når jeg deaktivere avbryte midlertidig på i2c_write (); funksjon henging ikke skjer!
 
Visste du sjekke, om I2C stopper på grunn klokken strekking utføres av slave?
 
kan du forklare mer please? I2C stopper etter å ha lest slave og sende Nack til det, hvordan det er mulig å slutte mens klokken strekking av slave!
 
Såvidt jeg forstår, klokke stretching (slave trekker SCK lav) ville være den eneste måten å stoppe mesteren under lest. Det kan bestemmes ved å sjekke bussen nivåer.
 
Hvis du er sikker på firmware ditt ... Gjør sjekke errata av denne kontrolleren ... sin microchip ... sin feil utsatt ...
 
Nei, jeg er sikker på å microchip mer enn firmware min, alle gangene jeg var bekymre mikrokontroller jeg fant feil i mitt arbeid ikke mikrokontroller, jeg har ikke mye tid til å fullføre dette prosjektet, så jeg endre min metode nå, men så snart mulig at jeg er fri jeg finner mitt problem. Takk for din hjelper
 

Welcome to EDABoard.com

Sponsor

Back
Top