Hi,
 
At what condition MPC7447A will generate Decrementer exception? From the user manual, I just found two conditions: value in DEC register reach to 0 (at next cycle, it will be 0xFFFFFFFF, e.g. the MSB will change from 0 to 1), and MSR[EE] (bit 16) should be 1.
 
All these two conditions are there, but I can't see the decrementer exception run. I cleaned memory section 0x900 ~ 0xa00 to all zeros and erase flash section 0xFFF00000 ~ 0xFFFFFFFF to all 0xFFs. MSR = 0xa030 (MSR[EE] = 1). Nothing happened, shell still there and commands can work as usrual. Even I set DEC register to 0 in the shell, still can't crash CPU.
 
Following are data in 0x900:
00000900: 7e9043a6 7eb143a6 7e800026 3aa1ff00    ~.C.~.C.~..&:...
00000910: 929500a8 92d50068 92f5006c 7e9042a6    .......h...l~.B.
00000920: 92950060 7ed142a6 92d50064 7e8802a6    ...`~.B....d~...
00000930: 929500a0 7ec902a6 92d5009c 7e8102a6    ....~.......~...
00000940: 929500a4 7eda02a6 7efb02a6 90150010    ....~...~.......
00000950: 90350014 90550018 90350000 7ea1ab78    .5...U...5..~..x
00000960: 9075001c 90950020 90b50024 90d50028    .u..... ...$...(
00000970: 806e8014 7c6803a6 38610010 3a801002    .n..|h..8a..:...
00000980: 52f40672 4e800021 00fcf4dc 00fbb2a8    R..rN..!........
 
and the data in 0x988 is the ISR function pointer. I can use go command to run this ISR (go 0xFCF4DC), and ISR runs as what I want.
 
following are data in 0xFFF00900:
fff00900: 7e9043a6 7eb143a6 7e800026 3aa1ff00    ~.C.~.C.~..&:...
fff00910: 929500a8 92d50068 92f5006c 7e9042a6    .......h...l~.B.
fff00920: 92950060 7ed142a6 92d50064 7e8802a6    ...`~.B....d~...
fff00930: 929500a0 7ec902a6 92d5009c 7e8102a6    ....~.......~...
fff00940: 929500a4 7eda02a6 7efb02a6 90150010    ....~...~.......
fff00950: 90350014 90550018 90350000 7ea1ab78    .5...U...5..~..x
fff00960: 9075001c 90950020 90b50024 90d50028    .u..... ...$...(
fff00970: 806e8014 7c6803a6 38610010 3a801002    .n..|h..8a..:...
fff00980: 52f40672 4e800021 000164dc 000022a8    R..rN..!..d...".
 
same as data in 0x900, except 0x988 and 0x98c. seems right.
 
What else can I do?
 
wyu

 
On 11/14/05, Yu Weiping <wyu120@gmail.com> wrote:
I think Decrementer runs because every time I read the DEC register (SPR 22), different value returned.
 
In the timer_interrupt, set_dec(decrementer_count) was called to reload the value of DEC register. I also tried to change decrementer_count value to 100, and then the value of DEC register I read out will always smaller than 100 (I tried many times). if I mask the call of set_dec in timer_interrupt, then I can read out big values (such as 0xFxxxxxxx, 0xExxxxxxx) for the DEC register. From this test, I guess the timer_interrupt was called after the exception generated. But the value of timestamp always be 0. It's hard to believe since in timer_interrupt, after calling set_dec, timestamp++ should be excuted.

 
On 11/14/05, bbosch@iphase.com < bbosch@iphase.com> wrote:
I don't have the data sheet in front of me at the moment, but I seem
to recall that the 7447 has a hardware pin which must be strapped
properly to enable the decrementer.  U-Boot assumes the hardware is
configured this way.  Without the proper pull up or down resistor, the
decrementer just does not run.

--Brad


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users