Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2368 - PWM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
mtronic
Здравствуйте!

Начинаю разбираться с LPC2368. Использую IAR 5.0
Уже писал в другую тему - не работали порты GPIO.
Они так и не заработали..

Теперь новая проблемаsmile.gif
Не работает модуль 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
Может быть мои разборы с 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
Ура! 08.gif
Я добил её!)))

В общем ниже прога. Она рабочая. 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) { };
}


Пока особо не разбирался, в чём разница по сравнению с первой версией. Но в итоге эта работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.