mtronic 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба Здравствуйте! Начинаю разбираться с LPC2368. Использую IAR 5.0 Уже писал в другую тему - не работали порты GPIO. Они так и не заработали.. Теперь новая проблема:) Не работает модуль PWM1. Написал программу: #include <iolpc2368.h> int main(void) { PCONP_bit.PCPWM1=1; PWM1MR0=10000; PWM1MR1=5000; PWM1MR2=7500; PINSEL4_bit.P2_0=1; PINSEL4_bit.P2_1=1; PINSEL4_bit.P2_0=0; PINSEL4_bit.P2_1=0; PINSEL4_bit.P2_0=1; PINSEL4_bit.P2_1=1; PWM1TCR_bit.CR = 0x1; PWM1TCR_bit.CE = 0x1; PWM1TCR_bit.PWMEN=0x1; PWM1MCR_bit.PWMMR0R = 0x1; PWM1PCR_bit.PWMSEL2=0x1; PWM1PCR_bit.PWMENA1=0x1; PWM1PCR_bit.PWMENA2=0x1; PWM1TCR_bit.CR = 0x0; PWM1LER_bit.EM0L = 0x1; PWM1LER_bit.EM1L = 0x1; PWM1LER_bit.EM2L = 0x1; PWM1TC = 0xffff1fff; while (1) { }; } А на осциллографе - тишина... Строчку про PWM1TC добавил, чтобы меньше считать устройству было до вступления в силу новых значений MR0, MR1 и MR2 Подскажите, пожалуйста, что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Может быть мои разборы с PWM для LPC2468 поможет?! PINSEL2|= (3UL << 4); //PINMODE???= ???; PWM0MR0 = 9000; PWM0MR1 = 8000; PWM0LER = 3; PWM0IR = 0; PWM0TCR = (1UL << 0) | (1UL << 3); PWM0CTCR = 0; PWM0MCR = (1UL << 1); PWM0CCR = 0; PWM0PCR = (1UL << 9); PWM0PR = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mtronic 0 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Ура! :08: Я добил её!))) В общем ниже прога. Она рабочая. LPC2368, IAR 5.0, J-Tag. Программа запускает выводы PWM1.1 (в режиме single edge) и PWM1.4 (в режиме double edge). Частота ШИМ 10000*Tclk. Длительность импульса на первом выводе 2000*Tclk, на четвертом 4000*Tclk. Четвертый запускается сразу после первого. #include <iolpc2368.h> int main(void) { PCONP_bit.PCPWM1 = 1; PCLKSEL0_bit.PCLK_PWM1 = 2; PINSEL4_bit.P2_0 = 1; PINSEL4_bit.P2_3 = 1; PINMODE4_bit.P2_0 = 2; PINMODE4_bit.P2_3 = 2; PWM1TCR_bit.PWMEN = 0; PWM1TCR_bit.CE = 0; PWM1TCR_bit.CR = 1; PWM1CTCR_bit.CM = 0; PWM1MCR_bit.PWMMR0R = 1; PWM1PCR_bit.PWMSEL4 = 1; PWM1PCR_bit.PWMENA1 = 1; PWM1PCR_bit.PWMENA4 = 1; PWM1PR = 0; PWM1MR0 = 10000; PWM1MR1 = 2000; PWM1MR3 = 2000; PWM1MR4 = 6000; PWM1LER = 0x1B; PWM1TCR_bit.PWMEN = 1; PWM1TCR_bit.CR = 0; PWM1TCR_bit.CE = 1; while (1) { }; } Пока особо не разбирался, в чём разница по сравнению с первой версией. Но в итоге эта работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться