cześć chłopcy i dziewczęta
Od jakowegoś czasu próbuje rozgryźć przerwania w procku ADUc7026 korzystając z IAR System , Wigglera i H-Jtaga. Wszystko skonfigurowane wg opisu na stronie:
http://www.hjtag.com/download/USER%20MANUAL%20(EN).pdf
W związku, ze korzystam z ARMa z firmy Analog Device nie mam możliwości flashowania pamięci wiec ożywając plik startowy dostępny z examplow IARa programuje tylko i wyłącznie RAM i podpinam go pod IARa i doadaje to programu.
Próba generalna powiodła się pomyślenie i przykładowy programik z migającymi diodkami działa wyśmienicie.
Gorzej jest gdy chce wywołać przerwanie IRQ od timera 0. Bity ustawiają się, w pracy krokowej widać ze licznik zmniejsza wartość (T0VAL) osiągając 0 skacze gdzieś sobie w "pizdu" i muszę resetować procka. Nawet jak dam w wektorze przerwań komendę: T0CLRI = 0; nie widać efektów zatrzymania przerwania.
Zapewne robie coś źle .. stad prośba do tych co się tym również interesują o jakiekolwiek wskazówki.
Poniżej mój prosty kod z przerwaniem:
#define <aduc7026.h>
void fnInterrupt_T0(void)
{
if ((IRQSTA & RTOS_TIMER_BIT) != 0) // Timer1 IRQ?
{
T0CLRI = 0; // Clear Timer IRQ
/* ......
diody i takie tam do testow
.......
*/
}
return ;
}
//=====================================================================================
void fnTimer_T0_Set(void)
{
REMAP = 0x01; // inicjalizacja mapy pamieci RAMu
T0CON = 0xC8 // Enable, presk256, periodic (0x88 dla free-runing)
IRQ = fnInterrupt_T0; // Specify Interrupt Service Rountine
}
//======================================================================================
void fnTimer_T0_En(void)
{
IRQEN = RTOS_TIMER_BIT; // Enable Timer0 IRQ (2bit)
T0LD = 0x40; //0,5 sek przy presk.=256
}
//======================================================================================
void main(void)
{
fnTimer_T0_Set();
fnTimer_T0_En();
while(1)
{
GP4DAT = x; // <- wartisc x z przerwania ..malowazne
}
}
Od jakowegoś czasu próbuje rozgryźć przerwania w procku ADUc7026 korzystając z IAR System , Wigglera i H-Jtaga. Wszystko skonfigurowane wg opisu na stronie:
http://www.hjtag.com/download/USER%20MANUAL%20(EN).pdf
W związku, ze korzystam z ARMa z firmy Analog Device nie mam możliwości flashowania pamięci wiec ożywając plik startowy dostępny z examplow IARa programuje tylko i wyłącznie RAM i podpinam go pod IARa i doadaje to programu.
Próba generalna powiodła się pomyślenie i przykładowy programik z migającymi diodkami działa wyśmienicie.
Gorzej jest gdy chce wywołać przerwanie IRQ od timera 0. Bity ustawiają się, w pracy krokowej widać ze licznik zmniejsza wartość (T0VAL) osiągając 0 skacze gdzieś sobie w "pizdu" i muszę resetować procka. Nawet jak dam w wektorze przerwań komendę: T0CLRI = 0; nie widać efektów zatrzymania przerwania.
Zapewne robie coś źle .. stad prośba do tych co się tym również interesują o jakiekolwiek wskazówki.
Poniżej mój prosty kod z przerwaniem:
#define <aduc7026.h>
void fnInterrupt_T0(void)
{
if ((IRQSTA & RTOS_TIMER_BIT) != 0) // Timer1 IRQ?
{
T0CLRI = 0; // Clear Timer IRQ
/* ......
diody i takie tam do testow
.......
*/
}
return ;
}
//=====================================================================================
void fnTimer_T0_Set(void)
{
REMAP = 0x01; // inicjalizacja mapy pamieci RAMu
T0CON = 0xC8 // Enable, presk256, periodic (0x88 dla free-runing)
IRQ = fnInterrupt_T0; // Specify Interrupt Service Rountine
}
//======================================================================================
void fnTimer_T0_En(void)
{
IRQEN = RTOS_TIMER_BIT; // Enable Timer0 IRQ (2bit)
T0LD = 0x40; //0,5 sek przy presk.=256
}
//======================================================================================
void main(void)
{
fnTimer_T0_Set();
fnTimer_T0_En();
while(1)
{
GP4DAT = x; // <- wartisc x z przerwania ..malowazne
}
}