Система тактирования, PLL и управление режимами энергопотребления.

В процессе работы, во время непосредственной прошивки ADuC7024 случайно дёрнул USB кабелем, т.е. нарушил процесс обмена. Уж не знаю, что в чипе произошло, но оживить мне его не удалось — пришлось впаивать новый 🙁 

Система тактирования.
Источниками тактирования микроконтроллера ADuC7024 могут быть:
1. Внутренний осциллятор 32768 Гц.
2. Внешний кварцевый генератор 32768 Гц.
3. Внешний источник тактового сигнала ECLK до 44 МГц.
Ниже – перевод даташита для пояснения работы системы. Полезно иметь его перед глазами, открытым на стр. 54, чтобы исправлять мои стилистические и грамматические ошибки вольного перевода…
Микроконтроллер ADuC7024 имеет встроенный 32768 Гц +/- 3% осциллятор, делитель частоты и систему PLL (по-русски ФАПЧ), выполняющую функцию умножения частоты. PLL имеет коэффициент 1275 и применяется к встроенному осциллятору или к внешнему кварцу такой же частоты. В результате перемножения получается стабильная частота 41,78 МГц (UCLK) для функционирования систем микроконтроллера. Ядро микроконтроллера может работать на указанной частоте, или, для режима экономного энергопотребления, использовать частоты, делённые от исходной на число кратное степени двойки (2^CD). Частота ядра микроконтроллера равная UCLK/2^CD на блок-схеме определена как HCLK. По умолчанию коэффициент делителя CD равен 3. Таким образом,
HCLK = 41,78/2^3=41,78/8=5,22 МГц. Как уже и упоминалось, источником тактирующей частоты для ядра может быть также внешний сигнал, подаваемый на вывод ECLK. Упомянутый ECLK может использоваться и для вывода тактовой частоты ядра, когда используется встроенный осциллятор или внешний кварц. Заметьте, что в случае использования вывода тактовой частоты с ECLK для тактирования внешних устройств, нужно обязательно использовать внешний буфер.
Clocking system ADuC7024 Выбор источника тактового сигнала осуществляется регистром PLLCON. По умолчанию используется встроенный осциллятор.
Register PLLCONДалее по даташиту идёт пример переключения на внешний кварц. Мы его разберём и реализуем, контролируя частоту на выводе ECLK с помощью осциллографа.
Выбор внешнего кварцевого генератора в качестве источника UCLK.
Для переключения на внешний кварц, пользователь (программист — эмбеддер) должен сделать следующее:
1. Разрешить прерывание Таймера 2 и сконфигурировать его для периода переполнения > 120 мкс.
2. Далее записать последовательность в регистр PLLCON, устанавливая MDCLK-биты в 01 и сбрасывая бит OSEL.
3. Перевести микроконтроллер в режим NAP последующей записью правильной последовательности в регистр POWCON.
Когда произойдёт прерывание от Таймера 2, источник такта для контроллера переключится на внешний кварц.
Пример кода также взят с даташита. Читаем комментарии.

#include //header file
 
void delay_us (unsigned long pause)//delay function
{
   unsigned long i; //counter  
 
   for(i=pause*6;i>0;i--);//cycle decrement
}
void IRQ_Handler (void) __irq//interrupt function
{
	  IRQCLR = 0x10;//disable interrupts Timer2
    T2CON &= ~(1< <7);	//disable Timer2
}
 
int main (void)//main function
{ 
  unsigned long t2val_old;//intermediate variable
 
	//setting Р0.7 as ECLK (core clock)
    GP0CON |= 0x10000000;//
    GP0DAT |= 0x80000000;//
  //---------------------------------------------------
	//setting Р4.6 as GPIO (red LED)
    GP4CON |= 0x00000000;//
    GP4DAT |= 0x40000000;//
    GP4SET |= (1<<22);// 
   //---------------------------------------------------   
    delay_us(0x0009FFFF);//We observe with the oscilloscope the default core   
    //frequency 5,22 MHz 
    //switch to an external crystal 32 kHz (datasheet page 55 Example source code)        
    t2val_old = T2VAL;//
    T2LD = 5;// 
    T2CON = 0x480;// 
    while ((T2VAL == t2val_old) || (T2VAL > 3))//
    IRQEN = 0x10;//
    PLLKEY1 = 0xAA;//
    PLLCON = 0x01;//
    PLLKEY2 = 0x55;//
    POWKEY1 = 0x01;//
    POWCON = 0x20;//
    POWKEY2 = 0xF4;//
		for(;;)//loop
		{
			 delay_us(0xFFFFF);//blinking red LED after switch to an external crystal
			 GP4CLR |= (1< <22);
			 delay_us(0xFFFFF);
			 GP4SET |= (1<<22);
		}
}

Программа настраивает вывод Р0.7 как выход ECLK  для контроля частоты ядра осциллографом,и вывод Р4.6 как выход для управления красным служебным светодиодом. Также перед главной функцией описываем стандартную функцию задержки на декременте некой величины и функцию обработки прерывания. В прерывания я сейчас углубляться не буду — сделайте по образцу, а в подключенном к проекту файле irq_arm.c — закомментируйте объявление и непосредственно функцию IRQ_Handler, иначе компилятор выдаст ошибку о множественном объявлении данной функции.
В главной функции я установил задержку:
delay_us(0x0009FFFF);//We observe with the oscilloscope the default core frequency 5,22 MHz
Благодаря ей осциллографом в течении приблизительно 5-6 секунд наблюдаем дефолтную частоту 5,22 МГц, которую устанавливает старт-аповский ассемблерный файл.
default clock ADuC7024Затем с помощью примера кода из даташита переводим микроконтроллер в режим тактирования от внешнего кварца со значением CD = 0, т.е. без делителя после ФАПЧ (41,78 МГц).
external clock ADuC7024
Режим пониженного энергопотребления включается регистром POWCON:
Register POWCONВремя выхода из режима пониженного энергопотребления и способы такого выхода показаны в таблице 57 на стр. 55 даташита. Потребление контроллера в различных режимах пониженного энергопотребления показаны в таблице 58 на той же странице.
P.S. опыты работы с аналоговой периферией микроконтроллера ADuC7024 показали очень хорошие результаты. В ближайшее время опубликую.

Запись опубликована в рубрике ARM, Микроконтроллерный конструктор, Разное с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован.