if(mob_status & CAN_ERR_MOB_ALL) /*in case of any error*/
{ ....
......
Kdyz kod krokuju (v AVRSTUDIU 5) a dam breakpoint na if, obsahuje mob_status divnou hodnotu (pusobi dojmem jako by byla z jineho mobu, pro ten aktualni nedava smysl). Hodnota v periferialnim prohlizeci naopak obsahuje hodnotu, ktera smysl dava. Problem s tim, co zobrazuje WATCH by byt nemel, protoze program se dale podle te divne hodnoty chova. Pokud kod krokuji od CANPAGE= je vse ok. NOP je tam jako pokus o pauzu, ale nema zadny efekt. V mizerne dokumentaci k CAN periferii nevidim, ze by po zmene CANPAGE mela nasledovat nejaka pauza... Dale se zda, ze problem se projevil po te, co jsem zacak pouzivat MOb 0 a snazim se z nej vysilat RTR zpravy... Predtim se kod driveru choval normalne, alespon to tak vypadalo....
Ma nekdo nejaky napad?
EDIT: Problem je v tom, ze po vyslani zpravy se ihned automaticky do mobu prijme nejaka zprava z CANu, ktera je v nem pri dalsim kroku videt viz nize... _________________ de omnibus dubitandum est
Naposledy upravil WLAB dne po březen 25 2013, 15:22, celkově upraveno 2 krát.
Založen: Oct 08, 2010 Příspěvky: 162 Bydliště: ValMez
Zaslal: út březen 12 2013, 7:57 Předmět:
Zdravím.
Promiň jestli se pletu, ale mám ten dojem, že Studio5 procesory typu AT90CAN plně nepodporuje.
Já makám na Studiu4 s pluginem At90can128_plugin.
Za CANPAGE žádné zpoždění být nemusí. Změna page je okamžitá.
S mobem 0 nemám žádný problém, spíš to vidím na tu RTR zprávu.
Mám pocit (jestli si dobře vzpomínám) tak tam je poněkud zmatené nastavování. Ještě se ti na to mrknu.
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: út březen 12 2013, 11:01 Předmět:
Co jsem si vsiml, tak v 5tce neni pro AT90CAN podpora v simulatoru, ale pres JTAG to jede, bez znamek potizi... pominu-li to, ze prestane fungovat watch pro lokalni promenne na zasobniku, pokud se v nejakem vnitrnim bloku se zasobnikem hne (napr. se v nem vytvori dalsi lokalni promenna), ale to s AT90CAN nijak nesouvisi.
Ja to kompiluju v prisernem CodeVisionu a v AVS to jen ladim, protoze slozitejsi veci se bez krokovani neobejdou...
Take bych rekl, ze CANPAGE by mela mit okamzity efekt....
Je to divny, jeste jsem si tam uvedomil drobnou chybku, ale ta by nemela mit na tohle vliv a spis by se mela projevit pri krokovani.... pro jistotu ji odstranim a uvidim... _________________ de omnibus dubitandum est
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: út březen 12 2013, 14:47 Předmět:
Plus mam jeste jeden dotaz, protoze AVR STUDIO jsem doposud nepouzival. Kde nastavit, aby krokovani non-ISR casti probihalo bez toho, ze dalsim korkem skoncim v nejake ISR, ktera mne v dane chvili vubec nezajima? Je sice logicke, ze program vleze hned do ISR cekajiciho intka, ale pri ladeni je to vetsinou na nic. _________________ de omnibus dubitandum est
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: út březen 12 2013, 18:21 Předmět:
Chova se to nejak podivne.....
krokuju treba:
kód:
435: CAN_SET_CUR_MOB_TO_TX;
000007CC LDS R30,0x00EF Load direct from data space
000007CE ANDI R30,0x3F Logical AND with immediate
000007CF ORI R30,0x40 Logical OR with immediate
000007D0 STS 0x00EF,R30 Store direct to data space
cele je to v ISR. z 0xEF (CANCDMOB) se spravne nacte 0x05, o ktere pheriphery viewer hlasi, ze tam ma byt, probehne or na 0x45 (tj. pridani povelu k vysilani). Ovsem po STS AVRSTUDIO hlasi, ze se zapsala hodnota 98, uplne se zmeni IDT.... proste jako bych najednou koukal na jiny mob, ale v CANPAGE zustane page 0... To bych pricetl nejake chybe AVRSTUDIA, kdybych pak v tomhle mobu (0), ktery slouzi jen k vysilani nezaznamenal prijem dat... Proste jako by se tim zapisem prepnul mob 0 na prijem cehokoliv a ten se hned provedl... Prijate ID odpovida jedne ze zprav, kterou do toho z venku posilam. A ta se ihned prijme po STS instrukci je nastaven SIT odpovidajici mobu 0...
Cele to ma jeste hloupy sideefect spocivajici v tom, ze kazdym update dat z periferie do viewru, se provedou operace spoustene ctenim, coz ma u CANu snad za nasledek jen rozhozeni INDEXu do zpravy. _________________ de omnibus dubitandum est
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st březen 13 2013, 17:21 Předmět:
Hmm, kdyz pred STS v periferialnim vieweru vypnu RTR tag, tak to nedela....
Edit: pokud zadne zpravy neprichazi, je vysledny efekt podle predpokladu, zprava se odesle, nastavi se interrupt flagy a mob hlasi TXOK.....ridici registr zustava ve stavu prechoziho prikazu TX.... Jakmile ale prijde po CAN zprava, a to i aniz se mobu da RX povel, zprava se do mobu (0) ihned prijme... Skoro to vypada, ze po vyslani RTR zpravy se do prislusneho mobu vzdy prijme nejaka zprava.... ale v dokumentaci o tom nic nevidim. _________________ de omnibus dubitandum est
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: čt březen 14 2013, 12:58 Předmět:
Ten driver ma asi 1500 radek, tady jsou ty dulezite pasaze.
Jinak komentare at uz ceske nebo anglicke jsou plne preklepu....
Nektere promenne jsou znovupouzite pro jiny ucel, nez vyplyva z jejich nazvu, vetsinou kvuli rychlosti, jsou totiz alokovany v registrech ne na stacku.
#warning remove the test
if(!ctmp) /*test only*/
{
ctmp++;
ctmp--;
}
/*write data*/
CAN_SET_R_DATAIDX_RESET_AINC;
ctmp=msg->dlc;
ctmp&=0x0f;
//CANCDMOB = ctmp; /*prepare dlc to CANCDMOB register; mob temporarily set to disabled*/
if(~itmp & rtrautomob_list) /*check if the mob has autoreply nature*/
{
/*prepare RPLV flag, should not matter that data aren't ready yet as mob isn't switched to rx*/
CANCDMOB = CAN_CANCDMOB_RPLV_MASK | (CANCDMOB & ~(CAN_MOBCNF_FLAG_MODE_MASK | CAN_CANCDMOB_IDE_MASK) ); /*set to disabled, keep original dlc and ide, ext cleared*/
}
else CANCDMOB = ctmp; /*prepare dlc to CANCDMOB register; mob temporarily set to disabled, rplv and ext cleared*/
#if CAN_RTR_MODE == CAN_RTR_MODE_RTR_NORMAL
if(! (msg->flags & CAN_MSG_FLAG_RTR) ) /* this is no RTR message, data copying needed*/
{
#endif
itmp = (unsigned int) (msg->data);
while(ctmp)
{
CANMSG=*(char*)itmp;
itmp++;
ctmp--;
}
#if CAN_RTR_MODE == CAN_RTR_MODE_RTR_NORMAL
}
else CANIDT4 = CAN_CANIDT_RTR_MASK;
#else
CANIDT4=0;
#endif
if(!(CANCDMOB & CAN_CANCDMOB_RPLV_MASK) ) /*indicates !(autoreply mob with new data to be sent)*/
{
if(msg->flags & CAN_MSG_FLAG_EID)
{
itmp=msg->id;
ctmp=itmp>>8;
itmp<<=3;
CANIDT4|=(char)itmp; /*low of shifted id; RTR kept according flag; RB0, RB1 kept 0*/
CANIDT3=itmp>>8; /*high of shifted id*/
itmp=msg->ide;
itmp<<=3;
ctmp>>=5; /*holds the carry bits between id and ide during the shift*/
CANIDT2=(unsigned char)itmp | ctmp;
CANIDT1= itmp>>8;
//CAN_SET_CUR_MOB_TO_TXE;
CAN_SET_CUR_MOB_EXT_FLAG_ONLY;
}
else
{
itmp=msg->id;
itmp <<=5;
//CANIDT4=0; treaten in RTR section, see above
CANIDT2= itmp;
CANIDT1= itmp>>8;
//CAN_SET_CUR_MOB_TO_TX;
//CAN_CLEAR_CUR_MOB_EXT_FLAG_ONLY; not needed, already cleared
}
}
K odeslani dochazi zde (v konkretnim pripade je tahle cast v ISR):
Ve vhodny okamzik se tu do pripravenenho MOBu zapise vysilaci pokyn.
Cele je to kvuli tomu, abych mnozinu vysilacich MOBu transformoval z prioritniho odesilani (ktere je mi k nicemu) na FIFO chovani.
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: čt březen 14 2013, 13:54 Předmět:
Maska se u MOBu urcenych pro TX nenastavuje, prvni cast kodu je PutMsg(...) a druha je cast ISR, kde se v konkretnim pripade ten MOB 0 s remote zpravou odesila.. Maska se nastavuje pri inicializaci MOBu urcenych pro prijem. Mam tri skupiny MOBu RX, TX a RTR autoreply (ty zatim ani neresim). MOB je clenem urcite skupiny a prave jedne doku neni "odregistrovan" a zarazen do jine. Nepocita se s tim, ze by se MOB vyhrazeny pro nejakou z vyse uvedenych cinnosti pouzil pro jinou. RX a TX MOBy by mely zpracovavat i remote zpravy podle priznaku, ketry je ve strukture, ktera popisuje zpravu.
Nulova maska vysvetli, proc se do toho mobu prijme cokoliv, ale asi ne to proc se vubec neco prijme, kdyz k tomu neni dan pokyn.... _________________ de omnibus dubitandum est
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: čt březen 14 2013, 16:05 Předmět:
Ale ten problem je pri vysilani remote frame, ja se jen snazim remote frame vyslat, coz se povede, ale pak se mi do toho mobu, ze ktereho jsem odesilal, prijme sama bezduvodne nahodna zprava z CANu. _________________ de omnibus dubitandum est
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.