К1921ВК01Т (арм Cortex-M4F)

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

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

dav
Сообщения: 209
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение dav »

serg_vega писал(а): 13 апр 2021, 12:25 А для какой платы, собственно, примеры niietcm4_pd? КФДЛ.441546.016Б (NIIET-EVAL-K1921VK01T) это плата Вектора mcontrol?
На сайте изделия с таким децимальным номером я не вижу....

https://niiet.ru/product-category/soft/
Доброго времени суток!
Примеры для платы макетно-отладочной АО "НИИЭТ" (КФДЛ.441461.003) . Репозиторий будет скорректирован в ближайшее время.
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

Ну что за новая хрень: копирую проект из Templates\\k1921vk01t-bare\арм\. Компилирую, работает, создаю на его базе пару простеньких проектов для платы вектора - работает. Хочу оставить в программе коммент на русском... и крокозябры. Keil V5.26.00. Открываю свой старый проект для STM F7, проверяю ... и комментарии на русском без крокозябр. Сравниваю поля в Edit-> Options ... вроде совпадают. Так какого моржового? :shock:
Аватара пользователя
Лашкевич
Сообщения: 373
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Лашкевич »

С кеил не работал, но по симптомам скорее всего разные кодировки файлов, в одном юникод, в другом ASCII. Попробуйте открыть другим текстовым редактором, который в явном виде умеет работать с кодировками и менять их, сравните, пересохраните.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

О как. А в проекте от Вектора (VectorCARDBlinky) комментарии на русском печатаются. Господа из НИИЭТа что я делаю не так?
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

Лашкевич писал(а): 16 апр 2021, 11:58 С кеил не работал, но по симптомам скорее всего разные кодировки файлов, в одном юникод, в другом ASCII. Попробуйте открыть другим текстовым редактором, который в явном виде умеет работать с кодировками и менять их, сравните, пересохраните.
Ну да. Полчаса танцев с бубном и ВинВорд))) Спасибо.
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

А как конкретно, в граммах запустить секвенсор АЦП, допустим №0, на однократное преобразование. Так называемый программный запуск.
У меня такой код:
ADC_SEQ_Cmd(ADC_SEQ_Module_0, ENABLE);
NT_ADC->PSSI=0x00000001;
ADC_SEQ_SWReq();
И не работает!
Работа в 10 разрядном режиме: Там что значения считываются left aligned? То есть все то же 12 разрядное число только младшие биты можно отбросит?
Аватара пользователя
Лашкевич
Сообщения: 373
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Лашкевич »

Вот моя инициализация АЦП для программного запуска, оцифровка всех каналов, 12 разрядов.

