Я пытался запрограммировать регистр PMC_PCK0 также, как и все остальные регистры PMC. Но если все регистры PMC описаны в структуре AT91PS_PMC, а также в структуре AT91PS_SYS, то регистры PMC_PCK0,1,2 ни там, ни там не описаны. И при компиляции выдается ошибка "Error[Pe136]: struct "_AT91S_PMC" has no field "PMC_PCK0" C:\MMS_2.cpp 47".
Ниже приведен кусок программы.
#include <stdio.h>
#include <ioat91sam7s256.h>
AT91PS_PMC pmc = AT91C_BASE_PMC;
void clock_ini()
{
pmc->PMC_PCK0=0xF;
}
Причем поле PMC_PCK0 я не неашел ни в одной структуре.
Как мне запрограммировать регистр PMC_PCK0?
Заранее благодарен.
kichkine
Mar 20 2007, 10:21
В той структуре есть массив PMC_PCKR[0]. У атмела не все названия регистров из даташита соответствуют идентификаторам в ихних файлах - заголовках (at91sam7s256.h).
Там же есть готовый указатель AT91C_PMC_PCKR. Не проверял, но надо понимать на рег. PMC_PCK0, остальные, должно быть +1 и +2.
А еще можно из datasheet взять адрес и вписать его в программу.
Сергей Борщ
Mar 20 2007, 13:25
Цитата(kichkine @ Mar 20 2007, 09:21)

В той структуре есть массив PMC_PCKR[0]. У атмела не все названия регистров из даташита соответствуют идентификаторам в ихних файлах - заголовках (at91sam7s256.h).
угу.
Код
// outputs: minimum
AT91C_BASE_PMC->PMC_PCKR[0] = AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK; // Programmable clock output0
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK; // Programmable clock output1
AT91C_BASE_PMC->PMC_PCKR[2] = AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK; // Programmable clock output2