Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-ноя-19 09:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 295 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 20  След.
Автор Сообщение
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-05 09:00 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 481
Для банальной задержки в МК с ядром М3 (ВЕ9х) можно пользоваться DWT, который есть часть ядра. Увы, в ВЕ1 (с ядром М1) DWT нет :(.
Код:
//-------------------------------------------------------------------------------
// Задержка полингом по DWT таймеру, вх. параметр в микросекундах
//-------------------------------------------------------------------------------
#pragma inline
void Sleep(u32 cnt_uS)
{    
DWT->CYCCNT = 0;
while (DWT->CYCCNT < (cnt_uS * SYSCLK_MHZ));
}

//-------------------------------------------------------------------------------
// Предварительная настройка DWT
//-------------------------------------------------------------------------------
void DelayConfig()
{
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;   // включение модуля DWT
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
DWT->CYCCNT = 0;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-05 11:53 
Не в сети

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
R Max писал(а):
И потерять целый таймер с advanced-функциями типа PWM & CAP ...

Предполагается, что ничего не потеряется))) Что-то вы совсем не дорожите системным таймером, никогда не использовали операционку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-05 18:56 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 253
Сергей86 писал(а):
R Max писал(а):
И потерять целый таймер с advanced-функциями типа PWM & CAP ...

Предполагается, что ничего не потеряется))) Что-то вы совсем не дорожите системным таймером, никогда не использовали операционку?


Потеряется в том плане, что могут понадобиться одновременно нормальный таймер и задержка. Когда ОСь не использую, то задержки, в частности при работе с EEPROM, delay() на SysTick. А когда с ОСью понятно дело, что там таймеров целый вагон можно сделать http://www.keil.com/pack/doc/CMSIS/RTOS ... _mgmt.html :D .

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-05 19:12 
Не в сети

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
R Max писал(а):
Сергей86 писал(а):
R Max писал(а):
И потерять целый таймер с advanced-функциями типа PWM & CAP ...

Предполагается, что ничего не потеряется))) Что-то вы совсем не дорожите системным таймером, никогда не использовали операционку?


Потеряется в том плане, что могут понадобиться одновременно нормальный таймер и задержка. Когда ОСь не использую, то задержки, в частности при работе с EEPROM, delay() на SysTick. А когда с ОСью понятно дело, что там таймеров целый вагон можно сделать http://www.keil.com/pack/doc/CMSIS/RTOS ... _mgmt.html :D .

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 13:10 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
Уважаемые знатоки, уже пару дней пытаюсь разобраться с SysTick, ну никак не получается его заставить работать для функции delay_ms();
Гляньте код ,пожалуйста, вдруг я туплю.

#include "MDR32Fx.h" // Device header
#include "MDR32F9Qx_config.h" // Keil::Device:Startup_MDR1986BE9x
#include "MDR32F9Qx_rst_clk.h" // Keil::Drivers:RST_CLK
#include "MDR32F9Qx_port.h" // Keil::Drivers:PORT
#include "core_cm3.h" // Keil::Device:Startup_MDR1986BE9x

#define F_CPU 8000000UL
#define TimerTick F_CPU/1000-1

// --- Средства работы со временем - Системный таймер ------------------------
static volatile uint32_t msTicks = 0; // counts 1ms timeTicks

void SysTick_Handler(void)
{
msTicks++; // инкремент счётчика времени
}

void delay_ms(uint32_t ms)
{
uint32_t startTicks;
startTicks = msTicks;
while((msTicks - startTicks) < ms); // Ждем завершения периода
}

//----------------------------------------------------------------------------

/* CPU clock setup */
void Setup_CPU_Clock(void)
{
/* Enable HSE */
RST_CLK_HSEconfig(RST_CLK_HSE_ON);
if (RST_CLK_HSEstatus() != SUCCESS)
{
/* Trap */
while (1)
{
}
}

/* CPU_C1_SEL = HSE */
RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul1);
RST_CLK_CPU_PLLcmd(ENABLE);
if (RST_CLK_CPU_PLLstatus() != SUCCESS)
{
/* Trap */
while (1)
{
}
}

/* CPU_C3_SEL = CPU_C2_SEL */
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
/* CPU_C2_SEL = PLL */
RST_CLK_CPU_PLLuse(ENABLE);
/* HCLK_SEL = CPU_C3_SEL */
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
}

//----------------------------------------------------------------------------



//----------------------------------------------------------------------------

