simulace 4313 v AVR studiu
Moderátor: Moderátoři
simulace 4313 v AVR studiu
Ahoj,
prosím o pomoc, pokud se s tím někdo setkal.Vnější přerušení PCIE obsahuje u 4313 tři přerušení PCIE (0,1,2)(GIMSK), stejně tak samozřejmě vlajky (GIFR resp.EIFR). Ovšem při zapnutí simulace v AVR Studiu (verze 4.12.460) je ale zobrazeno jen přerušení PCIE bez číslice, překladač přerušení s číslicí také nezná. To při použití názvů bitů pro nastavení také působí potíže a simulace nefunguje. Netuší někdo, co by mohlo být příčinou?
Děkuji
jirS
prosím o pomoc, pokud se s tím někdo setkal.Vnější přerušení PCIE obsahuje u 4313 tři přerušení PCIE (0,1,2)(GIMSK), stejně tak samozřejmě vlajky (GIFR resp.EIFR). Ovšem při zapnutí simulace v AVR Studiu (verze 4.12.460) je ale zobrazeno jen přerušení PCIE bez číslice, překladač přerušení s číslicí také nezná. To při použití názvů bitů pro nastavení také působí potíže a simulace nefunguje. Netuší někdo, co by mohlo být příčinou?
Děkuji
jirS
V instalaci WinAVR je v souboru iotn4313.h několik chyb proti Atmel datasheetu. V příloze je opravený soubor. Liší se pouze na několika málo místech. Zdroj je zde
Kód: Vybrat vše
#define PCMSK0 _SFR_IO8(0x020) // misto #define PCMSK _SFR_IO8(0x020)
#define GIFR _SFR_IO8(0x03A) // misto #define EIFR _SFR_IO8(0x03A)
#define PCIF1 3
#define PCIF2 4
#define PCIF0 5
#define PCIE1 3
#define PCIE2 4
#define PCIE0 5
// misto USART_xxxx
#define USART0_RX_vect_num 7
#define USART0_RX_vect _VECTOR(7) /* USART, Rx Complete */
#define USART0_UDRE_vect_num 8
#define USART0_UDRE_vect _VECTOR(8) /* USART Data Register Empty */
#define USART0_TX_vect_num 9
#define USART0_TX_vect _VECTOR(9) /* USART, Tx Complete */
- Přílohy
-
- iotn4313.zip
- (4.14 KiB) Staženo 77 x
Ahoj,
dík za upozornění, měl jsem na mysli jen náhradu. Udělal jsem to, ale zatím se vše chová stejně- jednak v souboru tn4313def.inc je taky uveden jen PCIE bez číslic, možná bude chyba i tam. Simulátor taky zobrazuje jen jeden PCIE. Ale i tak díky, kdybyste někdo ještě něco věděli, budu rád.
JiriS
dík za upozornění, měl jsem na mysli jen náhradu. Udělal jsem to, ale zatím se vše chová stejně- jednak v souboru tn4313def.inc je taky uveden jen PCIE bez číslic, možná bude chyba i tam. Simulátor taky zobrazuje jen jeden PCIE. Ale i tak díky, kdybyste někdo ještě něco věděli, budu rád.
JiriS
Tak nějak mě nedošlo že moje první zásadní otázka měla znít: Co používáš za překladač a toolchain ?
Vše co jsem psal je pro WinAVR a AVR Studio 4.19.
V simulátoru pak jednotlivé bity skutečně nejsou označeny jako např. PCIFx, ale stačí se koukat na příslušný registr a jeho odpovídající bity. Oprava *.h souboru řeší pouze překlad kódu tak, aby se daly použít stejná označení registrů a bitů jako v Atmel datasheetu.
Vše co jsem psal je pro WinAVR a AVR Studio 4.19.
V simulátoru pak jednotlivé bity skutečně nejsou označeny jako např. PCIFx, ale stačí se koukat na příslušný registr a jeho odpovídající bity. Oprava *.h souboru řeší pouze překlad kódu tak, aby se daly použít stejná označení registrů a bitů jako v Atmel datasheetu.
Ahoj, už jsem se sem zase dostal. Používám Avr studio 4.12, a pracuju v assembleru. Co se týče překladu: když jsem zkusmo doplnil soubor tn4313.def o deklaraci PCIEx, překladač to okamžitě pochopil. Ale v zobrazení registru při simulaci se už tento přidaný bit nezobrazil, nebyl tedy ani přístupný pro ruční úpravu, stejně tak tam chybí bity Flag příslušné jednotlivým PCIEx. Zároveň, jak jsem vlastně uvedl, v definičním souboru tyto bity rovněž chybí. Je tu tedy rozpor mezi datasheetem a avrstudiem. Předpokládám, že datasheet je v pořádku, tedy je chyba v AVR st., a protože nemám ještě tolik zkušenotí, je to pro mě téměř neodladitelné. (Je možnost samozřejmě vždy přeprogramovat čip a zobrazovat výsledky na LCD, ale...) A navíc mám mírný hendikep- jsem poněkud starší, a tím pádem se spíš orientuji v ruské verzi angličtiny
.
![Smile :)](./images/smilies/icon_smile.gif)
Pro nastavení externího přerušení se používají registry: GIMSK,EIFR,MCUCR,PCMSK,PCMSK1,PCMSK2.
v registru GIMSK se povoluje přerušení INT1,INT0,PCIE(PCINT0..15)
takže pro jakékoliv přerušení od PCINTx je nutné nastavit PCIE = 1.
Příznak přerušení je v registru EIFR.PCIF - aktivací jakéhokoliv PCINTx se nastaví na 1.
Pomocí registrů:
PCMSK - PCINT(7..0) - (v AVR Studiu je v záložce CPU)
PCMSK1 - PCINT10..8
PCMSK2 - PCINT(17..11)
se provede výběr vstupu.
MCUCR - nastavení úrovně aktivace INT0,INT1 a nastavení režimu spotřeby.
v registru GIMSK se povoluje přerušení INT1,INT0,PCIE(PCINT0..15)
takže pro jakékoliv přerušení od PCINTx je nutné nastavit PCIE = 1.
Příznak přerušení je v registru EIFR.PCIF - aktivací jakéhokoliv PCINTx se nastaví na 1.
Pomocí registrů:
PCMSK - PCINT(7..0) - (v AVR Studiu je v záložce CPU)
PCMSK1 - PCINT10..8
PCMSK2 - PCINT(17..11)
se provede výběr vstupu.
MCUCR - nastavení úrovně aktivace INT0,INT1 a nastavení režimu spotřeby.
Dík, Stando33.
V podstatě jsem tohle taky vykoumal. Zaráží mě ale, že v datasheetu jsou nejen uvedeny bity PCIE0(1,2) (GIMSK,b5,4,3), ale také odpovídající vlajky v EIFR(bit5,4,3), t.j. PCIF0(1,2) a také má procesor odpovídající vektory přerušení PCINT0,PCINT1 a PCINT2. Takže jsem byl překvapený, když přakladač hlásil chybu při pokusu o nastavení (1<<PCIE0). V podstatě tedy datasheet neodpovídá skutečnosti a AVR studio simuluje procesor, nebo druhá možnost- chyba v AVR Sudiu. Datasheet jsem si stáhl asi před týdnem, je společný jak pro 4313, tak pro 2313 jen s rozdíly, které nejsou pro aplikaci tak důležité. Jinak, jak popisuješ, simulátor i překladač mi tak funguje. Ale protože i v souboru xxx.XMLS (snad jsem to nepopletl), včetně tnxxxdef je popis stejný, jak jsi uvedl, předpokládám, že i procesor takhle pracuje a neměl by nakonec problém to odladit. Ale stejně si myslím, že by datasheet měl odpovídat skutečnosti.
Zatím dík
Ahoj
V podstatě jsem tohle taky vykoumal. Zaráží mě ale, že v datasheetu jsou nejen uvedeny bity PCIE0(1,2) (GIMSK,b5,4,3), ale také odpovídající vlajky v EIFR(bit5,4,3), t.j. PCIF0(1,2) a také má procesor odpovídající vektory přerušení PCINT0,PCINT1 a PCINT2. Takže jsem byl překvapený, když přakladač hlásil chybu při pokusu o nastavení (1<<PCIE0). V podstatě tedy datasheet neodpovídá skutečnosti a AVR studio simuluje procesor, nebo druhá možnost- chyba v AVR Sudiu. Datasheet jsem si stáhl asi před týdnem, je společný jak pro 4313, tak pro 2313 jen s rozdíly, které nejsou pro aplikaci tak důležité. Jinak, jak popisuješ, simulátor i překladač mi tak funguje. Ale protože i v souboru xxx.XMLS (snad jsem to nepopletl), včetně tnxxxdef je popis stejný, jak jsi uvedl, předpokládám, že i procesor takhle pracuje a neměl by nakonec problém to odladit. Ale stejně si myslím, že by datasheet měl odpovídat skutečnosti.
Zatím dík
Ahoj
Obávám se že v simulátoru je to tak, jak píše Standa33, ale v reálu "na procesoru" to bude dle datasheetu. PCINT1, PCINT2, PCMSK1 a PCMSK2 byly doplněny do datasheetu až v pozdější revizi (viz. Datasheet Revision History). Na druhou stranu je mě záhadou že i v posledním AVR Studiu 6.1 je to stejně. Bohužel momentálně nemám procesor v šuplíku, takže to nevyzkouším.
Pokusil jsem se opravit soubor "tn4113def.inc". Bit PCIE0 (a jiné) nebyl definovaný. Můžeš vyzkoušet.Takže jsem byl překvapený, když přakladač hlásil chybu při pokusu o nastavení (1<<PCIE0).
- Přílohy
-
- tn4313def_new.zip
- (5.84 KiB) Staženo 92 x
Dík za odpovědi. Definici v tn4313.def jsem taky zapsal, takže překladač to vzal v pořádku. Ale v simulátoru ty bity nejsou zobrazeny, tím není možné nasimulovat přerušení jiné než původní (AVR podle mých poznatků neumí vygenerovat přerušení změnou hodnoty na příslušném pinu, musí se ručně nastavit vlajka v EIFR. A to taky znamená, že se generuje pouze vektor přerušení PCIE, nikoliv PCIE1 a 2.
Do historie jsem moc nelezl, mám s angličtinou ten problém, že jí moc nerozumím, takže louskám co to jde.
No ale už jsem se rozhodl, 4313 pořídím, neměl by být problém zjistit, jak 4313 pracuje v reálu a podle mtoho program napsat.
V každém případě DÍKY všem, moc mi to pomohlo ujasnit situaci a zorientovat se. Už jsem i uvažoval nad jiným typem (mega8).
Ještě jednou moc díky, opravdu jste mi pomohli.
JiriS
Do historie jsem moc nelezl, mám s angličtinou ten problém, že jí moc nerozumím, takže louskám co to jde.
No ale už jsem se rozhodl, 4313 pořídím, neměl by být problém zjistit, jak 4313 pracuje v reálu a podle mtoho program napsat.
V každém případě DÍKY všem, moc mi to pomohlo ujasnit situaci a zorientovat se. Už jsem i uvažoval nad jiným typem (mega8).
Ještě jednou moc díky, opravdu jste mi pomohli.
JiriS