Вот я тут написал как я это понимаю и установки привел, мысли кончились. PWM у меня на пине p0.21 ШИМ (PWM5)
Идея такая в регистр сравнения PWMMR0 записывается значение устанавливающее период ШИМ, у меня это значение 16-ти разрядное и равно 65530.
И конфигурируется PWM Match Control Register так чтобы при достижении этого значение счетчиком он обнулялся в позиции номер 3 это сделано.
В регистр PWMMR5 записывается текущие значение ШИМ у меня оно в цикле while постепенно изменяется от 0 до 65530
При начале периода выход P0.21 должен быть "1", после того как значение таймера достигнет значения в регистре PWMMR5 ,P0.21 обнулится до конца периода.
Еще момент после того как записывается значение а регистр сравнения PWMMR5 нужно, устанровить бить PWMLER_bit.EM5L = 1 для того чтобы это значение переписалось в теневой регистр откуда происходит сравнение со значение счетчика.
Может я что-то недопонял?
Вот как я конфигурировал PWM
1).//----------- PWM Inicialization ----------------
PINSEL1_bit.P0_21 = 1; // Конфигурирую пин P0.21 на работу в режиме ШИМ (PWM5)
2).//--------- PWM Control Register -------------
PWMPCR_bit.SEL5 = 0; //ШИМ работает по одному перепаду
PWMPCR_bit.ENA5 = 1; //PWM5 output enable
3).//--------- PWM Match Control Register -------
PWMMCR_bit.MR0RES = 1; // Обнуляю регистр сравнения PWMMMR0 когда таймер досчитает до 65530
4).//--------- ШИМ регистры сравнения --------------
PWMMR0 = 65530 ; // ШИМ зарядил на 16 разрядов
PWMMR5=0; // В этот регистр сравнения пока ноль
5).//--------- PWM Latch Enable Register -------
PWMLER_bit.EM0L =1; //Переписываю из регистра сравнения PWM0 в теневой регистр сравнения из которого собственно и производится сравнение со значением счетчика
PWMLER_bit.EM5L =1; // Тоже только для регистра 5
6).//--------- PWM Prescaller Register --------
PWMPR = 0x00000001;// Setup PWM Prescaller Register
7).//-------- PWM Timer Control Register --------
PWMTCR_bit.CR = 1; // Counter Reset
PWMTCR_bit.CE = 1; // Counter Enable
PWMTCR_bit.PWMEN = 1; // PWM Enable
//======= WORK part program ========
while(1)
{
for (i=0;i<65530;i++)
{
PWMMR5 = i;
PWMLER_bit.EM5L = 1; //Latch Enable registr for PWM5
for (j=0;j<5000;j++) b=1; // типа задержка
}
}
-
- Разобрался в чем было дело smartleds(296 знак., 21.09.2006 15:25)