Код: Выделить всё

	/* Запрет всех секвенсоров */
	NT_ADC->ACTSS = 0;

	/* Сброс счётчиков прерываний и измерений*/
	NT_ADC->SEQ[0].OP = 0;
	NT_ADC->SEQ[1].OP = 0;
	NT_ADC->SEQ[2].OP = 0;
	NT_ADC->SEQ[3].OP = 0;
	NT_ADC->SEQ[4].OP = 0;
	NT_ADC->SEQ[5].OP = 0;
	NT_ADC->SEQ[6].OP = 0;
	NT_ADC->SEQ[7].OP = 0;

	NT_ADC->ACTSS_bit.ASEN0 = 1;
	NT_ADC->IM_bit.MASK0 = 1;
	NT_ADC->EMUX_bit.EM0 = 0; // программный запуск установкой бита GSYNC в регистре PSSI
	NT_ADC->PSSI_bit.SS0 = 1;
	NT_ADC->SEQ[0].CTL_bit.RCNT = 0; //Перезапуск не требуется
	NT_ADC->SEQ[0].CTL_bit.ICNT = 0;

	NT_ADC->PP_bit[0].OM = 0x3; //OM2-OM0 = ’011’ All blocks active (ADC plus internal buffers plus internal bandgap).
	NT_ADC->PP_bit[1].OM = 0x3;
	NT_ADC->PP_bit[2].OM = 0x3;
	NT_ADC->PP_bit[3].OM = 0x3;
	NT_ADC->PP_bit[4].OM = 0x3;
	NT_ADC->PP_bit[5].OM = 0x3;
	NT_ADC->PP_bit[6].OM = 0x3;
	NT_ADC->PP_bit[7].OM = 0x3;
	NT_ADC->PP_bit[8].OM = 0x3;
	NT_ADC->PP_bit[9].OM = 0x3;
	NT_ADC->PP_bit[10].OM = 0x3;
	NT_ADC->PP_bit[11].OM = 0x3;

	//Включаем необходимые модули АЦП
	NT_ADC->PP_bit[0].ENA = 1;
	NT_ADC->PP_bit[1].ENA = 1;
	NT_ADC->PP_bit[2].ENA = 1;
	NT_ADC->PP_bit[3].ENA = 1;
	NT_ADC->PP_bit[4].ENA = 1;
	NT_ADC->PP_bit[5].ENA = 1;
	NT_ADC->PP_bit[6].ENA = 1;
	NT_ADC->PP_bit[7].ENA = 1;
	NT_ADC->PP_bit[8].ENA = 1;
	NT_ADC->PP_bit[9].ENA = 1;
	NT_ADC->PP_bit[10].ENA = 1;
	NT_ADC->PP_bit[11].ENA = 1;


	//усреднитель выключен 
	//(но для большинства задач полезно включить!)
	NT_ADC->SAC_bit.AVG0=0;
	NT_ADC->SAC_bit.AVG1=0;
	NT_ADC->SAC_bit.AVG2=0;
	NT_ADC->SAC_bit.AVG3=0;
	NT_ADC->SAC_bit.AVG4=0;
	NT_ADC->SAC_bit.AVG5=0;
	NT_ADC->SAC_bit.AVG6=0;
	NT_ADC->SAC_bit.AVG7=0;
	NT_ADC->RICNT_bit.AVG8=0;
	NT_ADC->RICNT_bit.AVG9=0;
	NT_ADC->RICNT_bit.AVG10=0;
	NT_ADC->RICNT_bit.AVG11=0;


	//настраиваем компараторы каждый на свой канал АЦП -
	//из компараторов будем забирать оцифрованные данные, как из ADC result
	NT_ADC->DCCTL_bit[0].CHNL = 0;
	NT_ADC->DCCTL_bit[1].CHNL = 1;
	NT_ADC->DCCTL_bit[2].CHNL = 2;
	NT_ADC->DCCTL_bit[3].CHNL = 3;
	NT_ADC->DCCTL_bit[4].CHNL = 4;
	NT_ADC->DCCTL_bit[5].CHNL = 5;
	NT_ADC->DCCTL_bit[6].CHNL = 6;
	NT_ADC->DCCTL_bit[7].CHNL = 7;
	NT_ADC->DCCTL_bit[8].CHNL = 8;
	NT_ADC->DCCTL_bit[9].CHNL = 9;
	NT_ADC->DCCTL_bit[10].CHNL = 10;
	NT_ADC->DCCTL_bit[11].CHNL = 11;
	NT_ADC->DCCTL_bit[12].CHNL = 12;
	NT_ADC->DCCTL_bit[13].CHNL = 13;
	NT_ADC->DCCTL_bit[14].CHNL = 14;
	NT_ADC->DCCTL_bit[15].CHNL = 15;
	NT_ADC->DCCTL_bit[16].CHNL = 16;
	NT_ADC->DCCTL_bit[17].CHNL = 17;
	NT_ADC->DCCTL_bit[18].CHNL = 18;
	NT_ADC->DCCTL_bit[19].CHNL = 19;
	NT_ADC->DCCTL_bit[20].CHNL = 20;
	NT_ADC->DCCTL_bit[21].CHNL = 21;
	NT_ADC->DCCTL_bit[22].CHNL = 22;
	NT_ADC->DCCTL_bit[23].CHNL = 23;

	//Показываем, с каких каналов нужно собирать данные
	NT_ADC->SEQ[0].DCP = 0x007FFFFF;	// Каналы в компараторы, чтобы с них брать аналоговые результаты без фифо

