Руководство по настройке и использованию открытого ПО

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

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

prostoRoman
Сообщения: 57
Зарегистрирован: 11 июл 2014, 15:06

Re: Руководство по настройке и использованию открытого ПО

Сообщение prostoRoman »

c2n писал(а):Есть проблемы при попытке сделать "по образу и подобию" для QTCreator 4.2.x

При сборке отстреливает ошибками...
С:gcc/bin/.../lib/armv7e-m/fpu/\libc_nano.a(lib_a-exit.o): In function 'exit'
Exit.c ....Undefined reference to _exit
Collect2.exe error.. ld returned 1 exit status...

Подозреваю что для более свежей кутэшки надо все все все переделывать, вот только как? - не соображу
А хочется использовать именно 4.2 версию? Более раннюю, где всё работает, использовать нельзя?
Желательно видеть полный лог событий, поискать аналог makefile в директории сборки, убедиться, что все сделанные настройки понятны и нужны, выложить проект, где собирается простейший mian() { while(1); }
А то это гадание какое-то...
petrovitch
Сообщения: 106
Зарегистрирован: 15 фев 2017, 19:07

Re: Руководство по настройке и использованию открытого ПО

Сообщение petrovitch »

Где всё-таки удобнее работать: в Eclipse, Qt или Keil/IAR?
Что скажут представители НИИЭТ?

Я заметил, что примеров больше для открытых сред...
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Руководство по настройке и использованию открытого ПО

Сообщение bkolbov »

petrovitch писал(а):Где всё-таки удобнее работать: в Eclipse, Qt или Keil/IAR?
Что скажут представители НИИЭТ?

Я заметил, что примеров больше для открытых сред...
На вкус и цвет, как говорится...
Выбирайте ту среду, которая лучше других отвечает вашим требованиям =)
dav
Сообщения: 208
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Руководство по настройке и использованию открытого ПО

Сообщение dav »

petrovitch писал(а):Где всё-таки удобнее работать: в Eclipse, Qt или Keil/IAR?
Что скажут представители НИИЭТ?

Я заметил, что примеров больше для открытых сред...
В CodeMaster++[арм] удобно отлаживать проекты, т.к. функционал заточен под МК К1921ВК01Т
petrovitch
Сообщения: 106
Зарегистрирован: 15 фев 2017, 19:07

Re: Руководство по настройке и использованию открытого ПО

Сообщение petrovitch »

dav писал(а): В CodeMaster++[арм] удобно отлаживать проекты, т.к. функционал заточен под МК К1921ВК01Т
...сия среда платная? Это как я понимаю детище Фитона.

В руководстве по началу работы с К1921ВК01Т упор делается на IAR.
Другие пользователи кристалла очень хорошо отзываются о среде на основе Eclipse,
а Ваши же коллеги ещё и Qt предлагают использовать.
Если подвести итог, каковы ++ и -- различных вариантов?
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: Руководство по настройке и использованию открытого ПО

Сообщение hgost »

petrovitch писал(а): Если подвести итог, каковы ++ и -- различных вариантов?
CodeMaster++[арм] есть бесплатная версия с ограничением по коду, есть платная без ограничений. Ощутимый плюс - все работает сразу из коробки, не надо ничего настраивать, все необходимые файлы и настройки уже присутствуют. Есть симулятор, можно поотлаживать код, посмотреть как пишутся регистры, отладчик, всякие полезные опции - просмотр памяти и переменных, анализатор выполнения кода, анализатор эффективности, пользовательские сценарии (что-то вроде скриптов). CodeMaster будет очень кстати, если только начинаете работать с контроллером. Можно избавить себя от проблем по настройке, совместимости версий и прочих недостатков свободных сред.

Свободные среды (будь то Eclipse, QT, CodeBlocks) обладают наверное даже бОльшими возможностями, но все надо настраивать, есть всевозможные плагины, дополнения и расширения которые могут сделать работу удобнее и приятнее. Но придется потратить некоторое время на то, чтобы со всем этим разбираться, настроить, попробовать различные варианты. Если Вы уже работали в какой-то из этих сред (не обязательно с этим контроллером), будет немного проще. И тут уже дело привычки и вкуса - что больше понравится.

Мы при разработке пользуемся разными средами - кто к чему привык. И в каждой из них есть свои плюсы. Уже ко многим средам есть примеры, советы по настройке

Подводя итог:
если есть опыт работы с контроллерами, некоторое время и желание разбираться с настройкой среды - свободные среды;
если нет опыта, или хочется сразу побыстрее начать работу - CodeMaster;
если привыкли к какой-то среде больше (работали в Keil, IAR, свободные среды) - используйте их
если не понравился какой-то продукт - всегда можно попробовать другие, разнообразие позволяет)
prostoRoman
Сообщения: 57
Зарегистрирован: 11 июл 2014, 15:06

Re: Руководство по настройке и использованию открытого ПО

Сообщение prostoRoman »

Ещё можно добавить, что Фитоновское детище довольно самобытное (свой графический интерфейс "привет из 90х", свои хоткеи, да и в целом любит показывать свой нрав) и поддерживает только Фитоновские программаторы (в отличии от тех же Keil и IAR) которые не поддерживаются больше никем, а стоят прилично. По крайней мере всё это было какое-то время назад, может есть подвижки к лучшему...
petrovitch
Сообщения: 106
Зарегистрирован: 15 фев 2017, 19:07

Re: Руководство по настройке и использованию открытого ПО

Сообщение petrovitch »

Можно ли привести примеры использования взаимной синхронизации таймеров ШИМ?
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Руководство по настройке и использованию открытого ПО

Сообщение bkolbov »

petrovitch писал(а): 19 апр 2017, 13:41 Можно ли привести примеры использования взаимной синхронизации таймеров ШИМ?
Добрый день!
Можно. Только распишите, пожалуйста, поподробнее что именно вы хотели бы увидеть.
Аватара пользователя
Лашкевич
Сообщения: 372
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: Руководство по настройке и использованию открытого ПО

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

Пример инициализации модулей ШИМ для работы с трехфазным двигателем:

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

	NT_COMMON_REG->PWM_SYNC_bit.TBCLKSYNC = 0; //синхронизация таймеров - сброс внутренних счетчиков
	/* Синхронизировать ШИМы */
	NT_COMMON_REG->PWM_CTRL = 0x8;

// ------------------------------------------------------------------------
	// Настраиваем модуль ePWM1
	// ------------------------------------------------------------------------
	if (p->Frequency < PWM_FREQ_MIN)
		p->Frequency = PWM_FREQ_MIN;
	if (p->Frequency > PWM_FREQ_MAX)
		p->Frequency = PWM_FREQ_MAX;
	NT_PWM0->TBPRD = _IQ10div(_IQ10(CORE_CLK/1000.0), p->Frequency << 1) >> 10; //период

	p->k_pwm = NT_PWM0->TBPRD;
	p->FreqPrev = p->Frequency;                 //предыдущая частота
	NT_PWM0->TBPHS_bit.TBPHS = 0x0000;            // Phase is 0
	NT_PWM0->TBCTR = 0x0000;                       // Clear counter

	// Setup counter mode
	NT_PWM0->TBCTL_bit.PRDLD = TB_SHADOW;        // загрузка TBPRD при TBCTR = 0
	NT_PWM0->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN;  // Count up-down
	NT_PWM0->TBCTL_bit.PHSEN = TB_DISABLE;         // Disable phase loading
	NT_PWM0->TBCTL_bit.PHSDIR = TB_UP;      // Считать вверх после загрузки фазы
	NT_PWM0->TBCTL_bit.HSPCLKDIV = 0;     // High Speed Time-base Clock Prescale
	NT_PWM0->TBCTL_bit.CLKDIV = 0;                 // Time-base Clock Prescale
	NT_PWM0->TBCTL_bit.SYNCOSEL = TB_CTR_ZERO; // выдаём синхро-сигнал при TBCTR = 0

	// Setup shadowing
	NT_PWM0->CMPCTL_bit.SHDWAMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM0->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO;   // Load on period and zero

	NT_PWM0->CMPCTL_bit.SHDWBMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM0->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO;   // Load on period and zero

	// Set Compare values
	NT_PWM0->CMPA_bit.CMPA = 0;                   // Set compare A value

	// Set actions
	NT_PWM0->AQCTLA = AQ_EPWM_DISABLE; // для начала события для PWM1A запрещены
	NT_PWM0->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика
	NT_PWM0->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании
	NT_PWM0->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании

	//Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ
	NT_PWM0->AQCTLB = NT_PWM0->AQCTLA; // для начала события для PWM1B запрещены
	NT_PWM0->AQCTLB_bit.ZRO = NT_PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика
	NT_PWM0->AQCTLB_bit.CAU = NT_PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании
	NT_PWM0->AQCTLB_bit.CAD = NT_PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании

	NT_PWM0->AQSFRC_bit.RLDCSF = 3; //реагировать на софтвенную привязку ног без теневого регистра

	// Setup Deadband
	// DBRED = DBFED = 150 * Tм_мкс / 4
	NT_PWM0->DBRED = _IQ4mpy(_IQ4(150 / 4), p->DeadBand >> 20) >> 4;
	NT_PWM0->DBFED = NT_PWM0->DBRED;
	NT_PWM0->DBCTL_bit.IN_MODE = DBA_RED_DBB_FED;    //s4=0, s5=1 на картинке DT
	NT_PWM0->DBCTL_bit.OUT_MODE = DB_FULL_ENABLE;    //S1=1, S2=2 на картинке DT
	NT_PWM0->DBCTL_bit.POLSEL = DB_ACTV_HIC;       // PWM1B = !PWM1A; S2=0, S3=1

	NT_PWM0->ETSEL_bit.INTSEL = ET_DISABLE;        // Disable INT (шимовское)
	NT_PWM0->ETSEL_bit.INTEN = 0;                  // Disable INT

	NT_PWM0->TBCTL_bit.FREE_SOFT = 0;

	//разрешаем TZ быть источником аппаратной аварии (one-shot)
	//   NT_PWM0->TZSEL_bit.OSHT1 = TZ_ENABLE;
//    NT_PWM0->TZSEL_bit.OSHT2 = TZ_ENABLE;
//    NT_PWM0->TZSEL_bit.OSHT3 = TZ_ENABLE;

	// Trip-Zone
	NT_PWM0->TZCTL_bit.TZA = TZ_STATE;   // по событию "One-Shot Trip" переводим
	NT_PWM0->TZCTL_bit.TZB = TZ_STATE;          // ШИМ выходы в нужное состояние

	//Для VectorCARD от ШИМа запускается ADC
	//NT_PWM0->ETSEL_bit.SOCAEN = 1;		// Разрешить запуск ацп
	//NT_PWM0->ETSEL_bit.SOCASEL = 1;		// Запускать при CTR == 0 (Underflow)

	// ------------------------------------------------------------------------
	// Настраиваем модуль ePWM2
	// ------------------------------------------------------------------------
	// Setup TBCLK
	NT_PWM1->TBPRD = NT_PWM0->TBPRD;              //период такой же
	NT_PWM1->TBPHS_bit.TBPHS = 0x0001;            // Фаза равна 1 из-за баги в проце (0 не работает)
	NT_PWM1->TBCTR = 0x0000;                       // Clear counter

	// Setup counter mode
	NT_PWM1->TBCTL_bit.PRDLD = TB_SHADOW;        // загрузка TBPRD при TBCTR = 0
	NT_PWM1->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN;  // Count up-down
	NT_PWM1->TBCTL_bit.PHSEN = TB_ENABLE;         // Enable phase loading
	NT_PWM1->TBCTL_bit.PHSDIR = TB_UP;      // Считать вверх после загрузки фазы
	NT_PWM1->TBCTL_bit.HSPCLKDIV = 0;     // High Speed Time-base Clock Prescale
	NT_PWM1->TBCTL_bit.CLKDIV = 0;           // Time-base Clock Prescale
	NT_PWM1->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // пропускаем синхро-сигнал "насквозь"

	// Setup shadowing
	NT_PWM1->CMPCTL_bit.SHDWAMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM1->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO;   // Load on period and zero

	NT_PWM1->CMPCTL_bit.SHDWBMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM1->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO;   // Load on period and zero

	// Set Compare values
	NT_PWM1->CMPA_bit.CMPA = 0;                   // Set compare A value

	// Set actions
	NT_PWM1->AQCTLA = AQ_EPWM_DISABLE; // для начала события запрещены
	NT_PWM1->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика
	NT_PWM1->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании
	NT_PWM1->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании

	//Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ
	NT_PWM1->AQCTLB = NT_PWM0->AQCTLA; // для начала события для PWM1B запрещены
	NT_PWM1->AQCTLB_bit.ZRO = NT_PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика
	NT_PWM1->AQCTLB_bit.CAU = NT_PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании
	NT_PWM1->AQCTLB_bit.CAD = NT_PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании

	NT_PWM1->AQSFRC_bit.RLDCSF = 3; //реагировать на софтвенную привязку ног без теневого регистра

	// Active high complementary PWMs - Setup Deadband
	NT_PWM1->DBRED = NT_PWM0->DBRED;
	NT_PWM1->DBFED = NT_PWM1->DBRED;
	NT_PWM1->DBCTL_bit.IN_MODE = NT_PWM0->DBCTL_bit.IN_MODE;
	NT_PWM1->DBCTL_bit.OUT_MODE = NT_PWM0->DBCTL_bit.OUT_MODE;
	NT_PWM1->DBCTL_bit.POLSEL = NT_PWM0->DBCTL_bit.POLSEL;

	// Interrupt where we will change the Compare Values
	NT_PWM1->ETSEL_bit.INTSEL = ET_DISABLE;        // Disable INT
	NT_PWM1->ETSEL_bit.INTEN = 0;                  // Disable INT

	NT_PWM1->TBCTL_bit.FREE_SOFT = 0;

	//разрешаем TZ быть источником аппаратной аварии (one-shot)
	//   NT_PWM1->TZSEL_bit.OSHT1 = TZ_ENABLE;
	//   NT_PWM1->TZSEL_bit.OSHT2 = TZ_ENABLE;
	//   NT_PWM1->TZSEL_bit.OSHT3 = TZ_ENABLE;

	// Trip-Zone
	NT_PWM1->TZCTL_bit.TZA = TZ_STATE;   // по событию "One-Shot Trip" переводим
	NT_PWM1->TZCTL_bit.TZB = TZ_STATE;          // ШИМ выходы в нужное состояние

	// ------------------------------------------------------------------------
	// Настраиваем модуль ePWM3
	// ------------------------------------------------------------------------
	// Setup TBCLK
	NT_PWM2->TBPRD = NT_PWM0->TBPRD;
	NT_PWM2->TBPHS_bit.TBPHS = 0x0001;            // Фаза равна 1 из-за баги в проце (0 не работает)
	NT_PWM2->TBCTR = 0x0000;                       // Clear counter

	// Setup counter mode
	NT_PWM2->TBCTL_bit.PRDLD = TB_SHADOW;        // загрузка TBPRD при TBCTR = 0
	NT_PWM2->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN;  // Count up-down
	NT_PWM2->TBCTL_bit.PHSEN = TB_ENABLE;         // Enable phase loading
	NT_PWM2->TBCTL_bit.PHSDIR = TB_UP;      // Считать вверх после загрузки фазы
	NT_PWM2->TBCTL_bit.HSPCLKDIV = 0;     // High Speed Time-base Clock Prescale
	NT_PWM2->TBCTL_bit.CLKDIV = 0;           // Time-base Clock Prescale
	NT_PWM2->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // разрешаем выдачу синхро-сигнала

	// Setup shadowing
	NT_PWM2->CMPCTL_bit.SHDWAMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM2->CMPCTL_bit.LOADAMODE = CC_CTR_ZERO;   // Load on period and zero

	NT_PWM2->CMPCTL_bit.SHDWBMODE = CC_SHADOW;   //включить SHADOW для сравнения
	NT_PWM2->CMPCTL_bit.LOADBMODE = CC_CTR_ZERO;   // Load on period and zero

	// Set Compare values
	NT_PWM2->CMPA_bit.CMPA = 0;                   // Set compare A value

	// Set actions
	NT_PWM2->AQCTLA = AQ_EPWM_DISABLE; // для начала события запрещены
	NT_PWM2->AQCTLA_bit.ZRO = 1; //обнуляем при нуле счетчика
	NT_PWM2->AQCTLA_bit.CAU = 2; //включаем при сравнении и инкрементиовании
	NT_PWM2->AQCTLA_bit.CAD = 1; //обнуляем при сравнении и декрементровании

	//Для PWMB тоже самое, что для PWMА. Без инверсии. Инверсия далее в модуле МВ
	NT_PWM2->AQCTLB = NT_PWM0->AQCTLA; // для начала события для PWM1B запрещены
	NT_PWM2->AQCTLB_bit.ZRO = NT_PWM0->AQCTLA_bit.ZRO; //обнуляем при нуле счетчика
	NT_PWM2->AQCTLB_bit.CAU = NT_PWM0->AQCTLA_bit.CAU; //включаем при сравнении и инкрементиовании
	NT_PWM2->AQCTLB_bit.CAD = NT_PWM0->AQCTLA_bit.CAD; //обнуляем при сравнении и декрементровании

	NT_PWM2->AQSFRC_bit.RLDCSF = 3; //реагировать на софтвенную привязку ног без теневого регистра

	// Active high complementary PWMs - Setup Deadband
	NT_PWM2->DBRED = NT_PWM0->DBRED;
	NT_PWM2->DBFED = NT_PWM2->DBRED;
	NT_PWM2->DBCTL_bit.IN_MODE = NT_PWM0->DBCTL_bit.IN_MODE;
	NT_PWM2->DBCTL_bit.OUT_MODE = NT_PWM0->DBCTL_bit.OUT_MODE;
	NT_PWM2->DBCTL_bit.POLSEL = NT_PWM0->DBCTL_bit.POLSEL;

	// Interrupt where we will change the Compare Values
	NT_PWM2->ETSEL_bit.INTSEL = ET_DISABLE;        // Disable INT
	NT_PWM2->ETSEL_bit.INTEN = 0;                  // Disable INT

	//разрешаем TZ быть источником аппаратной аварии (one-shot)
	//  NT_PWM2->TZSEL_bit.OSHT1 = TZ_ENABLE;
	//  NT_PWM2->TZSEL_bit.OSHT2 = TZ_ENABLE;
	//  NT_PWM2->TZSEL_bit.OSHT3 = TZ_ENABLE;

	NT_PWM2->TBCTL_bit.FREE_SOFT = 0;

	// Trip-Zone
	NT_PWM2->TZCTL_bit.TZA = TZ_STATE;   // по событию "One-Shot Trip" переводим
	NT_PWM2->TZCTL_bit.TZB = TZ_STATE;          // ШИМ выходы в нужное состояние

	// ------------------------------------------------------------------------
	// Настраиваем модуль ePWM3 под АЦП
	// ------------------------------------------------------------------------
	// Setup TBCLK
	NT_PWM3->TBPRD = NT_PWM0->TBPRD;
	NT_PWM3->TBPHS_bit.TBPHS = 0x0001;       // Фаза равна 1 из-за баги в проце (0 не работает)
	NT_PWM3->TBCTR = 0x0000;                       // Clear counter

	// Setup counter mode
	NT_PWM3->TBCTL_bit.PRDLD = TB_SHADOW;        // загрузка TBPRD при TBCTR = 0
	NT_PWM3->TBCTL_bit.CTRMODE = TB_COUNT_UPDOWN;  // Count up-down
	NT_PWM3->TBCTL_bit.PHSEN = TB_ENABLE;         // Enable phase loading
	NT_PWM3->TBCTL_bit.PHSDIR = TB_UP;      // Считать вверх после загрузки фазы
	NT_PWM3->TBCTL_bit.HSPCLKDIV = 0;     // High Speed Time-base Clock Prescale
	NT_PWM3->TBCTL_bit.CLKDIV = 0;           // Time-base Clock Prescale
	NT_PWM3->TBCTL_bit.SYNCOSEL = TB_SYNC_IN; // разрешаем выдачу синхро-сигнала

	// Interrupt where we will change the Compare Values
	NT_PWM3->ETSEL_bit.INTSEL = ET_DISABLE;        // Disable INT
	NT_PWM3->ETSEL_bit.INTEN = 0;                  // Disable INT

	NT_PWM3->TBCTL_bit.FREE_SOFT = 0;

	NT_PWM3->ETSEL_bit.SOCAEN = 1;		// Разрешить запуск ацп
	NT_PWM3->ETSEL_bit.SOCASEL = 1;		// Запускать при CTR == 0 (Underflow)

	//сбрасываем все флаги аварий
	NT_PWM0->TZCLR = 0x7;
	NT_PWM1->TZCLR = 0x7;
	NT_PWM2->TZCLR = 0x7;



	//настройка ножек
	NT_GPIOG->ALTFUNCSET = (1 << 2) + (1 << 3) + (1 << 4);		//A[0],A[1],A[2]

	// Периферийная функция - PWM
	NT_COMMON_REG->GPIOPCTLA_bit.PIN10 = 2;

	NT_COMMON_REG->GPIOPCTLF_bit.PIN2 = 0;
	NT_COMMON_REG->GPIOPCTLF_bit.PIN4 = 0;
	NT_COMMON_REG->GPIOPCTLG_bit.PIN2 = 0;
	NT_COMMON_REG->GPIOPCTLG_bit.PIN3 = 0;
	NT_COMMON_REG->GPIOPCTLG_bit.PIN4 = 0;



//A[10], F[2], F[4]  ножки резета
	NT_GPIOA->ALTFUNCCLR = (1 << 10);		//B[0]

	NT_GPIOA->OUTENSET = (1 << 10);
	NT_GPIOF->OUTENSET = (1 << 2);
	NT_GPIOF->OUTENSET = (1 << 4);

	//A[10], F[2], F[4]
	//Синхронный запуск ШИМ
	NT_COMMON_REG->PWM_SYNC_bit.TBCLKSYNC = 0x1FF;

}

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

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