Не входит 1921вк1т в прерывание от таймера

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: dav, bkolbov, Alis, pip, _sva_, dav, bkolbov, Alis, pip, _sva_, dav, bkolbov, Alis, pip, _sva_

Ответить
IT124NPOIT
Сообщения: 24
Зарегистрирован: 19 янв 2017, 18:37

Не входит 1921вк1т в прерывание от таймера

Сообщение IT124NPOIT » 02 мар 2021, 15:51

Не входит таймер 1 в прерывание. Подскажите где ошибка. По порту H(6) прерывание работает.

#include "common.h"
#include "Init1508PL8T.h"
#include "NT32M4F1.h"
#include "apb_timer_lib.h"

void InitCLK();
void InitSRAM();
void Init1508PL8T();
void InitFt();
void InitWD ();
void InitTimer();

unsigned long Info;
unsigned long F1;
unsigned long F2;
unsigned long InfoL;
unsigned long InfoH;

unsigned long i=1;
unsigned int n=0;
unsigned long m=0;
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<<1)|(1<<0); //Подключена подтяжка PULLUP к порту А[0] и A[1], остальные и порт В отключены.
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<<0)|(1<<12); // Разрешение работы 0 и 12 битов порта G.

// Порт H используется когда нужен датчик готовности.
GPIO_H->OUTENABLESET=(1<<7); //Бит H[7] на выход, остальные на вход.
GPIO_H->INTTYPESET=(1<<6); // Тип прерывания по H[6] по фронту.
GPIO_H->INTPOLSET=(1<<6); // Полярность фронта прерывания по H[6] - положительная если закоментированна - отрицательна.
//COMMON_REG->GPIOPUCTL3|=(1<<23); //Подключена подтяжка PULLUP к порту H[7], остальные отключены.
//COMMON_REG->GPIOQM3|=(1<<23); // Фильтр подключен к порту H[7] по 6-ти отсчетам.
//COMMON_REG->GPIOQE3|=(1<<23); // Фильтр подключен к порту H[7].
COMMON_REG->GPIODEN3|=(1<<22)|(1<<23); // Разрешение работы H[7] и H[6] порта H; GPIODEN3| обязательно с чертой - общая группа с G.

}


void InitTimer(void)
{
TIMER_1->VALUE = 65000;
TIMER_1->RELOAD = 65000;
TIMER_1->CTRL = (1<<3);

}



void GPIO7_IRQHandler (void) //Прерывание от положительного фронта порта H[6] от информации для датчика готовности.
{

TIMER_1->VALUE = 65000;

GPIO_H->DATAOUT|=(1<<7); // "1" на оптореле.
}

void TIM2_IRQHandler (void) //Прерывание от таймера 1 при отсутствии информации.
{
TIMER_1->INT.INTCLEAR=1;
GPIO_H->DATAOUT&=~(1<<7); // 0 на оптореле.

}



void main(void)
{
for (m=1; m<=200000; m++){}
InitPort();
//InitSRAM ();
Init1508PL8T ();
//InitCLK();
InitTimer ();
NT_Энвик->ISER[0]|=(1<<4); // Разрешение прерывания Timer 1.
TIMER_1->CTRL|=(1<<0); // Пуск таймера 1.
GPIO_H->INTENSET=(1<<6); //Разрешено прерывание по H[6], поступает информация (если нужен датчик готовности).
NT_Энвик->ISER[3]|=(1<<18); // Разрешение прерывания порта H.
//NT_Энвик->ISER[0]|=(1<<3); // Разрешение прерывания Timer 0.

while(1);

}

Аватара пользователя
Disona
Сообщения: 59
Зарегистрирован: 06 дек 2016, 11:18
Предприятие: НПФ Вектор
Откуда: Москва
Contact:

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение Disona » 02 мар 2021, 15:53

А он считает вообще? Может, не вынули его из ресета в системных регистрах микроконтроллера?
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"

IT124NPOIT
Сообщения: 24
Зарегистрирован: 19 янв 2017, 18:37

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение IT124NPOIT » 02 мар 2021, 18:02

Да, добавил common_reg->periferial_reset1|=(1<<5);
, но прерывание все равно не работает.

Аватара пользователя
Лашкевич
Сообщения: 212
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение Лашкевич » 02 мар 2021, 18:04

Запустите готовые примеры с битбакета, проверьте там, должно всё заработать. Адаптируйте примеры для себя.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

IT124NPOIT
Сообщения: 24
Зарегистрирован: 19 янв 2017, 18:37

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение IT124NPOIT » 09 мар 2021, 17:11

Собрал из готового проекта, тоже ничего не помогает, не знаю, что и делать.
В своем проекте порты работают, общение с внешней памятью происходит, прерывание по портам работает, а таймер не считает, в прерывание соответственно не входит. Плата своя, не отладочная. Использую IAR 7.40.
Ставлю для проверки цикл:
While (timer_1->value!=0){}, не входит.
Может кто что посоветует?
Вложения
main.c
(3.24 КБ) 9 скачиваний

IT124NPOIT
Сообщения: 24
Зарегистрирован: 19 янв 2017, 18:37

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение IT124NPOIT » 10 мар 2021, 17:01

Может быть бесплатная версия IAR 7.40 урезает функционал? Это я к тому, что таймеры не работают.

IT124NPOIT
Сообщения: 24
Зарегистрирован: 19 янв 2017, 18:37

Re: Не входит 1921вк1т в прерывание от таймера

Сообщение IT124NPOIT » 25 мар 2021, 15:55

Наверное об этом можно было бы догодаться, но все таки в техническом описании на 1921 нужно написать, в частности в главе о таймерах, что в регистре сброса бит устанавливается в самом начале инициализации переферийного блока. А я бит сброса устанавливал в конце и регистры таймера не программировались.

Ответить

Вернуться в «32-разрядные микроконтроллеры»

Пользователи онлайн

Сейчас этот форум просматривают: dav, serg_vega и 3 гостя