void LED(void)
{

PORT_InitTypeDef GPIO_PORTB_init;
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
GPIO_PORTB_init.PORT_FUNC = PORT_FUNC_PORT;
GPIO_PORTB_init.PORT_MODE = PORT_MODE_DIGITAL;
GPIO_PORTB_init.PORT_OE = PORT_OE_OUT;
GPIO_PORTB_init.PORT_Pin = PORT_Pin_3|PORT_Pin_2|PORT_Pin_1|PORT_Pin_0;
GPIO_PORTB_init.PORT_PULL_DOWN = PORT_PULL_DOWN_ON;
GPIO_PORTB_init.PORT_PULL_UP = PORT_PULL_UP_OFF;

PORT_Init(MDR_PORTB, &GPIO_PORTB_init);

}




//----------------------------------------------------------------------------

int main(void)
{
Setup_CPU_Clock();
LED();
SysTick_Config(TimerTick);
while(1)
{
delay_ms(500);
PORT_SetBits(MDR_PORTB, PORT_Pin_3|PORT_Pin_2|PORT_Pin_1|PORT_Pin_0);
delay_ms(500);
PORT_ResetBits(MDR_PORTB, PORT_Pin_3|PORT_Pin_2|PORT_Pin_1|PORT_Pin_0);
}



}

//----------------------------------------------------------------------------


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:03 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Mr.Grey писал(а):
Уважаемые знатоки, уже пару дней пытаюсь разобраться с SysTick, ну никак не получается его заставить работать для функции delay_ms();
Гляньте код ,пожалуйста, вдруг я туплю.

//----------------------------------------------------------------------------

Привет. Наверное забыл разрешить прерывания таймера?
NVIC_EnableIRQ(SysTick_IRQn);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:08 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
Сейчас опять прошерстил код и обнаружил, что когда использую функцию настойки тактирования Setup_CPU_Clock(); тогда светодиоды не включаются, как только убираю функцию Setup_CPU_Clock(); тогда LED`ы работают, но это ещё без SysTick`а....

Странно, функция Setup_CPU_Clock проверенная, я на ней UART`ы запускал соответствующий порт для UART настраивал и все работало. Ничего тогда не понимаю...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:13 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Mr.Grey писал(а):
Сейчас опять прошерстил код и обнаружил, что когда использую функцию настойки тактирования Setup_CPU_Clock(); тогда светодиоды не включаются, как только убираю функцию Setup_CPU_Clock(); тогда LED`ы работают, но это ещё без SysTick`а....

Странно, функция Setup_CPU_Clock проверенная, я на ней UART`ы запускал и все работало. Ничего тогда не понимаю...

У тебя частота не успевает стабилизироваться.
if (RST_CLK_HSEstatus() != SUCCESS)
надо:
while (RST_CLK_HSEstatus() != SUCCESS);
и тут
if (RST_CLK_CPU_PLLstatus() != SUCCESS)
надо:
while (RST_CLK_CPU_PLLstatus() != SUCCESS);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:22 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
8daemon писал(а):
Mr.Grey писал(а):
Сейчас опять прошерстил код и обнаружил, что когда использую функцию настойки тактирования Setup_CPU_Clock(); тогда светодиоды не включаются, как только убираю функцию Setup_CPU_Clock(); тогда LED`ы работают, но это ещё без SysTick`а....

Странно, функция Setup_CPU_Clock проверенная, я на ней UART`ы запускал и все работало. Ничего тогда не понимаю...

У тебя частота не успевает стабилизироваться.
if (RST_CLK_HSEstatus() != SUCCESS)
надо:
while (RST_CLK_HSEstatus() != SUCCESS);
и тут
if (RST_CLK_CPU_PLLstatus() != SUCCESS)
надо:
while (RST_CLK_CPU_PLLstatus() != SUCCESS);



Поменял, к сожалению не помогло :-(

PS Если просто зажечь LED`ы с помощью PORT_SetBits(); при этом убрав из кода функцию инициализации тактирования, все горит, как только функцию в main добавляю, ничего не работает...

#include "MDR32Fx.h" // Device header
#include "MDR32F9Qx_config.h" // Keil::Device:Startup_MDR1986BE9x
#include "system_MDR32F9Qx.h" // Keil::Device:Startup_MDR1986BE9x
#include "MDR32F9Qx_lib.h" // Keil::Drivers:LIB
#include "MDR32F9Qx_rst_clk.h" // Keil::Drivers:RST_CLK
#include "MDR32F9Qx_port.h" // Keil::Drivers:PORT

