R1 PLL » History » Version 4
krufter_multiclet, 08/31/2015 04:41 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> |
118 | 4 | krufter_multiclet | |
119 | 4 | krufter_multiclet | Примечание: для расчета коэффициентов PLL у нас разработана специальная утилита, которая будет доступна на сайте для расчета коэффициентов онлайн. |