 |

|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 12 18, 19:31. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » IAR (ARM) ir Wiggler JTAG - kas nors bandėt?
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
 |
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 04, 22:51 |
|
|
|
|
Kada čia spėjai tiek monologo privaryt?...
Ok, pabandysiu padaryti dialogą...
| BLASTER rašo: |
(*((volatile unsigned long *) 0xFFFFF030))
Taigi, atminties adresas kaip ir žinomas, bet kas tai per adresas?
Ai, ir ką reiškia 'volatile'? Kintamasis?
* simbolizuoja rodyklę? o antroji * ? |
- "volatile", reiškia kad kompiliatorius neoptimizuos šio kintamojo (pvz., parašius du kartus vienas po kito priskyrimo sakinius). Reikšmės gali kisti pertraukimo paprogramėse ir pan. Gal kas nors ir tiksliau paaiškins, bet esmė panaši.
- "unsigned long *" reiškia, kad tai yra rodyklė į 4-bitų adresą.
- Pirmoji žvaigždutė reiškia įrašymą/skaitymą į tą adresą.
| BLASTER rašo: |
VICVectAddr: Vector Address Register. When an IRQ interrupt occurs, the IRQ service routine can read this register and jump to the value read.
Bet kas tai per dalykas tai nežinau.. |
Tai yra "Vectored Interrupt Controller". Visa informacija kaip su juo elgtis (t.y., kaip naudoti pertraukimus) yra parašyta čia: http://www.arm.com/pdfs/DDI0273A_VIC_PL192.pdf
(čia standartinis pertraukimų kontroleris, tinka visiems ARM'ams).
| BLASTER rašo: |
Ir dar: ką reiškia visokie žodeliai su vienu arba dviem _ prieky? Pvz: __irq
 |
Tai čia taip vadinama kompiliatoriaus praplėtimai (extentions). Reiškia, kad paprogramė dirba kaip pertraukimo paprogramė, grįžta iš jos vėl uždedant globalinę pertraukimų vėliavėlę I, atstato steko rodyklę ir pan. Visi šie dalykai (C sintaksės praplėtimai) turi būti aprašyti kompiliatoriaus aprašyme. |
|
|
|
|
|
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 05, 02:30 |
|
|
|
|
| BLASTER rašo: |
Beje, kur gi man rasti tą kompiliatoriaus aprašymą? Naudoju Keil µVision... Halp'as nepernelyg kalbus pasirodė  |
Hmm... Su Keil niekad neteko bendrauti. Pagrinde draugauju su IAR. Duodu jo aprašymą:
http://www.e-kaunas.com/EWARM_CompilerReference.pdf
Labai daug dalykų turėtų būti tie patys (tie patys __irq, ir visi kiti programavimo niuansai aprašyti). Yra pavyzdžių yra kaip naudoti pertraukimus, ir t.t.
Tik labai neišsigąsk - čia dar papildomas 240psl  |
|
|
|
|
|
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 05, 14:20 |
|
|
|
|
Didelis blynas, turbūt mielinis
Sveikinu pradėjus žaist su ARM
P.S. matomai takelius aplituoji kai jau sulituotos dalys..
| vakaras rašo: |
Tik labai neišsigąsk - čia dar papildomas 240psl  |
Jau pripratau prie tokių kiekių...
Dėkui už linką  |
|
|
|
|
|
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 05, 15:27 |
|
|
|
|
Ai su tais aplitavimais nezinau. Nemegstu ju aplituoti Tai pradėjau, paskui nusibodo, tai gavosi nedabaigta - kantrybes cia reikia. Kazkaip reikia atidirbti ta techologija, arba naudoti specialiai tam skirta priemonę. O gal tiesiog geriau nulakuoti ir viskas... na esme kad veikia - pasizaidimams uzteks.
P.S blyno matmenys 100x100mm |
|
|
|
|
|
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 06, 00:33 |
|
|
|
|
Truputį krypstam nuo temos, bet dzin..
Kelios naujienos dėl energijos vartojimo.
Pasižaidžiau su interruptais ir idle mode, taigi štai rezultatai:
Nuolatinis loop @ 60MHz: 55mA;
Nuolatinis loop @ 60MHz + atjungta (PCONP) visa periferija išskyrus TIMER0: 53mA;
Idle mode @ 60MHz + trumpas interruptas LED'o uždegimui + atjungta periferija: 11mA
(LED'o vartojama srovė neįskaičiuota)
Na, 60mA tai ne taip jau ir mažai  |
|
|
|
|
|
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 06, 00:41 |
|
|
|
|
| BLASTER rašo: |
Na, 60mA tai ne taip jau ir mažai  |
Kuo didesnis dažnis, tuo daugiau suvartoja srovės (visiems CPU tai aktualu).
Pagal aprašymą, prie 10MHz ima 10mA, prie 60MHz ima 40mA. |
|
|
|
|
|
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 07, 19:16 |
|
|
|
|
OK, pamažu bėgėjuos... Bandau paleisti RTC ir ta proga noriu pasidaryt Binary clock Anyway, parašiau gabalkulą programos:
| Kodas: |
#include <LPC21xx.H> // LPC21xx definitions
volatile unsigned long j = 0x010000;
void rtc0(void) __irq
{
IOCLR1 = 0xFFFFFF;
if(j > 0x800000)
j = 0x010000;
else
j <<= 1;
IOSET1 = j;
ILR = 0x00000001; // Clear interrupt flag
VICVectAddr = 0; // Acknowledge Interrupt
PCON = 0x01; // IDLE mode
}
/* Setup the RTC Interrupt */
void init_rtc(void)
{
CCR = 0x01 | 0x10; // Clock enable + 32'767Hz quartz enable
CIIR = 0x00000001; // Sekunde generuos interrupta
VICVectAddr1 = (unsigned)rtc0; // set interrupt vector in 1
VICVectCntl1 = 0x0000002D; // use it for RTC Interrupt
VICIntEnable = 0x00002000; // Enable RTC Interrupt
}
void main(void)
{
PCONP = 0x00000202;
IODIR1 = 0x00FF0000; // P1.16..23 defined as Outputs
init_rtc();
PCON = 0x01; // IDLE mode
} |
Programa turi atlikti funkciją Kas sekundę pasistumiantis LED (AKA bėganti eilutė). Su simuliatoriumi ji veikia puikiai, bet va pačiame mikrovaldiklyje veikia gerokai greičiau, net 5.92MHz dažniu, kai turėtų būti 1Hz. RTC kvarcas 32768Hz...
Gal turit minčių? |
|
|
|
|
|
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 07, 23:11 |
|
|
|
|
Beje, truputį perrašiau interrupto funkciją:
| Kodas: |
void rtc0(void) __irq
{
IOCLR1 = 0xFFFFFF;
IOSET1 = SEC <<16;
ILR = 0x00000001; // Clear interrupt flag
VICVectAddr = 0; // Acknowledge Interrupt
PCON = 0x01; // IDLE mode
} |
Tokiu būdu į portą išvedamas dvejetainis einamųjų sekundžių pavidalas. Sekundės atvaizduojamos normaliai, reikšmė keičiasi lygiai kas sekundę.
Bet va interruptas tai visvien vyksta 6MHz dažniu. Pasiskaičiavau, tai gaunasi, kad programa iš interrupto taip ir neišeina, sukasi jame nuolat. Kame replės, ką užmiršau?  |
|
|
|
|
|
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 08, 00:21 |
|
|
|
|
Pasiskaityk apie pertraukimo veliaveles numetima. Nes vėliavėlė dažniausiai pati nenusimeta vien tik dėl to, kad įvyko pertraukimas.
Pabandyk CIIR = 0x01 |
|
|
|
|
|
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 08, 01:28 |
|
|
|
|
CIIR = 1; nepadėjo
Išsiaiškinau kame bėda - suveikinėjo Clock Tick Counter resetas. Na, bent jau taip spėju
Bėda išsisprendė į init_rtc() įrašius ILR = 3;.
Dabar programa į LED'us išveda dvejetainę sekundžių reikšmę. Programą pateikiu kaip pavyzdį. Manau, kad ji kam nors pravers
| Kodas: |
/******************************************************************************/
/* BLINKY.C: LED Flasher */
/******************************************************************************/
#include <LPC21xx.H> // LPC21xx definitions
volatile unsigned long j = 0x010000;
void rtc0(void) __irq;
void init_rtc(void);
void set_time(void);
void main(void)
{
PCONP = 0x00000202; // Isjungiama periferija, paliekamas tik RTC
IODIR1 = 0x00FF0000; // P1.16..23 defined as Outputs
init_rtc();
set_time();
PCON = 1; // IDLE mode
}
void rtc0(void) __irq
{
IOCLR1 = 0xFFFFFF;
IOSET1 = SEC <<16;
ILR |= 1; // Clear interrupt flag
VICVectAddr = 0; // Acknowledge Interrupt
PCON = 1; // IDLE mode
}
/* Setup the RTC Interrupt */
void init_rtc(void)
{
ILR = 3; // Isjungiam kloko 32'768 interrupta
CCR = 0x11; // Clock enable + 32'767Hz quartz enable
CIIR = 0x01; // Sekunde generuos interrupta
VICVectAddr1 = (unsigned long)rtc0; // set interrupt vector in 1
VICVectCntl1 = 0x0000002D; // use it for RTC Interrupt
VICIntEnable = 0x00002000; // Enable RTC Interrupt
}
/* Nustatomas RTC laikas */
void set_time(void)
{
YEAR = 2006; // Year
MONTH = 2; // Month
DOM = 7; // Day of month
DOY = 38; // Day of year
DOW = 2; // Day of week
HOUR = 23; // Hours
MIN = 35; // Minutes
SEC = 30; / Seconds
} |
 |
|
|
|
|
|
 |
 |
IAR (ARM) ir Wiggler JTAG - kas nors bandėt? |
Parašytas: 2006 02 09, 20:32 |
|
|
|
|
Ai, ir dar viena bėda. Portai P0.2 (SCL0/CAP0.0), P0.3 (SDA0/MAT0.0/EINT1) ir P0.11 (CAP1.1/SCL1) neveikia kaip outputai Gal kas nustatyta kur nors giliai? Gal koks I2C įjungtas? Bandžiau jį išjunginėt - visvien taspat  |
|
|
|
|
|
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |