ivs (07.12.2005 05:20, просмотров: 2849)
Почему может вызываться prefetch abort? Программа работает в RAM У меня AT91SAM7S256 с кварцем 12МГц, компилятор IAR 4.30.
Пример из IAR'а рассчитан на кварц 18,432, PLL работает на частоте ~96МГц, процессор на 48Мгц
// 2 Checking the Main Oscillator Frequency (Optional)
// 3 Setting PLL and divider:
// - div by 5 Fin = 3,6864 =(18,432 / 5)
// - Mul 25+1: Fout = 95,8464 =(3,6864 *26)
// PLLCOUNT pll startup time estimate at : 0.844 ms
// PLLCOUNT 28 = 0.000844 /(1/32768)
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x05) |
(AT91C_CKGR_PLLCOUNT & (28<<8)) |(AT91C_CKGR_MUL & (25<<16)));
...
...
pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2
Так вот с этими настройками все работает. Получается для кварца 12МГц частота PLL=62.4МГц, процессора 31.2МГц.
Если я задаю делитель=0x04, множитель (31+1), при работе вызывается prefetch abort. Это нормальное явление или что-то неправильно?
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x04) |
(AT91C_CKGR_PLLCOUNT & (28<<8)) |
(AT91C_CKGR_MUL & (31<<16)));