реклама на сайте
подробности

 
 
> PWM в LPC2378 работает только под отладчиком
richie
сообщение Feb 27 2008, 14:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261



Добрый день, Многоуважаемый All!

Пытаюсь на чипе LPC2378 запустить генерацию частоты (меандр, 50%, ~1,2 МГц)
ШИМом на канале 4.

И наблюдаю такую картину:
Под отладчиком частота генерится, все нормально.
Однако, если запускаю программу не в отладчке, то частоты нет...

При этом светодид, кнопки и UART0 обслуживаются.

Дамп регистров PWM:
1. При работе под отладчиком:
PWM1TC=00000001 (счетчик таймера изменяется от 0 до 9, что и нужно)
PWM1TCR=00000009
PWM1MR0=00000009 (период выходной последовательности PWM)
PWM1MR4=00000004 (смещение для нисходящего фронта)
PWM1PCR=00001000
PWM1MCR=00000002
PWM1LER=00000000
PCLKSEL0=AAAA8A2A (тактовая частота для PWM 12МГц, понизил для отладки)

2. Без отладчика:
PWM1TC=AE849F4C (счетчик изменяется циклически во всем диапазоне)
PWM1TCR=00000009
PWM1MR0=00000000 (период выходной последовательности PWM НЕ ЗАДАН)
PWM1MR4=00000000 (смещение для нисходящего фронта НЕ ЗАДАНО)
PWM1PCR=00001000
PWM1MCR=00000002
PWM1LER=00000000
PCLKSEL0=AAAA8A2A

Мысли иссякли и у меня и у электронщика...
В чем разникца исполнения программы под отладчикам и без?
Куда смотреть и что делать?

P.S. ARM только начали изучать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Feb 27 2008, 14:55
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(richie @ Feb 27 2008, 17:42) *
2. Без отладчика:
PWM1TC=AE849F4C (счетчик изменяется циклически во всем диапазоне)
....

А откуда вы знаете что в регистрах, без отладчика?
Макросы случайно никакие не используются при старте отладки?(какая среда, отладчик)
И еще хорошо бы исходник посмотреть
Go to the top of the page
 
+Quote Post
richie
сообщение Feb 27 2008, 15:09
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261



Цитата(KRS @ Feb 27 2008, 17:55) *
А откуда вы знаете что в регистрах, без отладчика?
Макросы случайно никакие не используются при старте отладки?(какая среда, отладчик)
И еще хорошо бы исходник посмотреть


1. Через УАРТ запрашию содержимое регистров.
2. Среда ИАР 4.41A, его отладчик через RDI и MT-Link.
3. Исходники:

Цитата
#define LER0_EN ( 1 << 0 )
#define LER1_EN ( 1 << 1 )
#define LER2_EN ( 1 << 2 )
#define LER3_EN ( 1 << 3 )
#define LER4_EN ( 1 << 4 )
#define LER5_EN ( 1 << 5 )
#define LER6_EN ( 1 << 6 )

#define TCR_CNT_EN 0x00000001
#define TCR_RESET 0x00000002
#define TCR_PWM_EN 0x00000008

#define PWMSEL2 ( 1 << 2 )
#define PWMSEL3 ( 1 << 3 )
#define PWMSEL4 ( 1 << 4 )
#define PWMSEL5 ( 1 << 5 )
#define PWMSEL6 ( 1 << 6 )
#define PWMENA1 ( 1 << 9 )
#define PWMENA2 ( 1 << 10 )
#define PWMENA3 ( 1 << 11 )
#define PWMENA4 ( 1 << 12 )
#define PWMENA5 ( 1 << 13 )
#define PWMENA6 ( 1 << 14 )

static void PWM_Init( void )
{
PWM1PR = 0x00000000;
PWM1TCR = TCR_RESET;
PWM1MCR = 0x00000002;
}

static void PWM_Set( INT32U freq )
{ int i = 3;
INT32U period;

lPWMSET:
i--;
if ( i < 0 ) {
goto lEND;
}
period = BSP_CPU_PclkFreq( PCLK_PWM1 );
period = period / freq;

PWM1MR0 = period;
PWM1MR4 = period / 2;
PWM1LER = LER0_EN | LER4_EN;

for ( period = 0; period <= 1000; period++ ) {}; // DEBUG: wait PWM1MRx apply
if ( PWM1LER != 0 ) {
goto lPWMSET;
}
lEND:;
}

static void PWM_Start( void )
{
PWM1PCR |= PWMENA4;
PWM1TCR = TCR_CNT_EN | TCR_PWM_EN;
}

static void PWM_Stop( void )
{
PWM1PCR &= ~PWMENA4;
PWM1TCR = 0x00;
}

void main (void)
{
CPU_INT08U err;

BSP_IntDisAll(); /* Disable all interrupts until we are ready to accept them */

#if ( PWM_FREQ_OUT == DEF_ENABLED )
PWM_Stop();
PWM_Init();
PWM_Set( 1228800 );
PWM_Start();
#endif //PWM_FREQ_OUT
....


4. Из МАКРОСов только LPC2378_Flash.mac:
Цитата
execUserPreload()
{
__writeMemory32(0x00000001, 0xE01FC040, "Memory"); // MEMMAP = 1;
}
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 3 2008, 09:15
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(richie @ Feb 27 2008, 18:09) *
period = BSP_CPU_PclkFreq( PCLK_PWM1 );
period = period / freq;
PWM1MR0 = period;
PWM1MR4 = period / 2;

А period через UART посмотреть?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016