Project

General

Profile

R1 PLL » History » Version 3

krufter_multiclet, 08/31/2015 04:40 PM

1 1 krufter_multiclet
h1. PLL и система тактирования R1
2 1 krufter_multiclet
3 1 krufter_multiclet
В составе микропроцессора имеется встроенный генератор для формирования системного сигнала тактирования. 
4 1 krufter_multiclet
Генератор формирует стабильный тактовый сигнал в диапазоне частот от 20 МГц до 300 МГц.
5 1 krufter_multiclet
Синтезатор основан на схеме ФАПЧ с целочисленными коэффициентами деления синтезируемой частоты.
6 3 krufter_multiclet
Частота опорного сигнала от 8 до 16 МГц.
7 1 krufter_multiclet
8 1 krufter_multiclet
Возможна работа без задействования встроенного генератора, используя источник внешнего опорного сигнала тактирования.
9 1 krufter_multiclet
В качестве источника может быть выбран генератор или кварцевый резонатор.
10 1 krufter_multiclet
11 1 krufter_multiclet
Для часов реального времени сделан дополнительный частотный домен на 32 КГц. 
12 1 krufter_multiclet
Хотя блок RTC может работать от внутренней тактовой частоты процессора.
13 1 krufter_multiclet
!tact_sys.jpg!
14 1 krufter_multiclet
15 1 krufter_multiclet
*Рассмотрим основные регистры и параметры:*
16 1 krufter_multiclet
17 1 krufter_multiclet
Для управления блоком PLL используются следующие системные регистры:
18 1 krufter_multiclet
* PLLCR (регистр управления)
19 1 krufter_multiclet
* PLLSTR (регистр состояния)
20 1 krufter_multiclet
* PLLMCR (регистр управления модулем коммутации)
21 1 krufter_multiclet
22 1 krufter_multiclet
Вся настройка PLL сводится к выбору трёх коэффициентов:
23 1 krufter_multiclet
* R (коэффициент деления опорной частоты) - биты RCNT регистра PLLCR
24 1 krufter_multiclet
* N (коэффициент деления внутреннего генератора) - биты NCNT регистра PLLCR
25 1 krufter_multiclet
* K (коэффициент деления выходного делителя) - биты MXVCO регистра PLLCR
26 1 krufter_multiclet
27 1 krufter_multiclet
При выборе коэффициентов необходимо, чтобы они соответствовали условиям работоспособности блока.
28 1 krufter_multiclet
1) 1 МГц < Fcmp < 16 МГц
29 1 krufter_multiclet
2) 20 МГц < Fvco < 340 МГц
30 1 krufter_multiclet
31 1 krufter_multiclet
Fcmp = (1/R)*Fref
32 1 krufter_multiclet
Fvco = N*(1/R)*Fref
33 1 krufter_multiclet
Fout = (1/K)*Fvco
34 1 krufter_multiclet
35 1 krufter_multiclet
Выходная частота рассчитывается по следующей формуле: Fout = Fref*N*(1/R)*(1/K)
36 1 krufter_multiclet
Где Fref - опорная частота (на текущей отладочной плате компании LDM-Systems 8 МГц)
37 1 krufter_multiclet
Fcmp - частота сравнения на входе фазо-частотного детектора
38 1 krufter_multiclet
Fvco - частота внутреннего генератора, управляемого напряжением (ГУН)
39 1 krufter_multiclet
Fout - выходная частота
40 1 krufter_multiclet
41 1 krufter_multiclet
*Порядок работы с блоком PLL:*
42 1 krufter_multiclet
_Включение после сброса или подачи питания_:
43 1 krufter_multiclet
# Установить биты PLLCR (NCNT) и PLLCR (RCNT) в нужное значение
44 1 krufter_multiclet
# Установить бит PLLCR (EN) в "1"
45 1 krufter_multiclet
# Дождаться установки бита PLLSTR (LOCK) в "1"
46 1 krufter_multiclet
# Переключиться на нужную частоту установкой битов PLLCR (MXVCO)
47 1 krufter_multiclet
48 1 krufter_multiclet
_Смена частоты:_
49 1 krufter_multiclet
# Установить третий бит MXVCO, т.е. PLLCR [11] в "0" , чтобы переключиться на Fref
50 1 krufter_multiclet
# Изменить биты PLLCR (NCNT) и PLLCR (RCNT)
51 1 krufter_multiclet
# Установить третий бит MXVCO, т.е. PLLCR [11] в "1" , чтобы переключиться на новую частоту
52 1 krufter_multiclet
53 1 krufter_multiclet
_Выключение блока:_
54 1 krufter_multiclet
# Установить третий бит MXVCO, т.е. PLLCR [11] в "0" , чтобы переключиться на Fref 
55 1 krufter_multiclet
# Дождаться установки бита PLLSTR (REFACTIVE) в "1" 
56 1 krufter_multiclet
# Установить бит PLLCR (EN) в "0"
57 1 krufter_multiclet
58 1 krufter_multiclet
Примечание: Вместо действия [Дождаться установки бита PLLSTR (LOCK) в "1"] 
59 1 krufter_multiclet
можно подождать 1 миллисекунду.
60 1 krufter_multiclet
61 1 krufter_multiclet
*Рассмотрим пример:* 
62 1 krufter_multiclet
63 1 krufter_multiclet
Опорная частота 8 МГц. Требуется выходная частота 30 МГц.
64 1 krufter_multiclet
1)Пусть R = 2, K = 4.По формуле для расчёта Fout находим, что N = 30.
65 1 krufter_multiclet
Тогда на основании пункта "6.0.3 Таблицы выбора коэффициентов R, N, K" Руководства по эксплуатации R1
66 1 krufter_multiclet
находим значения битов RCNT и NCNT:
67 1 krufter_multiclet
RCNT = 100 (бинарный формат)
68 1 krufter_multiclet
NCNT = 11010 (бинарный формат)
69 1 krufter_multiclet
Выставляем 15-бит разрешения работы (En) регистра PLLCR.
70 1 krufter_multiclet
В итоге получаем значение 0xC01A.
71 1 krufter_multiclet
2)Ожидаем установки бита Lock в регистре PLLSTR
72 1 krufter_multiclet
3)На основании пункта "6.0.3 Таблицы выбора коэффициентов R, N, K" Руководства по эксплуатации R1
73 1 krufter_multiclet
находим значения битов MXVCO:
74 1 krufter_multiclet
MXVCO = 1101 (бинарный формат)
75 1 krufter_multiclet
Получаем значение регистра PLLCR = 0xCD1A.
76 1 krufter_multiclet
4)Проверяем условия:
77 1 krufter_multiclet
а) 1 МГц < Fcmp = 4 < 16 МГц, верно
78 1 krufter_multiclet
б) 20 МГц < Fvco = 120 < 340 МГц, верно
79 1 krufter_multiclet
80 2 krufter_multiclet
Полный пример перехода на частоту в 30 МГц на ассемблере:
81 1 krufter_multiclet
<pre>
82 2 krufter_multiclet
<code class="php">
83 1 krufter_multiclet
;переход на частоту 30МГц
84 1 krufter_multiclet
pll_30:
85 1 krufter_multiclet
    getl 0xC01A
