ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 14.01.2021
Просмотров: 9180
Скачиваний: 82
СОДЕРЖАНИЕ
1.1Рекомендации по чтению руководства
1.3Рекомендовано для прочтения
3.4Арифметико-логическое устройство
3.4.1Аппаратное умножающее устройство
3.6Временная диаграмма выполнения инструкций
3.10Регистры RAMP и расширенной косвенной адресации
3.10.1Регистры RAMPX, RAMPY и RAMPZ
3.10.3Регистр расширенной косвенной адресации EIND
3.11Доступ к 16-битным регистрам
3.11.1Доступ к 24- и 32-битным регистрам
3.12Защита от изменения конфигурации
3.12.1Последовательность записи защищенных регистров ввода-вывода
3.12.2Последовательность выполнения защищенных инструкций SPM/LPM
3.13Fuse-биты для блокировки изменений
3.14.1Регистр защиты от изменения конфигурации CCP
4.3.1Сектор прикладной программы
4.3.2Сектор таблицы приложения
4.3.4Сигнатурный код производителя и ячейки калибровки
4.3.4.1Сигнатурный код пользователя
4.7.1Доступ к EEPROM в пространстве памяти данных
4.8.1Регистры ввода-вывода общего назначения
4.10Память данных и арбитраж шины
4.11Временные характеристики доступа к памяти
4.12Идентификация микроконтроллера
4.14Защита памяти ввода-вывода
4.15Описание регистров контроллера NVM энергонезависимой памяти
4.16Описание регистров - Fuse- и Lock-биты
4.16.1FUSEBYTE0 - конфигурационный байт 0 энергонезависимой памяти - JTAG-идентификатор пользователя
4.17Описание регистров - сигнатурный код производителя
4.17.1RCOSC2M - регистр калибровочного значения внутреннего генератора частоты 2 МГц
4.18Описание регистров - память ввода-вывода общего назначения
4.18.1GPIORn - регистр ввода-вывода n общего назначения
4.19Описание регистров внешней памяти
4.20Описание регистров управления МК
4.20.1DEVID0 - регистр 0 идентификатора МК
4.21Обзор регистров контроллера энергонезависимой памяти
4.22Обзор регистров Fuse- и Lock-бит
4.23Обзор регистров кода сигнатуры производителя
4.24Обзор регистров ввода-вывода общего назначения
4.25Обзор регистров управления микроконтроллером
4.26Векторы прерываний контроллера энергонезависимой памяти
5Контроллер прямого доступа к памяти (DMA-контроллер)
5.13Описание регистров DMA-контроллера
5.13.1CTRL - регистр управления DMA
5.13.2INTFLAGS - регистр статуса прерываний DMA
5.13.3STATUS - Регистр статуса DMA
5.13.4TEMPH - старший байт временного регистра DMTEMP
5.13.5TEMPL - младший байт временного регистра DMTEMP
5.14Описание регистров DMA-канала
5.14.1CTRLA - регистр А управления DMA-каналом
5.14.2CTRLB - регистр B управления DMA-каналом
5.14.3ADDRCTRL - регистр управления адресом DMA-канала
5.14.4TRIGSRC - источник запуска DMA-канала
5.14.5TRFCNTH - старший регистр счетчика байт при передаче блока по DMA-каналу
5.14.6TRFCNTL - младший регистр счетчика байт при передаче блока по DMA-каналу
5.14.7REPCNT - регистр счетчика повторов в DMA-канале
5.14.8SRCADDR2 - регистр 2 адреса источника DMA-канала
5.14.9SRCADDR1 - регистр 1 адреса источника DMA-канала
5.14.10SRCADDR0 - регистр 0 адреса источника DMA-канала
5.14.11DESTADDR2 - регистр 2 адреса получателя DMA-канала
5.14.12DESTADDR1 - регистр 1 адреса получателя DMA-канала
5.14.13DESTADDR0 - регистр 0 адреса получателя DMA-канала
5.15Обзор регистров DMA-контроллера
5.16Обзор регистров DMA-канала
5.17Обзор векторов прерываний DMA
5.18Использование DMA микропроцессора Xmega
5.18.3Блочная передача и режим повтора
5.18.7Запуск передачи и режим однократного запуска
5.18.9Доступ контроллера DMA к многобайтным регистрам
5.18.10Дополнительные возможности
6.5Временные характеристики передачи событий
6.7.1Работа квадратурного декодера
6.7.2Настройка квадратурного декодера
6.8.1CHnMUX - регистр мультиплексора канала события n
6.8.2CHnCTRL - Регистр управления каналом события n
6.8.3STROBE - строб-регистр события
6.8.4DATA - регистр данных события
7Системная синхронизация и источники синхронизации
7.3Распределение сигналов синхронизации
7.3.1Сигнал системной синхронизации- CLKsys
7.3.2Сигнал синхронизации ЦПУ - CLKcpu
7.3.3Сигнал синхронизации УВВ - CLKper
7.3.4Сигналы синхронизации УВВ с удвоенной/учетверенной частотой – CLKper2/CLKper4
7.3.5Асинхронный сигнал синхронизации - CLKasy
7.4.1.1Сверхмаломощный генератор частоты 32 кГц (ULP-генератор)
7.4.1.2Внутренний калиброванный генератор частоты 32.768 кГц
7.4.1.3Внутренний генератор частоты 32 МГц с возможностью автоматической калибровки
7.4.1.4Внутренний генератор частоты 2 МГц с возможностью автоматической калибровки
7.4.2Внешние источники синхронизации
7.4.2.1Кварцевый генератор частоты 0.4…16 МГц
7.4.2.2Вход внешней синхронизации
7.4.2.3Кварцевый генератор частоты 32 кГц
7.5Настройка системной синхронизации и предделителей частоты
7.6Блок PLL с коэффициентом умножения от 1 до 31
7.7Блоки DFLL 2- и 32-мегагерцевых генераторов
7.8Функция обнаружения отказа внешнего источника синхронизации
7.9Описание регистров системы синхронизации
7.9.1CTRL - регистр управления системной синхронизацией
7.10Описание регистров генераторов
7.10.1CTRL - регистр управления генераторами
7.11Описание регистров блоков DFLL32M/DFLL2M
7.11.1CTRL - регистр управления блоком DFLL
7.12Обзор регистров системы синхронизации
7.13Обзор регистров генераторов
7.14Обзор регистров блоков DFLL32M/DFLL2M
7.15Обзор вектора прерывания при отказе кварцевого генератора
8Управление энергопотреблением и экономичные режимы
8.4Регистры снижения энергопотребления
8.5Описание регистров управления экономичными режимами
8.5.1CTRL- регистр управления экономичными режимами работы
8.6Описание регистров снижения энергопотребления
8.6.1PRGEN - общий регистр снижения энергопотребления
8.6.2PRPA/B - регистр снижения энергопотребления порта А/В
8.6.38.6.3. PRPC/D/E/F - регистр снижения энергопотребления порта C/D/E/F
8.7Обзор регистров управления экономичными режимами работы
8.8Обзор регистров управления энергопотреблением
9.4.3Сброс от детектора просадки питания
9.4.5Сброс сторожевым таймером
9.4.7Сброс через интерфейс программирования и отладки
9.5.1STATUS - Регистр статуса сброса
9.5.2CTRL - регистр управления сбросом
10Система резервного батарейного питания
10.3Модуль с резервированием питания
10.3.1Обнаружение подачи питания резервного батарейного питания
10.3.2Супервизор батарейного питания
10.4Исчезновение основного питания
10.5Основной сброс и последовательность запуска
10.5.1Резервирование питания разрешено
10.5.2Резервирование питания не разрешено и сбой в его работе
10.6.1CTRL: регистр управления резервированием питания
10.6.2STATUS: регистр статуса модуля с резервированием питания
10.6.3BACKUP0: регистр 0 с резервным батарейным питанием
11.5Синхронизация сторожевого таймера
11.6Защита и блокировка конфигурации
11.7.1CTRL - регистр управления сторожевым таймером
11.7.2WINCTRL - регистр управления оконным режимом
11.7.3STATUS - регистр статуса сторожевого таймера
12Прерывания и программируемый многоуровневый контроллер прерываний
12.4.1Немаскируемые прерывания (NMI)
12.4.2Задержка реагирования на прерывание
12.6.1Статическая приоритезация
12.6.2Динамическая приоритезация
12.7Перемещение векторов прерываний между сектором прикладной программы и загрузочным сектором
12.8.1STATUS - регистр статуса PMIC-контроллера
12.8.2INTPRI - регистр приоритета прерываний PMIC Priority Register
12.8.3CTRL - регистр управления PMIC-контроллером
13.3Использование линий ввода-вывода
13.4Настройка линий ввода-вывода
13.4.2Подтягивание к минусу питания
13.4.3Подтягивание к плюсу питания
13.6Настройка параметров контроля входа
13.8Генерация событий портом ввода-вывода
13.9Альтернативные функции портов
13.10Управление скоростью фронтов
13.11Вывод синхронизации и событий
13.12Мультипортовая конфигурация
13.14Описание регистров портов
13.14.1DIR - регистр направления
13.14.2DIRSET - регистр установки бит направления
13.14.3DIRCLR - регистр сброса бит направления
13.14.4DIRTGL - регистр инвертирования бита направления
13.14.5OUT - регистр вывода данных
13.14.6OUTSET - регистр установки выходов порта
13.14.7OUTCLR - регистр сброса выходов порта
13.14.8OUTTGL - регистр инвертирования выходов порта
13.14.9IN - регистр ввода данных
13.14.10INTCTRL - регистр управления прерываниями
13.14.11INT0MASK - регистр маски прерывания 0
13.14.12INT1MASK - регистр маски прерывания 1
13.14.13INTFLAGS - регистр флагов прерывания
13.14.14PINnCTRL - конфигурационный регистр линии n
13.15Описание регистров мультипортовой конфигурации
13.15.1MPCMASK - регистр маски одновременной и одинаковой конфигурации нескольких линий в/в
13.15.2VPCTRLA - регистр А управлению связью с виртуальными портами
13.15.3VPCTRLB - регистр В управлению связью с виртуальными портами
13.15.4CLKEVOUT - регистр вывода сигналов событий и синхронизации
13.16Описание регистров виртуальных портов
13.16.1DIR - регистр направления
13.16.2OUT - регистр вывода данных
13.16.3IN - регистр ввода данных
13.16.4INTFLAGS - регистр флагов прерываний
13.18Обзор регистров мультипортовой конфигурации
13.19Обзор регистров виртуальных портов
13.20Обзор векторов прерываний портов ввода-вывода
14.4Источники синхронизации и событий
14.6.2Управляемый событиями режим работы
14.7.3Захват длительности импульса
14.7.432-битный входной захват
14.8.2Генерация частотных сигналов (FRQ)
14.8.3Генерация ШИМ сигнала в режиме PWM с однонаправленным счетом
14.8.4Генерация ШИМ сигнала в режиме PWM с двунаправленным счетом
14.8.5Вывод сигналов генератора импульсов на линии порта
14.12.1CTRLA - регистр управления А
14.12.2CTRLB - регистр управления В
14.12.3CTRLC - регистр управления C
14.12.4CTRLD - регистр управления D
14.12.5CTRLE - регистр управления E
14.12.6INTCTRLA - регистр А разрешения прерываний
14.12.7INTCTRLB - регистр В разрешения прерываний
14.12.8CTRLFCLR/CTRLFSET - сброс/установка регистра управления F
14.12.9CTRLGCLR/CTRLGSET - сброс/установка регистра управления G
14.12.10INTFLAGS - регистр флага прерывания
14.12.11TEMP - временный регистр для 16-битного доступа
14.12.12CNTH - старший регистр счетчика
14.12.13CNTL - младший регистр счетчика
14.12.14PERH - старший регистр периода
14.12.15PERL - младший регистр периода
14.12.16CCxH - старший регистр n захвата/сравнения
14.12.17CCxL - младший регистр n захвата/сравнения
14.12.18PERBUFH - старший буферный регистр периода таймера-счетчика
14.12.19PERBUFL - младший буферный регистр периода таймера-счетчика
14.12.20CCxBUFH - старший регистр буфера захвата или сравнения х
14.12.21CCxBUFL - младший регистр буфера захвата или сравнения x
14.14Обзор векторов прерываний
15Блок расширения возможностей генерации импульсов AWeX
15.4Генерация паузы неперекрытия
15.6.2Режимы восстановления нормальной работы
15.6.4Взаимодействие со встроенной отладочной системой
15.7.1CTRL - Регистр управления
15.7.2FDEMASK - регистр маски событий для обнаружения повреждения
15.7.3FDCTRL - регистр управления обнаружением отказа
15.7.4STATUS - регистр статуса
15.7.5DTBOTH - регистр общего доступа к паузам неперекрытия
15.7.6DTBOTHBUF - регистр общего доступа к буферным регистрам пауз неперекрытия
15.7.7DTLS - регистр паузы неперекрытия нижнего уровня
15.7.8DTHS - регистр паузы неперекрытия верхнего уровня
15.7.9DTLSBUF - буферный регистр паузы неперекрытия нижнего уровня
15.7.10DTHSBUF - буферный регистр паузы неперекрытия верхнего уровня
15.7.11OUTOVEN - регистр разрешения перекрытия выходов
16Блок расширения разрешающей способности
16.1Отличительные особенности:
16.3.1CTRLA - регистр управления А блока Hi-Res
17Счетчик реального времени RTC
17.3.1CTRL - регистр управления счетчиком реального времени
17.3.2STATUS - регистр статуса счетчик реального времени
17.3.3INTCTRL - регистр управления прерываниями счетчика реального времени
17.3.4INTFLAGS - регистр флагов прерываний счетчика реального времени
17.3.5TEMP - временный регистр счетчика реального времени
17.3.6CNTH - старший регистр счетчика реального времени
17.3.7CNTL - младший регистр счетчика реального времени
17.3.8PERH - старший регистр периода счетчика реального времени
17.3.9PERL - младший регистр периода счетчика реального времени
17.3.10COMPH - старший регистр сравнения счетчика реального времени
17.3.11COMPL - младший регистр сравнения счетчика реального времени
1832-битный счетчик реального времени RTC32
18.3.1CTRL - регистр управления
18.3.2SYNCCTRL - регистр управления/статуса синхронизации
18.3.3INTCTRL - регистр управления прерываниями
18.3.4INTFLAGS - регистр флагов прерываний
18.3.5CNT3 - регистр счетчика 3
18.3.6CNT2 - регистр счетчика 2
18.3.7CNT1 - регистр счетчика 1
18.3.8CNT0 - регистр счетчика 0
18.3.9PER3 - регистр периода 3
18.3.10PER2 - регистр периода 2
18.3.11PER1 - регистр периода 1
18.3.12PER0 - регистр периода 0
18.3.13COMP3 - регистр сравнения 3
18.3.14COMP2 - регистр сравнения 2
18.3.15COMP1 - регистр сравнения 1
18.3.16COMP0 - регистр сравнения 0
19.3.1Электрические характеристики
19.3.7Синхронизация и задержка импульсов синхронизации
19.3.9Синхронизация ведущих устройств
19.4Логика контроля состояния шины TWI
19.5Работа ведущего модуля TWI
19.5.1.1Сценарий M1: арбитраж проигран или ошибка во время передачи пакета адреса
19.5.1.2Сценарий M2: Передача пакета адреса завершена, но он не подтвержден подчиненным устройством
19.5.1.3Сценарий M3: Завершена передача пакета адреса с равным нулю битом направления
19.5.1.4Сценарий M4: Завершена передача пакета адреса с равным единице битом направления
19.6Работа подчиненного модуля TWI
19.6.1.1Сценарий 1: принят пакета адреса с равным единице битом направления
19.6.1.2Сценарий 2: принят пакет адреса с равным нулю битом направления
19.6.1.4Сценарий 4: принято условие STOP
19.7Разрешение работы интерфейса внешнего драйвера
19.8Описание регистров модуля TWI
19.8.1CTRL - общий регистр управления модуля TWI
19.9Описание регистров ведущего модуля TWI
19.9.1CTRLA - регистр управления А ведущего модуля TWI
19.9.2CTRLB - регистр управления В ведущего модуля TWI
19.9.3CTRLC - регистр управления С ведущего модуля TWI
19.9.4STATUS - регистр статуса ведущего устройства
19.10Ftwi = Fsys/[2(5+BAUD)], Гц (1)
19.11BAUD = (Fsys/2 * Ftwi) - 5 (2)
19.11.1ADDR - регистр адреса ведущего модуля TWI
19.11.2DATA - регистр данных ведущего модуля TWI
19.12Описание регистров подчиненного модуля TWI
19.12.1CTRLA - регистр управления А подчиненного модуля TWI
19.12.2CTRLB - регистр управления В починенным модулем TWI
19.12.3STATUS- регистр статуса подчиненного модуля TWI
19.12.4ADDR - регистр адреса подчиненного модуля TWI
19.12.6ADDRMASK - регистр маски адреса подчиненного модуля TWI
19.13Обзор регистров модуля TWI
19.14Обзор регистров ведущего модуля TWI
19.15Обзор регистров подчиненного модуля TWI
19.15.1Обзор векторов прерываний
20Последовательный интерфейс SPI
20.7.1CTRL - регистр управления SPI
20.7.2INTCTRL - регистр управления прерываниями SPI
20.7.3STATUS - регистр статуса модуля SPI
20.7.4DATA - регистр данных SPI
20.9Векторы прерываний модуля SPI
21.3.1Внутренняя генерация синхронизации дробным генератором скорости
21.3.3Работа с удвоенной скоростью (CLK2X)
21.3.5Генерация синхронизации для шины SPI
21.4.1Вычисление бита паритета
21.4.2SPI-совместимые форматы посылок
21.6Отправка данных передатчиком USART
21.7Получение данных приемником USART
21.7.5Очистка буфера приемника
21.8.1Восстановление синхронизации
21.8.3Рабочий диапазон асинхронного приемника
21.9Дробная генерация скорости
21.10Работа USART в ведущем SPI-совместимом режиме
21.11Сравнение режима SPI модуля USART с модулем SPI
21.12Режим мультипроцессорной связи
21.12.1Использование режима мультипроцессорной связи
21.15.1DATA - регистр ввода-вывода данных модуля USART
21.15.2STATUS - регистр статуса USART
21.15.3CTRLA - регистр управления А модуля USART
21.15.4CTRLB - регистр управления В модуля USART
21.15.5CTRLC - регистр управления С модуля USART
21.16Таблица 21.6. Настройка бит CMODE
21.16.1BAUDCTRLA - регистр скорости USART
21.16.2BAUDCTRLB - регистр скорости USART
21.17.1Описание регистров модуля USART
21.17.2Описание регистров модуля USART, работающего в режиме ведущего интерфейса SPI
21.18Обзор векторов прерываний
22Модуль инфракрасной связи IRCOM
22.322.2.1. Фильтрация системы событий
22.4.1TXPLCTRL - регистр управления длительностью импульса передатчика IRCOM
22.4.2RXPLCTRL - регистр управления длительностью импульса приемника IRCOM
22.4.3CTRL - регистр управления IRCOM
23.1.1Отличительные особенности
23.4.1Память ключа и память состояния
23.5Обзор регистров модуля AES
23.5.1CTRL - регистр управления модулем AES
23.5.2STATUS - регистр статуса модуля AES
23.5.3STATE - регистр состояния модуля AES
23.5.4KEY - регистр ключа модуля AES
23.5.5INTCTRL - регистр управления прерыванием модуля AES
23.6Обзор регистров модуля AES
23.7Вектор прерываний модуля AES
24.3.2Размер адресного пространства
24.3.3Выхода выбора микросхем в качестве адресных линий
24.4Настройка линий ввода-вывода
24.6.1Работа без мультиплексирования
24.6.2Мультиплексирование байтов адреса 0 и 1
24.6.3Мультиплексирование байтов адреса 0 и 2
24.6.4Мультиплексирование байтов адреса 0, 1 и 2
24.6.5Требования к регистрам фиксации адреса
24.7Совместная работа со SRAM LPC-типа
24.7.1Мультиплексирование данных с байтом адреса 0
24.7.2Мультиплексирование данных с байтами адреса 0 и 1
24.8.23-портовая конфигурация интерфейса EBI
24.8.34-портовая конфигурация интерфейса EBI
24.9Комбинированное подключение к SRAM и SDRAM
24.10Временная диаграмма интерфейса EBI
24.10.1.1Режим SRAM без мультиплексирования
24.10.1.2Режим SRAM с мультиплексированием адреса и синхронизацией 1х
24.10.1.3Режим SRAM с мультиплексированием адреса и синхронизацией 2х
24.10.1.4Режим SRAM LPC с мультиплексированием адреса/данных и синхронизацией 1x
24.10.1.5Режим SRAM LPC с мультиплексированием адреса/данных и синхронизацией 2x
24.10.2.14-битный режим SDRAM с синхронизацией 1х
24.10.2.28-битный режим SDRAM с синхронизацией 2х
24.11Описание регистров модуля EBI
24.11.1CTRL - регистр управления модулем EBI
24.11.2SDRAMCTRLA - регистр A управления SDRAM
24.11.3REFRESH - регистр периода регенерации SDRAM
24.11.4INITDLY - регистр задержки инициализации SDRAM
24.11.5SDRAMCTRLB - регистр В управления SDRAM
24.11.6SDRAMCTRLC - регистр С управления SDRAM
24.12Описание регистров управления выбором микросхем
24.12.1CTRLA - регистр А управления выбором микросхемы
24.12.2CTRLB (SRAM) - регистр В управления выбором микросхемы
24.12.3CTRLB (SDRAM) - регистр В управления выбором микросхемы
24.12.4BASEADDR - регистр базового адреса выбора микросхемы
24.13Обзор регистров модуля EBI
24.14Обзор регистров управления выбором микросхем
25Аналогово-цифровой преобразователь ADC
25.3.2Дифференциальный вход с усилением
25.9Синхронизация и временная диаграмма преобразования АЦП
25.9.1Одиночное преобразование без усиления
25.9.2Одиночное преобразование с усилением
25.9.3Одиночные преобразования в двух каналах АЦП
25.9.4Одиночные преобразования в двух каналах АЦП с усилением в канале 0
25.9.5Одиночные преобразования в двух каналах АЦП с усилением в канале 1
25.9.6Автоматический режим с усилением в двух каналах АЦП
25.15Описание регистров модуля АЦП
25.15.1CTRLA - регистр управления А модуля АЦП
25.15.2CTRLB - регистр управления В модуля АЦП
25.15.3REFCTRL - регистр управления опорным напряжением АЦП
25.15.4EVCTRL - регистр управления событиями АЦП
25.15.5PRESCALER - регистр предделителя синхронизации АЦП
25.15.6INTFLAGS - регистр флагов прерываний АЦП
25.15.7TEMP - временный регистр АЦП
25.15.8CALL - регистр младшего байта калибровочного значения АЦП
25.15.9CALH - регистр старшего байта калибровочного значения АЦП
25.15.10CHnRESH - старший регистр результата канала АЦП n
25.15.10.112-битный режим с левым выравниванием
25.15.10.212-битный режим с правым выравниванием
25.15.11CHnRESL - младший регистр результата канала АЦП n
25.15.11.212-битный режим с левым выравниванием
25.15.12CMPH - старший регистр сравнения модуля АЦП
25.15.13CMPL - младший регистр сравнения модуля АЦП
25.16Описание регистра канала АЦП
25.16.1CTRL - регистр управления канала АЦП
25.16.2MUXCTRL - регистры управления мультиплексором канала АЦП
25.16.3INTCTRL - регистры управления прерыванием канала АЦП
25.16.4INTFLAG - регистр флагов прерываний канала АЦП
25.16.5RESH - старший регистр результата канала АЦП n
25.16.5.112-битный режим с левым выравниванием
25.16.5.212-битный режим с правым выравниванием
25.16.6RESL - младший регистр результата канала АЦП n
25.16.6.212-битный режим с левым выравниванием
25.18Обзор регистров канала АЦП
25.19Обзор векторов прерываний
26Цифро-аналоговый преобразователь DAC
26.6Ограничения к временным характеристикам
26.9.1CTRLA - регистр А управления модулем DAC
26.9.2CTRLB - регистр В управления модулем DAC
26.9.3CTRLC - регистр С управления ЦАП
26.9.4EVCTRL - регистр управления событиями
26.9.5TIMCTRL - регистр задания временных характеристик ЦАП
26.9.6STATUS - регистр статуса ЦАП
26.9.7CH0DATAH - старший регистр данных канала ЦАП 0
26.9.8CH0DATAL - младший регистр данных канала ЦАП 0
26.9.9CH1DATAH - старший регистр данных канала ЦАП 1
26.9.10CH1DATAL - младший регистр данных канала ЦАП 1
26.9.11GAINCAL - регистр калибровки коэффициента передачи ЦАП
26.9.12OFFSETCAL - регистр калибровки смещения ЦАП
27.5Генерация прерываний и событий
27.8Зависимость энергопотребления от задержки распространения
27.9.1ACnCTRL - регистр управления аналоговым компаратором n
27.9.2ACnMUXCTRL - регистр управления мультиплексором аналогового компаратора n
27.9.3CTRLA - регистр управления А
27.9.4CTRLB - регистр управления В
27.9.5WINCTRL - регистр управления оконным режимом аналоговых компараторов
27.9.6STATUS - общий регистр статуса аналоговых компараторов
27.11Обзор векторов прерываний
28IEEE 1149.1-совместимый интерфейс JTAG
28.5.2Регистр идентификации МК
28.5.2.3Идентификатор производителя
28.5.3Цепь граничного сканирования
28.6Цепь граничного сканирования
28.6.1Сканирование линий ввода-вывода
29Интерфейс программирования и отладки PDI
29.3.3Формат посылки и символы
29.3.4Последовательные передача и прием
29.3.5Последовательная передача данных
29.3.5.129.3.5.1. Обнаружение конфликтов управления и коллизий
29.3.6.1Обнаружение символа BREAK
29.4.4Формат посылки и символов
29.4.4.1Специальные символы данных
29.4.5Последовательные передача и прием
29.4.6Последовательная передача
29.4.7.2Обнаружение символа BREAK
29.5.1Переключение между режимами PDI и JTAG
29.5.2Доступ к внутренним интерфейсам
29.5.3Ключ программирования энергонезависимой памяти
29.5.4Обработка исключительных ситуаций
29.5.6.1LDS - загрузка данных из пространства данных PDIBUS с использованием прямой адресации
29.5.6.2STS - сохранение данных в пространстве данных PDIBUS с использованием прямой адресации
29.5.6.3LD - загрузка данных из пространства данных PDIBUS с использованием косвенной адресации
29.5.6.4ST - сохранение данных в пространство данных PDIBUS с использованием косвенной адресации
29.5.6.5LDCS - загрузка данных из пространства регистров управления и статуса PDI
29.5.6.6STCS - сохранение данных в пространстве регистров управления и статуса PDI
29.5.6.7KEY - настройка ключа активизации
29.5.6.8REPEAT - настройка счетчика повтора инструкций
29.6Описание регистров инструкции и адресации интерфейса PDI
29.6.3Регистр счетчика повторов
29.6.4Регистр счетчика операндов
29.7Описание регистров управления и статуса интерфейса PDI
29.7.1STATUS - регистр статуса интерфейса PDI
29.7.3CTRL - регистр управления интерфейсом PDI
30Программирование запоминающих устройств
30.4.1Команды с запуском по действию
30.4.2Команды с запуском по чтению NVM
30.4.3Команды с запуском по записи NVM
30.4.4Механизм CCP для защиты записи/исполнения
30.5Особенности работы NVM-контроллера в занятом состоянии
30.6Страничные буферы Flash-памяти и EEPROM
30.6.1Страничный буфер Flash-памяти
30.7Последовательности программирования Flash-памяти и EEPROM
30.7.1Последовательность программирования Flash-памяти
30.7.2Последовательность программирования EEPROM
30.8Защита энергонезависимой памяти
30.9Предотвращение нарушения данных
30.11Самопрограммирование под управлением программы загрузчика
30.11.1Программирование Flash-памяти
30.11.1.1Сектор прикладной программы и загрузочный сектор
30.11.1.2Адресация Flash-памяти
30.11.2NVM-команды Flash-памяти
30.11.2.2Стирание страничного буфера Flash-памяти
30.11.2.3Загрузка страничного буфера Flash-памяти
30.11.2.4Стирание страницы Flash-памяти
30.11.2.5Запись страницы Flash-памяти
30.11.2.6Вычисление CRC для диапазона Flash-памяти
30.11.2.7Стирание сектора прикладной программы
30.11.2.8Стирание страницы сектора прикладной программы/загрузочного сектора
30.11.2.9Запись страницы сектора прикладной программы/загрузочного сектора
30.11.2.10Стирание и запись страницы сектора прикладной программы/загрузочного сектора
30.11.2.11Вычисление CRC в секторе прикладной программы/загрузочном секторе
30.11.2.12Стирание сигнатурного кода пользователя
30.11.2.13Запись сигнатурного кода пользователя
30.11.2.14Чтение сигнатурного кода пользователя/калибровочных данных
30.11.3NVM-команды доступа к Fuse- и Lock-битам
30.11.4Программирование EEPROM
30.11.5.1Загрузка страничного буфера EEPROM
30.11.5.2Стирание страничного буфера EEPROM
30.11.5.3Стирание страницы EPPROM
30.11.5.4Запись страницы EEPROM
30.11.5.5Стирание и запись страницы EEPROM
30.12.1Разрешение работы интерфейса внешнего программирования
30.12.3.3Стирание страничного буфера Flash-памяти/EEPROM
30.12.3.4Загрузка страничного буфера Flash-памяти/EEPROM
30.12.3.5Стирание страницы Flash-памяти/EEPROM
30.12.3.6Запись страницы Flash-памяти/EEPROM
30.12.3.7Стирание и запись страницы Flash-памяти/EEPROM
30.12.3.8Стирание сектора прикладной программы/загрузочного сектора/EEPROM
30.12.3.9Проверка CRC Flash-памяти
30.12.3.10Запись Fuse-/Lock-бит
31Карта памяти модулей ввода-вывода
32Краткое описание набора инструкций
33Приложение А. Временные диаграммы модуля EBI
33.13-портовое подключение SRAM с ALE1 и CS
33.23-портовое подключение SRAM с ALE12 и CS
33.34-портовое подключение SRAM с ALE2 и CS
33.44-портовое подключение SRAM с CS и без ALE
33.52-портовое подключение LPC памяти с ALE12 и CS
33.63-портовое подключение LPC памяти с ALE1 и CS
33.72-портвоое подключение LPC памяти с ALE1 и CS
33.83-портовое подключение SRAM с ALE1 и без CS
33.94-портвоое подключение SRAM без ALE и CS
33.102-портовое подключение LPC памяти с ALE12 и без CS
34Электрические характеристики
34.1Предельно-допустимые параметры*
34.2Статические характеристики
34.6Характеристики аналоговых компараторов
35Сведения о выявленных ошибках в работе микроконтроллеров
30.11.5NVM-команды EEPROM
В таблице 30.4 представлены NVM-команды, помощью которых можно выполнить доступ к EEPROM через NVM-контроллер. Команды самопрограммирования EEPROM с запуском по действию исполняются после установки бита CMDEX в регистре NVM CTRLA. Команды с запуском по чтению исполняются при чтении регистра NVM DATA0 (DATA0).
В столбце "Защита от изменения" указывается, защищен запуск инструкции механизмом защиты от изменения конфигурации (CCP) или нет. В двух последних столбцах приведены данные об используемых указателе адреса и регистре данных.
Алгоритм работы каждой команды более детально рассматривается в подразделах 30.11.5.1…30.11.5.7.
Таблица 30.4. Команды самопрограммирования EEPROM
CMD[6:0] |
Групповая конфигурация |
Описание |
Запуск |
Останов ЦПУ |
Занятость NVM |
Защита от изменения |
Указатель адреса |
Регистр данных |
0x00 |
NO_OPERATION |
Нет операции |
- |
- |
- |
- |
- |
- |
Страничный буфер EEPROM |
||||||||
0x33 |
LOAD_EEPROM_BUFFER |
Чтение страничного буфера EEPROM |
DATA0 |
Нет |
Нет |
Есть |
ADDR |
DATA0 |
0x36 |
ERASE_EEPROM_BUFFER |
Стирание страничного буфера EEPROM |
CMDEX |
Нет |
Занят |
Есть |
- |
- |
EEPROM |
||||||||
0x32 |
ERASE_EEPROME_PAGE |
Стирание страницы EEPROM |
CMDEX |
Нет |
Занят |
Есть |
ADDR |
- |
0x34 |
WRITE_EEPROME_PAGE |
Запись страницы EEPROM |
CMDEX |
Нет |
Занят |
Есть |
ADDR |
- |
0x35 |
ERASE_WRITE_EEPROM_PAGE |
Стирание и запись страницы EEPROM |
CMDEX |
Нет |
Занят |
Есть |
ADDR |
- |
0x30 |
ERASE_EEPROM |
Стирание EEPROM |
CMDEX |
Нет |
Занят |
Есть |
- |
- |
0x06 |
READ_EEPROM |
Чтение EEPROM |
CMDEX |
Нет |
Нет |
Есть |
ADDR |
DATA0 |
30.11.5.1Загрузка страничного буфера EEPROM
Данная команда предназначена для записи одного байта в страничный буфер EEPROM.
-
Запишите в регистр NVM CMD команду загрузки страничного буфера EEPROM
-
Запишите в регистр NVM ADDR0 адрес, по которому выполняется запись.
-
Запишите в регистр NVM DATA0 данные, подлежащие записи. Это приведет к запуску исполнения команды.
Повторите шаги 2-3 нужное число раз.
30.11.5.2Стирание страничного буфера EEPROM
Данная команда предназначена для стирания страничного буфера EEPROM.
-
Запишите в регистр NVM CMD команду стирания страничного буфера EEPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY регистра NVM STATUS в процессе выполнения операции равен единице.
30.11.5.3Стирание страницы EPPROM
Данная команда предназначена для стирания одной страницы EEPROM.
-
Запишите в регистр NVM CMD команду стирания страницы EEPROM.
-
Запишите в регистр NVM ADDRESS адрес подлежащей стиранию страницы EEPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY в регистре NVM STATUS в процессе выполнения операции равен единице.
Команды стирания страницы стирают только те ячейки страницы, загрузка которых была выполнена в страничный буфер EEPROM.
30.11.5.4Запись страницы EEPROM
Данная команда предназначена для записи загруженного страничного буфера EEPROM в одну страницу EEPROM. Запись выполняется только тех ячеек, которые предварительно были загружены в страничный буфер EEPROM.
-
Запишите в регистр NVM CMD команду записи страницы EEPROM.
-
Запишите в регистр NVM ADDR адрес подлежащей записи страницы EEPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY регистра NVM STATUS равен единице вплоть до завершения операции.
30.11.5.5Стирание и запись страницы EEPROM
Данная команда позволяет за один подход выполнить стирание страницы EEPROM, а затем запись страничного буфера EEPROM в только что стертую страницу EEPROM.
-
Запишите в регистр NVM CMD команду стирания и записи страницы EEPROM.
-
Запишите в регистр NVM ADDR адрес подлежащей записи страницы EEPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY в регистре NVM STATUS остается установленным до завершения операции.
30.11.5.6Стирание EEPROM
Данная команда предназначена для стирания тех ячеек всех страниц EEPROM, которые были загружены ранее в страничный буфер EEPROM.
-
Запишите в регистр NVM CMD команду стирания EPPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.
30.11.5.7Чтение EPPROM
Команда чтения EEPROM предназначена для чтения одного байта из EEPROM.
-
Запишите в регистр NVM CMD команду чтения EPPROM.
-
Запишите в регистр NVM ADDR адрес, по которому будет выполняться чтение.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Считанный байт данных будет доступен в NVM DATA0.
30.12Внешнее программирование
Внешнее программирование - способ программирования энергонезависимой памяти данных и памяти программ с помощью внешнего программатора или отладчика. Программирование может выполняться либо внутри системы (внутрисистемное программирование), либо на специальных производственных программаторах. Для выполнения такого программирования необходимо придерживаться ограничений по максимальным и минимальным напряжению и частоте, значения которых приводятся в документации на МК.
Доступ к микроконтроллеру при внешнем программировании осуществляется через контроллер PDI, который внешне доступен через электрический интерфейс JTAG или PDI. Более детально о разрешении работы и использовании интерфейсов PDI и JTAG см. в 20 "Интерфейс программирования и отладки". Далее по тексту полагается, что разрешение работы электрического интерфейса контроллера PDI выполнено корректно. Через PDI внешний программатор имеет возможность доступа к любой энергонезависимой памяти и NVM-контроллеру по шине PDI, при этом, и память программ и память данных образуют единое линейное пространство памяти PDI. На рисунке 30.4 показано пространство памяти PDI и базовые адреса каждого пространства памяти МК.
Рисунок 30.4. Карта памяти PDI
30.12.1Разрешение работы интерфейса внешнего программирования
Программирование NVM через PDI требует разрешения работы, что можно сделать следующим образом.
-
Запишите в регистр RESET контроллера PDI значение 0x59 (сигнатура сброса).
-
Запишите корректный NVM-ключ в PDI.
-
Дождитесь равенства единицы бита NVMEN регистра статуса PDI (PDI STATUS).
Если бит NVMEN в регистре PDI STATUS станет равным единице, это означает, что интерфейс NVM готов для использования контроллером PDI.
30.12.2Программирование NVM
30.12.2.1Адресация NVM
После разрешения работы интерфейса PDI NVM все запоминающие устройства МК становятся доступными в адресном пространстве PDI. В дальнейших упоминаниях о чтении и записи памяти данных или памяти программ полагается использование адресации в соответствии с картой памяти, представленной на рисунке 30.4. Контроллер PDI использует только побайтную адресацию. Это означает, что любой адрес памяти является адресом байта. При заполнении страничного буфера Flash-памяти или EEPROM, для определения адресуемой ячейки страничного буфера используются только младшие биты адреса. В остальных случаях, в целях гарантирования корректности отображения адресов, требуется указание полного адреса страницы Flash-памяти или EEPROM.
30.12.2.2Занятость NVM
Во время программирования (стирание страницы и запись страницы) , когда NVM находится в занятом состоянии, блокируется возможность чтения всей NVM.
30.12.3NVM-команды
NVM-команды, которые можно использовать для доступа к энергонезависимым запоминающим устройствам при внешнем программировании, представлены в таблице 30.5. Для внешнего программирования доступен более обширный набор команд, чем при самопрограммировании. При внешнем программировании, для исполнения команд с запуском по действию необходимо установить бит CMDEX в регистре NVM CTRLA. Исполнение команд с запуском по чтению происходит при выполнении инструкций прямого или косвенного чтения (LDS или LD) из PDI (чтение PDI). Наконец, команды с запуском по записи исполняются при выполнении инструкции прямой или косвенной записи (STS или ST) из PDI (запись PDI).
Детальное описание алгоритма выполнения каждой NVM-команды представлено в подразделах 30.12.3.1…30.12.3.11. Возможность выполнения большинства команд зависит от состояния Lock-бит. После активизации защиты от чтения и записи можно выполнить только команды стирания всей памяти и проверки CRC Flash-памяти.
Таблица 30.5. NVM-команды, доступные при внешнем программировании
CMD[6:0] |
Наименование команды |
Запуск |
Защита от изменения |
Занятость NVM |
0x00 |
Нет операции |
- |
- |
- |
0x40 |
Стирание всей памяти(1) |
CMDEX |
Есть |
Занято |
0x43 |
Чтение NVM |
Чтение PDI |
Нет |
Нет |
Страничный буфер Flash-памяти |
||||
0x23 |
Загрузка страничного буфера |
Запись PDI |
Нет |
Нет |
0x26 |
Стирание страничного буфера |
CMDEX |
Есть |
Занято |
Flash-память |
||||
0x2B |
Стирание страницы Flash-памяти |
Запись PDI |
Нет |
Занято |
0x2E |
Запись страницы Flash-памяти |
Запись PDI |
Нет |
Занято |
0x2F |
Стирание и запись страницы Flash-памяти |
Запись PDI |
Нет |
Занято |
0x78 |
Проверка CRC Flash-памяти |
CMDEX |
Есть |
Занято |
Сектор прикладной программы |
||||
0x20 |
Стирание сектора прикладной программы |
Запись PDI |
Нет |
Занято |
0x22 |
Стирание страницы сектора прикладной программы |
Запись PDI |
Нет |
Занято |
0x24 |
Запись страницы сектора прикладной программы |
Запись PDI |
Нет |
Занято |
0x25 |
Стирание и запись страницы сектора прикладной программы |
Запись PDI |
Нет |
Занято |
0x38 |
Проверка CRC в секторе прикладной программы |
CMDEX |
Есть |
Занято |
Загрузочный сектор |
||||
0x68 |
Стирание загрузочного сектора |
Запись PDI |
Нет |
Занято |
0x2A |
Стирание страницы загрузочного сектора |
Запись PDI |
Нет |
Занято |
0x2C |
Запись страницы загрузочного сектора |
Запись PDI |
Нет |
Занято |
0x2D |
Стирание и запись страницы загрузочного сектора |
Запись PDI |
Нет |
Занято |
0x39 |
Проверка CRC в загрузочном секторе |
NVMAA |
Есть |
Занято |
Секторы калибровочных данных и сигнатурного кода пользователя |
||||
0x03 |
Чтение сигнатурного кода пользователя |
Чтение PDI |
Нет |
Нет |
0x18 |
Стирание сигнатурного кода пользователя |
Запись PDI |
Нет |
Занято |
0x1A |
Запись сигнатурного кода пользователя |
Запись PDI |
Нет |
Занято |
0x02 |
Чтение калибровочных данных |
Чтение PDI |
Нет |
Нет |
Fuse- и Lock-биты |
||||
0x07 |
Чтение Fuse-бит |
Чтение PDI |
Нет |
Нет |
0x4С |
Запись Fuse-бит |
Запись PDI |
Нет |
Занято |
0x08 |
Запись Lock-бит |
CMDEX |
Есть |
Занято |
Страничный буфер EEPROM |
||||
0x33 |
Загрузка страничного буфера EEPROM |
Запись PDI |
Нет |
Нет |
0x36 |
Стирание страничного буфера EEPROM |
CMDEX |
Есть |
Занято |
EEPROM |
||||
0x30 |
Запись EEPROM |
CMDEX |
Есть |
Занято |
0x32 |
Стирание страницы EEPROM |
Запись PDI |
Нет |
Занято |
0x34 |
Запись страницы EEPROM |
Запись PDI |
Нет |
Занято |
0x35 |
Стирание и запись страницы EEPROM |
Запись PDI |
Нет |
Занято |
0x06 |
Чтение EEPROM |
Чтение PDI |
Нет |
Нет |
Прим.:
-
Если fuse-бит EESAVE запрограммирован, выполнение команды стирания всей памяти не повлияет на содержимое EEPROM.
30.12.3.1Стирание всей памяти
Данная команда предназначена для стирания Flash-памяти программ, EEPROM и Lock-бит. При необходимости из этого перечня можно исключить EEPROM. Для этого нужно запрограммировать fuse-бит EESAVE (см. 4.16.5 "FUSEBYTE5 - конфигурационный байт 5 энергонезависимой памяти"). Данная инструкция не влияет на сигнатурный код пользователя, калибровочные данные и Fuse-биты.
-
Запишите в регистр NVM CMD команду стирания всей памяти.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Сразу после запуска этой операции происходит отключение PDIBUS, а бит NVMEN в регистре PDI STATUS вплоть до завершения операции имеет нулевое значение. Убедиться в возобновлении работы PDIBUS можно путем опроса бита NVMEN (должен быть равен 1).
Флаг BUSY в регистре NVM STATUS вплоть до завершения операции остается равным единице.
30.12.3.2Чтение NVM
Данная команда предназначена для чтения Flash-памяти, EEPROM, Fuse-бит, сигнатурного кода и калибровочных данных.
-
Запишите в регистр NVM CMD команду чтения NVM.
-
Прочитайте выбранный адрес памяти путем выполнения операции чтение PDI.
Для чтения различных секторов памяти также можно использовать команды чтения EEPROM, чтения Fuse-бит, чтения сигнатурного кода и чтения калибровочных данных. Алгоритм выполнения этих команд идентичен команде чтения NVM.
30.12.3.3Стирание страничного буфера Flash-памяти/EEPROM
Данные команды предназначены для стирания страничных буферов Flash-памяти и EEPROM.
-
Запишите в регистр NVM CMD команду стирания страничного буфера Flash-памяти/EEPROM.
-
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.
Флаг BUSY в регистре NVM STATUS остается установленным вплоть до завершения выполнения операции.
30.12.3.4Загрузка страничного буфера Flash-памяти/EEPROM
Данные команды предназначены для записи одного байта данных в страничные буферы Flash-памяти и EEPROM.
-
Запишите в регистр NVM CMD команду загрузки страничного буфера Flash-памяти/EEPROM.
-
Выполните операцию запись PDI для записи по выбранному адресу памяти.
Поскольку доступ к страничному буферу Flash-памяти выполняется пословно, а PDI использует побайтную адресацию, запись страничного буфера Flash-памяти PDI-контроллером должна выполняться в корректной последовательности. При выполнении записи, вначале необходимо записать младший байт, а затем старший. После записи младшего байта, он помещается во временный регистр, откуда в дальнейшем будет скопирован в слово страничного буфера одновременно с записью старшего байта слова.
На время выполнения команды работа интерфейса PDI автоматически приостанавливается, чтобы избежать выполнения следующей PDI-инструкции.
30.12.3.5Стирание страницы Flash-памяти/EEPROM
Команды стирания страницы сектора прикладной программы, стирания страницы загрузочного сектора, стирания сигнатурного кода пользователя и стирания страницы EEPROM предназначены для стирания одной страницы выбранного пространства памяти.
-
Запишите в регистр NVM CMD команду стирания страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
-
Запишите выбранную страницу путем выполнения операции запись PDI. Для записи страницы необходимо адресоваться к любой её ячейке.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.
30.12.3.6Запись страницы Flash-памяти/EEPROM
Команды записи страницы сектора прикладной программы, записи страницы загрузочного сектора, записи сигнатурного кода пользователя и записи страницы EEPROM предназначены для записи загруженного страничного буфера Flash-памяти/EEPROM в выбранное пространство памяти.
-
Запишите в регистр NVM CMD команду записи страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
-
Запишите выбранную страницу путем выполнения операции запись PDI. Для записи страницы необходимо адресоваться к любой её ячейке.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.
30.12.3.7Стирание и запись страницы Flash-памяти/EEPROM
С помощью данных команд можно за один подход выполнить стирание и запись страницы сектора прикладной программы, стирание и запись страницы загрузочного сектора или стирание и запись страницы EEPROM.
-
Запишите в регистр NVM CMD команду стирание и запись страницы сектора прикладной программы/загрузочного сектора/сигнатурного кода пользователя/EEPROM.
-
Запишите выбранную страницу путем выполнения операции запись PDI. Запись страницы сектора выполняется при условии адресации любой его ячейки.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.
30.12.3.8Стирание сектора прикладной программы/загрузочного сектора/EEPROM
Данные команды предназначены для стирания всего выбранного сектора.
-
Запишите в регистр NVM CMD команду стирания сектора прикладной программы/загрузочного сектора/EEPROM.
-
Запишите выбранный сектор с помощью операции запись PDI. Запись страницы сектора выполняется при условии адресации любой его ячейки.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции. 30.12.3.9. Проверка CRC в секторе прикладной программы/загрузочном секторе
Данные команды предназначены для проверки содержимого выбранного сектора Flash-памяти после их программирования.
-
Запишите в регистр NVM CMD команду проверки CRC в секторе прикладной программы/загрузочном секторе.
-
Установите бит CMDEX в регистре NVM CTRLA с помощью привязанной ко времени последовательности CCP.