К1921ВК01Т (арм Cortex-M4F)
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
-
- Сообщения: 24
- Зарегистрирован: 19 янв 2017, 18:37
Re: К1921ВК01Т (арм Cortex-M4F)
Да, в макетный образец с той же программой шьется без проблем.
Вот часть программы:
void InitPort (void)
{
GPIO_A->OUTENABLESET=(1<<9); //Бит А[9] на выход, остальные на вход.
GPIO_A->ALTFUNCSET|=(1<<9); // Включена альтернативная функция по A[9].
//GPIO_A->ALTFUNCSET|=(1<<0); // Включена альтернативная функция по A[0].
GPIO_A->INTTYPESET=(1<<0); // Тип прерывания по А[0] по фронту.
//GPIO_A->INTTYPESET|=(1<<1); // Тип прерывания по А[1] по фронту.
GPIO_A->INTPOLSET=(1<<0); // Полярность фронта прерывания по A[0] - положительная.
//GPIO_A->INTPOLSET|=(1<<1); // Полярность фронта прерывания по A[1] - положительная.
GPIO_A->INTENSET=0x0000; //Пока нет разрешения на прерывание.
COMMON_REG->GPIOPUCTL0=(1<<0); //Подключена подтяжка PULLUP к порту А[0] , остальные и порт В отключены.
COMMON_REG->GPIOODCTL0=0x00000000; // Обычный режим работы портов А и В, не открытый коллектор.
COMMON_REG->GPIODSCTL0=0x00000000; // Нагрузочная способнось портов А и В 8мА.
COMMON_REG->GPIOPCTL0=0; // Альтернативная функция порта A[0], А[9] номер 1.
//COMMON_REG->GPIOSE0=0x00000000; // Фильтр к портам А и В не подключен.
COMMON_REG->GPIOQM0=(1<<0); // Фильтр подключен по 6-ти отсчетам к порту А[0].
COMMON_REG->GPIOQE0=(1<<0); // Фильтр подключен к порту А[0].
//COMMON_REG->GPIODEN0|=(1<<9)|(1<<1)|(1<<0); // Разрешение работы 0,1 и 9 битов порта А.
COMMON_REG->GPIODEN0=(1<<9)|(1<<0); // Разрешение работы 0 и 9 битов порта А.
GPIO_B->OUTENABLESET=(1<<15); //Бит B[15] на выход, остальные на вход.
GPIO_B->ALTFUNCSET|=(1<<15); // Включена альтернативная функция по В[15].
COMMON_REG->GPIOPCTL1=(0<<30); // Альтернативная функция порта В[15] номер 1.
COMMON_REG->GPIODEN0|=(1<<31); // Разрешение работы бита порта В[15].
GPIO_C->OUTENABLESET=0xFFC0; //Бит C[6] - C[15] на выход, остальные на вход.
GPIO_C->ALTFUNCSET|=0xFFC0; // Включена альтернативная функция по битам C[6] - C[15].
COMMON_REG->GPIOPUCTL1=0x00000000; //Подтяжка PULLUP к портам С и D отключены.
COMMON_REG->GPIOODCTL1=0x00000000; // Обычный режим работы портов C и D, не открытый коллектор.
COMMON_REG->GPIODSCTL1=0x00000000; // Нагрузочная способнось портов C и D 8мА.
COMMON_REG->GPIOPCTL2=0x00000000; // Альтернативная функция порта C номер 1.
COMMON_REG->GPIOSE1=0x00000000; // Фильтр к портам C и D не подключен.
COMMON_REG->GPIODEN1|=0x0000FFC0; // Разрешение работы битам C[6] - C[15].
GPIO_D->OUTENABLESET=0xf000; //Биты D[15] - D[12] на выход, остальные на вход.
GPIO_D->ALTFUNCSET|=0xf000; // Включена альтернативная функция по D[15] - D[12].
COMMON_REG->GPIOPCTL3=0x00000000; // Альтернативная функция порта D номер 1.
COMMON_REG->GPIODEN1=0xf000ffc0; // Разрешение работы битов D[15] - D[12].
GPIO_E->OUTENABLESET=(1<<12)|(1<<13); //Бит E[12], E[13] на выход, остальные на вход.
GPIO_E->ALTFUNCSET=(1<<12)|(1<<13); // Включена альтернативная функция по битам E[12], E[13].
COMMON_REG->GPIOPUCTL2=0x00000000; //Подтяжка PULLUP к портам E и F отключены.
COMMON_REG->GPIOODCTL2=0x00000000; // Обычный режим работы портов E и F, не открытый коллектор.
COMMON_REG->GPIODSCTL2=0x00000000; // Нагрузочная способнось портов E и F 8мА.
COMMON_REG->GPIOPCTL4=0x00000000; // Альтернативная функция порта E номер 1.
COMMON_REG->GPIOSE2=0x00000000; // Фильтр к портам E и F не подключен.
COMMON_REG->GPIODEN2=(1<<12)|(1<<13); // Разрешение работы битам E[12], E[13].
GPIO_F->OUTENABLESET=(1<<6); //Бит F[6] на выход, остальные на вход.
GPIO_F->ALTFUNCSET=(1<<6); // Включена альтернативная функция по F[6].
COMMON_REG->GPIOPCTL5=0x00000000; // Альтернативная функция порта F номер 1.
COMMON_REG->GPIODEN2|=(1<<22); // Разрешение работы бита F[6].
GPIO_G->OUTENABLESET=1; //Бит G[0] на выход, остальные на вход.
GPIO_G->INTTYPESET=(1<<12); // Тип прерывания по G[12] по фронту.
COMMON_REG->GPIOPUCTL3=(1<<12); //Подключена подтяжка PULLUP к порту G[12], остальные отключены.
COMMON_REG->GPIOQM3=(1<<12); // Фильтр подключен к порту G[12] по 6-ти отсчетам.
COMMON_REG->GPIOQE3=(1<<12); // Фильтр подключен к порту G[12].
COMMON_REG->GPIODEN3=(1<<12)|(1<<0); // Разрешение работы 0 и 12 битов порта G.
}
Вот часть программы:
void InitPort (void)
{
GPIO_A->OUTENABLESET=(1<<9); //Бит А[9] на выход, остальные на вход.
GPIO_A->ALTFUNCSET|=(1<<9); // Включена альтернативная функция по A[9].
//GPIO_A->ALTFUNCSET|=(1<<0); // Включена альтернативная функция по A[0].
GPIO_A->INTTYPESET=(1<<0); // Тип прерывания по А[0] по фронту.
//GPIO_A->INTTYPESET|=(1<<1); // Тип прерывания по А[1] по фронту.
GPIO_A->INTPOLSET=(1<<0); // Полярность фронта прерывания по A[0] - положительная.
//GPIO_A->INTPOLSET|=(1<<1); // Полярность фронта прерывания по A[1] - положительная.
GPIO_A->INTENSET=0x0000; //Пока нет разрешения на прерывание.
COMMON_REG->GPIOPUCTL0=(1<<0); //Подключена подтяжка PULLUP к порту А[0] , остальные и порт В отключены.
COMMON_REG->GPIOODCTL0=0x00000000; // Обычный режим работы портов А и В, не открытый коллектор.
COMMON_REG->GPIODSCTL0=0x00000000; // Нагрузочная способнось портов А и В 8мА.
COMMON_REG->GPIOPCTL0=0; // Альтернативная функция порта A[0], А[9] номер 1.
//COMMON_REG->GPIOSE0=0x00000000; // Фильтр к портам А и В не подключен.
COMMON_REG->GPIOQM0=(1<<0); // Фильтр подключен по 6-ти отсчетам к порту А[0].
COMMON_REG->GPIOQE0=(1<<0); // Фильтр подключен к порту А[0].
//COMMON_REG->GPIODEN0|=(1<<9)|(1<<1)|(1<<0); // Разрешение работы 0,1 и 9 битов порта А.
COMMON_REG->GPIODEN0=(1<<9)|(1<<0); // Разрешение работы 0 и 9 битов порта А.
GPIO_B->OUTENABLESET=(1<<15); //Бит B[15] на выход, остальные на вход.
GPIO_B->ALTFUNCSET|=(1<<15); // Включена альтернативная функция по В[15].
COMMON_REG->GPIOPCTL1=(0<<30); // Альтернативная функция порта В[15] номер 1.
COMMON_REG->GPIODEN0|=(1<<31); // Разрешение работы бита порта В[15].
GPIO_C->OUTENABLESET=0xFFC0; //Бит C[6] - C[15] на выход, остальные на вход.
GPIO_C->ALTFUNCSET|=0xFFC0; // Включена альтернативная функция по битам C[6] - C[15].
COMMON_REG->GPIOPUCTL1=0x00000000; //Подтяжка PULLUP к портам С и D отключены.
COMMON_REG->GPIOODCTL1=0x00000000; // Обычный режим работы портов C и D, не открытый коллектор.
COMMON_REG->GPIODSCTL1=0x00000000; // Нагрузочная способнось портов C и D 8мА.
COMMON_REG->GPIOPCTL2=0x00000000; // Альтернативная функция порта C номер 1.
COMMON_REG->GPIOSE1=0x00000000; // Фильтр к портам C и D не подключен.
COMMON_REG->GPIODEN1|=0x0000FFC0; // Разрешение работы битам C[6] - C[15].
GPIO_D->OUTENABLESET=0xf000; //Биты D[15] - D[12] на выход, остальные на вход.
GPIO_D->ALTFUNCSET|=0xf000; // Включена альтернативная функция по D[15] - D[12].
COMMON_REG->GPIOPCTL3=0x00000000; // Альтернативная функция порта D номер 1.
COMMON_REG->GPIODEN1=0xf000ffc0; // Разрешение работы битов D[15] - D[12].
GPIO_E->OUTENABLESET=(1<<12)|(1<<13); //Бит E[12], E[13] на выход, остальные на вход.
GPIO_E->ALTFUNCSET=(1<<12)|(1<<13); // Включена альтернативная функция по битам E[12], E[13].
COMMON_REG->GPIOPUCTL2=0x00000000; //Подтяжка PULLUP к портам E и F отключены.
COMMON_REG->GPIOODCTL2=0x00000000; // Обычный режим работы портов E и F, не открытый коллектор.
COMMON_REG->GPIODSCTL2=0x00000000; // Нагрузочная способнось портов E и F 8мА.
COMMON_REG->GPIOPCTL4=0x00000000; // Альтернативная функция порта E номер 1.
COMMON_REG->GPIOSE2=0x00000000; // Фильтр к портам E и F не подключен.
COMMON_REG->GPIODEN2=(1<<12)|(1<<13); // Разрешение работы битам E[12], E[13].
GPIO_F->OUTENABLESET=(1<<6); //Бит F[6] на выход, остальные на вход.
GPIO_F->ALTFUNCSET=(1<<6); // Включена альтернативная функция по F[6].
COMMON_REG->GPIOPCTL5=0x00000000; // Альтернативная функция порта F номер 1.
COMMON_REG->GPIODEN2|=(1<<22); // Разрешение работы бита F[6].
GPIO_G->OUTENABLESET=1; //Бит G[0] на выход, остальные на вход.
GPIO_G->INTTYPESET=(1<<12); // Тип прерывания по G[12] по фронту.
COMMON_REG->GPIOPUCTL3=(1<<12); //Подключена подтяжка PULLUP к порту G[12], остальные отключены.
COMMON_REG->GPIOQM3=(1<<12); // Фильтр подключен к порту G[12] по 6-ти отсчетам.
COMMON_REG->GPIOQE3=(1<<12); // Фильтр подключен к порту G[12].
COMMON_REG->GPIODEN3=(1<<12)|(1<<0); // Разрешение работы 0 и 12 битов порта G.
}
Re: К1921ВК01Т (арм Cortex-M4F)
Вот этой записью вы запрещаете работу SWDIO на выход:
Правильнее так:
Код: Выделить всё
COMMON_REG->GPIODEN0=(1<<9)|(1<<0); // Разрешение работы 0 и 9 битов порта А.
Код: Выделить всё
COMMON_REG->GPIODEN0|=(1<<9)|(1<<0); // Разрешение работы 0 и 9 битов порта А.
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день!
При назначении и сбросе альтернативных функций порту (по крайней мере порту В) обнаружилась одна неприятная вещь. В программе некоторые выводы порта В были сначала переведены в режим работы альтернативной функции:
NT_GPIOB->ALTFUNCSET |= ((1 << 4) |(1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) |(1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 15));
Далее при переводе хотя бы одного из этих выводов данного порта в режим GPIO,
NT_GPIOB->ALTFUNCCLR |= (1 << 15); // GPIO_Pin_15,
регистры ALTFUNCSET и ALTFUNCCLR сбрасываются в 0. В регистре ALTFUNCSET сбрасываются биты, отвечающие за выводы, которые должны работать в режиме альтернативной функции по умолчанию (выводы 0, 1, 2). Вследствие чего становится невозможной работа через JTAG.
Для устранения данной специфической особенности работы микроконтроллера приходится повторно назначать нужным выводам режим работы альтернативной функции.
NT_GPIOB->ALTFUNCSET |= ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) |(1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14));
Должен ли так работать микроконтроллер?
При назначении и сбросе альтернативных функций порту (по крайней мере порту В) обнаружилась одна неприятная вещь. В программе некоторые выводы порта В были сначала переведены в режим работы альтернативной функции:
NT_GPIOB->ALTFUNCSET |= ((1 << 4) |(1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) |(1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 15));
Далее при переводе хотя бы одного из этих выводов данного порта в режим GPIO,
NT_GPIOB->ALTFUNCCLR |= (1 << 15); // GPIO_Pin_15,
регистры ALTFUNCSET и ALTFUNCCLR сбрасываются в 0. В регистре ALTFUNCSET сбрасываются биты, отвечающие за выводы, которые должны работать в режиме альтернативной функции по умолчанию (выводы 0, 1, 2). Вследствие чего становится невозможной работа через JTAG.
Для устранения данной специфической особенности работы микроконтроллера приходится повторно назначать нужным выводам режим работы альтернативной функции.
NT_GPIOB->ALTFUNCSET |= ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) |(1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14));
Должен ли так работать микроконтроллер?
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день!
Микроконтроллер отрабатывает верно. У вас ошибка в строке:
Правильный вариант:
Дело в том, что к регистрам GPIO xxxCLR/xxxSET не совсем правильно применять стандартную процедуру "чтение-модификация-запись", нужно применять одиночную "запись". Использование этой процедуры с регистрами xxxSET не приводит к ошибке, однако с xxxCLR по-другому. Так например, прочитав ALTFUNCCLR регистр (впрочем как и ALTFUNCSET), вы получите текущее состояние альтернативных функций по порту. Это значение будет содержать установленные разряды, соответствующие включенным функциям. И когда, после модификации, вы запишите это значение обратно в ALTFUNCCLR - вы сбросите все включенные альтернативные функции.
Микроконтроллер отрабатывает верно. У вас ошибка в строке:
Код: Выделить всё
NT_GPIOB->ALTFUNCCLR |= (1 << 15); // GPIO_Pin_15,
Код: Выделить всё
NT_GPIOB->ALTFUNCCLR = (1 << 15); // GPIO_Pin_15,
Re: К1921ВК01Т (арм Cortex-M4F)
Спасибо за ответ. Но есть еще один нерешенный вопрос.
Работаю с макетно-отладочным устройством для микроконтроллера К1921ВК01Т КФДЛ.441461.010. На данный момент в качестве примеров работы с периферией использую пакет драйверов из репозитория NIIETCM4 PD. Драйвера отлично работают после небольшой адаптации под данный набор. В отладочном наборе имеются микросхемы внешней памяти типа SRAM (CY62126ESL) и типа FLASH (SST39LF400A-55-4C). При общении со SRAM через контроллер внешней памяти никаких проблем не наблюдается (успешно проходят и чтение и запись), а вот записать во FLASH, используя драйвер контроллера внешней памяти из репозитория, не получается. Посылаю последовательность команд для записи согласно даташиту на SST39LF400A, данные и целевой адрес, но результат нулевой - данные не записываются.
Имеются ли где-то примеры исходников для работы именно с этим отладочным набором? В частности пример работы с внешней памятью типа FLASH через контроллер внешней памяти?
Работаю с макетно-отладочным устройством для микроконтроллера К1921ВК01Т КФДЛ.441461.010. На данный момент в качестве примеров работы с периферией использую пакет драйверов из репозитория NIIETCM4 PD. Драйвера отлично работают после небольшой адаптации под данный набор. В отладочном наборе имеются микросхемы внешней памяти типа SRAM (CY62126ESL) и типа FLASH (SST39LF400A-55-4C). При общении со SRAM через контроллер внешней памяти никаких проблем не наблюдается (успешно проходят и чтение и запись), а вот записать во FLASH, используя драйвер контроллера внешней памяти из репозитория, не получается. Посылаю последовательность команд для записи согласно даташиту на SST39LF400A, данные и целевой адрес, но результат нулевой - данные не записываются.
Имеются ли где-то примеры исходников для работы именно с этим отладочным набором? В частности пример работы с внешней памятью типа FLASH через контроллер внешней памяти?
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день. Не нашел в документации количества циклов перезаписи для основной и пользовательской флеш-памяти.
Также интересен вопрос по температурному диапазону - что будет при минимальной, максимальной температуре? При какой температуре хранения изделия данные флеш-памяти будут гарантировано сохранны?
Также интересен вопрос по температурному диапазону - что будет при минимальной, максимальной температуре? При какой температуре хранения изделия данные флеш-памяти будут гарантировано сохранны?
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день! Типичное количество циклов перезаписи - 100К. Если температура хранения не выходит за рамки рабочего диапазона температур изделия, то данные должны оставаться сохраненными.Лашкевич писал(а):Добрый день. Не нашел в документации количества циклов перезаписи для основной и пользовательской флеш-памяти.
Также интересен вопрос по температурному диапазону - что будет при минимальной, максимальной температуре? При какой температуре хранения изделия данные флеш-памяти будут гарантировано сохранны?
Re: К1921ВК01Т (арм Cortex-M4F)
Здравствуйте!
Подскажите, где можно скачать габаритный чертеж для металлокерамического корпуса К1921ВК01Т (корпус 4250.208-1) ?
Также необходима распиновка для этого корпуса. В ТО указана распиновка только для QFP208.
Спасибо!
Подскажите, где можно скачать габаритный чертеж для металлокерамического корпуса К1921ВК01Т (корпус 4250.208-1) ?
Также необходима распиновка для этого корпуса. В ТО указана распиновка только для QFP208.
Спасибо!
-
- Сообщения: 61
- Зарегистрирован: 14 дек 2015, 12:07
- Предприятие: АО НИИЭТ
- Откуда: НИИЭТ
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день!MR.Smith писал(а):Здравствуйте!
Подскажите, где можно скачать габаритный чертеж для металлокерамического корпуса К1921ВК01Т (корпус 4250.208-1) ?
Также необходима распиновка для этого корпуса. В ТО указана распиновка только для QFP208.
Спасибо!
Чертежи во вложении. Распиновка будет немного отличаться. В файле с пинами в конце есть таблица, в которой перечисленны отличия
- Вложения
-
- таблица выводов Кортекс-5 МК.doc
- (889.5 КБ) 209 скачиваний
-
- корпус 4250.208-1.7z
- (423.98 КБ) 196 скачиваний
-
- Сообщения: 24
- Зарегистрирован: 19 янв 2017, 18:37
Re: К1921ВК01Т (арм Cortex-M4F)
У меня такая проблема. При минус 20 в камере микроконтроллер перестает реагировать на прерывания по А(0) и G(12). Тактовая частота 100 МГц - 200МГц с делением на 2. В нормальных условиях и плюсе все хорошо.Амплитуда внешнего импульса для прерывания 2.1В, может быль в минусе это мала? Или на 100 МГц в минусе МК начинает плохо работать?
Настройки портов в моём сообщении от 20января.
Настройки портов в моём сообщении от 20января.