Для забора результатов:

Код: Выделить всё

Uint16 channel4 = NT_ADC->DCVAL_bit[4].VAL;

Для запуска программного, в прерывании:

Код: Выделить всё

	// Программно запускаем АЦП
	NT_ADC->PSSI_bit.GSYNC = 1;
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
dav
Сообщения: 209
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение dav »

Пример реализации запуска секвенсора АЦП по программному запросу:

Код: Выделить всё

    // Код инициализации АЦП
    uint32_t i;
    NT_COMMON_REG->APB_CLK_bit.ADCEN = 1;
    // Обход зависших секвенсоров от выставленных запросов по 0 каналу
    // цифровыми компараторами. Хотя в данном случае это необязательно, т.к. 0-ой канал используется.
    for (i = 0; i < 24; i++) {
        NT_ADC->DCCTL_bit[i].CHNL = 0x1F;
    }

    // включаем тактирование 0-11 модулей ацп (0 -22 каналы)
    // делим системную частоту на 8, и получаем тактирование АЦП 12,5МГц.
	NT_COMMON_REG->ADC_CTRL0 = 0x0F0F0F0F;
	NT_COMMON_REG->ADC_CTRL1 = 0x0F0F0F0F;		
	NT_COMMON_REG->ADC_CTRL2 = 0x0F0F0F0F;		
		
	NT_ADC->ACTSS = 0; //sequencers are turned off
	NT_ADC->SEQ[0].OP = 0; //number of sequencer module in brackets
	NT_ADC->SAC = 0x22222222; //Average 4
	NT_ADC->RICNT = 0x2222;
	for(i=0;i<12;i++) {
		NT_ADC->PP_bit[i].OM = ((0 << 6) | // single on ch B
                              (0 << 4) | // single on ch A
                              (1 << 3) | // 10 bit
                              (3 << 0)); // modeactive
			NT_ADC->PP_bit[i].ENA = 1; // ADC Enable
		}	
		
    // настройка секвенсора 0
    NT_ADC->EMUX_bit.EM0 = 0x0;    /*!< Запуск по программному запросу. */
	NT_ADC->PSSI_bit.SS0 = 1;
    NT_ADC->SEQ[0].MUX = 0x00FFFFFF; // ch 0 - 23		

    // включаем прерывание секвенсора после каждого измерения
	NT_ADC->SEQ[0].CTL_bit.RCNT = 0;
    NT_ADC->SEQ[0].CTL_bit.ICNT = 0;
    NT_ADC->IM_bit.MASK0 = 0;
    //Энвик_EnableIRQ(ADC_SEQ0_IRQn);
	
	// Включаем секвенсор
    NT_ADC->ACTSS_bit.ASEN0 = 1;      //enable seq0
Запуск секвенсора АЦП:
NT_ADC->PSSI_bit.GSYNC = 1;
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

Господа из НИИЭТ! Ваш код НЕ РАБОТАЕТ! Просто скопированный с форума (функция инициализации взамен циклического) не вызывает входа в прерывание (которое работало с циклическим кодом).просто не вызывает входа в функцию прерывания. Вот ставишь галочку в отладке Кейла на pending interrupt №81 и входит, а так нет!
Что за закомментированая функция //Энвик_EnableIRQ(ADC_SEQ0_IRQn);? У Вас компилятор воспринимает русские буквы в названиях функций :shock: ?
Последний раз редактировалось serg_vega 19 апр 2021, 17:58, всего редактировалось 1 раз.
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение serg_vega »

Вообще я не понял как должен работать код в котором Энвик_EnableIRQ(ADC_SEQ0_IRQn); закомментирована! Просто запрещены прерывания от нулевого секвенсора.
Ответить

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