86 1 krufter_multiclet
    setl #PLLCR, @1
87 1 krufter_multiclet
    jmp pll_30_lock
88 1 krufter_multiclet
complete
89 1 krufter_multiclet
90 1 krufter_multiclet
pll_30_lock:
91 1 krufter_multiclet
    getl #PLLSTR
92 1 krufter_multiclet
    getl 1
93 1 krufter_multiclet
    and @1, @2
94 1 krufter_multiclet
    je @1, pll_30_lock
95 1 krufter_multiclet
    jne @2, pll_30_set
96 1 krufter_multiclet
complete
97 1 krufter_multiclet
98 1 krufter_multiclet
pll_30_set:
99 1 krufter_multiclet
     getl 0xCD1A
100 1 krufter_multiclet
     setl #PLLCR, @1
101 1 krufter_multiclet
     jmp pre_reconf
102 1 krufter_multiclet
complete
103 2 krufter_multiclet
</code>
104 2 krufter_multiclet
</pre>
105 2 krufter_multiclet
106 2 krufter_multiclet
Этот же пример на Си:
107 2 krufter_multiclet
<pre>
108 2 krufter_multiclet
<code class="c">
109 2 krufter_multiclet
void asm_set_PLL(unsigned char RCNT, unsigned char NCNT, unsigned char MXVCO, unsigned char Enable);
110 2 krufter_multiclet
111 2 krufter_multiclet
main()
112 2 krufter_multiclet
{
113 2 krufter_multiclet
    //переход на частоту 30МГц
114 2 krufter_multiclet
    asm_set_PLL(0x4, 0x1A, 0xD, 1);
115 2 krufter_multiclet
}
116 1 krufter_multiclet
</code>
117 1 krufter_multiclet
</pre>