/* CPU clock setup */
void Setup_CPU_Clock(void)
{
/* Enable HSE */
RST_CLK_HSEconfig(RST_CLK_HSE_ON);
while (RST_CLK_HSEstatus() != SUCCESS);


/* CPU_C1_SEL = HSE */
RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul1);
RST_CLK_CPU_PLLcmd(ENABLE);
while (RST_CLK_CPU_PLLstatus() != SUCCESS);


/* CPU_C3_SEL = CPU_C2_SEL */
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
/* CPU_C2_SEL = PLL */
RST_CLK_CPU_PLLuse(ENABLE);
/* HCLK_SEL = CPU_C3_SEL */
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
}

void LED(void)
{

PORT_InitTypeDef GPIO_PORTB_init;
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
GPIO_PORTB_init.PORT_FUNC = PORT_FUNC_PORT;
GPIO_PORTB_init.PORT_MODE = PORT_MODE_DIGITAL;
GPIO_PORTB_init.PORT_OE = PORT_OE_OUT;
GPIO_PORTB_init.PORT_Pin = PORT_Pin_3|PORT_Pin_2|PORT_Pin_1|PORT_Pin_0;
GPIO_PORTB_init.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
GPIO_PORTB_init.PORT_PULL_UP = PORT_PULL_UP_OFF;

PORT_Init(MDR_PORTB, &GPIO_PORTB_init);

}


int main(void)
{
Setup_CPU_Clock();
LED();
PORT_SetBits(MDR_PORTB, PORT_Pin_3|PORT_Pin_2|PORT_Pin_1|PORT_Pin_0);
while(1)
{



}

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:33 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Mr.Grey писал(а):
8daemon писал(а):
Mr.Grey писал(а):
Сейчас опять прошерстил код и обнаружил, что когда использую функцию настойки тактирования Setup_CPU_Clock(); тогда светодиоды не включаются, как только убираю функцию Setup_CPU_Clock(); тогда LED`ы работают, но это ещё без SysTick`а....

Странно, функция Setup_CPU_Clock проверенная, я на ней UART`ы запускал и все работало. Ничего тогда не понимаю...

У тебя частота не успевает стабилизироваться.
if (RST_CLK_HSEstatus() != SUCCESS)
надо:
while (RST_CLK_HSEstatus() != SUCCESS);
и тут
if (RST_CLK_CPU_PLLstatus() != SUCCESS)
надо:
while (RST_CLK_CPU_PLLstatus() != SUCCESS);



Поменял, к сожалению не помогло :-(

PS Если просто зажечь LED`ы с помощью PORT_SetBits(); при этом убрав из кода функцию инициализации тактирования, все горит, как только функцию в main добавляю, ничего не работает...

}

Внешний резонатор подключен?
Бит PCLK[4] – RST_CLK установлен перед заданием тактирования?
Системный таймер до сих пор не работает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:43 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
Внешний резонатор на отладочной плате 8 МГц. От него тактировался при использовании UART2. UART2 работал отлично.
По поводу: <b>Бит PCLK[4] – RST_CLK установлен перед заданием тактирования?<b>
не совсем понял, использую функции Standart Peripherals которые шли в pack 1.4.0 от Миландра.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 14:59 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Mr.Grey писал(а):
Внешний резонатор на отладочной плате 8 МГц. От него тактировался при использовании UART2. UART2 работал отлично.
По поводу: <b>Бит PCLK[4] – RST_CLK установлен перед заданием тактирования?<b>
не совсем понял, использую функции Standart Peripherals которые шли в pack 1.4.0 от Миландра.

RST_CLK_PCLKcmd(RST_CLK_PCLK_RST_CLK, ENABLE);
Попробуй следующий порядок:
/* CPU_C2_SEL = PLL */
RST_CLK_CPU_PLLuse(ENABLE);

/* CPU_C3_SEL = CPU_C2_SEL */
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);

/* HCLK_SEL = CPU_C3_SEL */
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);

Стоит ли использовать PLL, не проще использовать HSE напрямую при коэф. x1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 15:07 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
Такой порядок попробовал, результат тот же :-(

RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE); есть в функции LED();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 15:08 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
RST_CLK_PCLKcmd(RST_CLK_PCLK_RST_CLK, ENABLE);
П.С.
- попробуй через отладчик, по шагам
- я выхожу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2015-ноя-15 15:21 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
светодиоды 0 или 1 зажигаются?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 295 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 20  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: devprodest и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB