Обнаружилась проблема.
Как известно конфинурирование PMC и тактовой частоты в keil происходит в файле SAM7.s
Исходный кварц 16.0 Мгц
Задаю
PLL divider 10
PLL multiplier 60
PLL clock frequency range 80..160Мгц
Clock source selection PLL clock
Prescaler 2
И ожидаю получить ровно 48000000 Гц, а получаю 48800000.

(Смотрю через окно peripherals->PMC) Убейте не понимаю как при этом работает USART пусть даже на 9600.
Раньше думал что это глюк эмулятора, теперь убедился что это не так.
Как это отловилось. Надо было выдать 16 Мгц с помощью PWM.
MCK в качестве тактовой, период 3, период скважности 2 - получаем 16Мгц
Пишем вот такой код
Код
void set_PWM0(void)
{
/* ïîäêëþ÷àåì ê PWM ñèñòåìíóþ ÷àñòîòó è âêëþ÷àåì âûâîä */
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PWMC);
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA23_PWM0);
/* âûáèðàåì èñòî÷íèê òàêòèðîâàíèÿ è leftAligment+íóëåâàÿ ïîëÿðíîñòü */
AT91C_BASE_PWMC_CH0->PWMC_CMR = AT91C_PWMC_CPRE_MCK;
AT91C_BASE_PWMC_CH1->PWMC_CMR = AT91C_PWMC_CPRE_MCK;
AT91C_BASE_PWMC_CH2->PWMC_CMR = AT91C_PWMC_CPRE_MCK;
AT91C_BASE_PWMC_CH3->PWMC_CMR = AT91C_PWMC_CPRE_MCK;
/* êîíôèãóðèðóåì ïåðèîä øèìà è ñâàæíîñòü */
AT91C_BASE_PWMC_CH0->PWMC_CPRDR = 3;
AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 2;
AT91C_BASE_PWMC_CH1->PWMC_CPRDR = 3;
AT91C_BASE_PWMC_CH1->PWMC_CDTYR = 2;
AT91C_BASE_PWMC_CH2->PWMC_CPRDR = 3;
AT91C_BASE_PWMC_CH2->PWMC_CDTYR = 2;
AT91C_BASE_PWMC_CH3->PWMC_CPRDR = 3;
AT91C_BASE_PWMC_CH3->PWMC_CDTYR = 2;
/* âêëþ÷àåì pwm0 */
AT91C_BASE_PWMC->PWMC_IER = AT91C_PWMC_CHID0;
AT91C_BASE_PWMC->PWMC_ENA = AT91C_PWMC_CHID0;
}
Запускаем прошивку сгенерированную IARом с проверенным иницилизационным кодом с такимиже коэффициентами. Лезем цифровым осциллографом. Получаем частоту 15.99999. Вполне годится.
Далее запускаем прошивку сгенерированную в keil. Получаем частоту 16.2665 что дает нам частоту MCK равную 48.7995. чтд.
Вопрос: какого чОрта?
Если кто работает с САМ под кейл отзовитесь. Если не испытывали проблем киньте пожалуста файл SAM7.s на почту или сюда.
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.