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

 
 
> Перенос проекта с AVR на stm8l
Kalyan
сообщение Sep 11 2011, 21:19
Сообщение #1


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

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Доброго всем времени суток! У меня есть проект написан под AVR в IARe. Я его переношу на stm8l. Возникла проблема с функцией __delay_cycles(). Такой ф-ции для stm8l в файлике intrinsic.h нету. Посмотрел я в AVR® IAR C/C++ Compiler Reference Guide for Atmel® Corporation’s исходника этой ф-ции там нет. Может кто-то знает где взять исходник или как написать что-то подобное. как эту задержку в циклах привязять к времени? Помогите пожалуйста!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Xenia
сообщение Sep 11 2011, 22:10
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Ознакомьтесь с темой:
http://electronix.ru/forum/index.php?showt...hl=delay_cycles
Она хоть и про ARM, но для STM8, возможно, тоже годиться.
Go to the top of the page
 
+Quote Post
N1X
сообщение Sep 13 2011, 12:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 5-05-10
Из: Гомель, Беларусь
Пользователь №: 57 090



Прошу прощения если не в тему, но если нужна привязка ко времени и есть свободный аппаратный таймер, то не проще ли так?
CODE
/*****************************************
Модуль таймеров
Автор: N1X
Дата: 09.2011
******************************************/
#ifndef TIMERS_h
#define TIMERS_h
#include <iostm8s105c4.h>

#define MAXLTIMERS 2 //Кол-во программных таймеров

//Список локальных таймеров:
#define LCD_LTIMER 0 //Имена для упрощения ))) кому как больше нравится, можно enum прикрутить
#define MAINTIMER 1

//Экспортируемые функции:
void TimersInit(void); //Инициализация аппаратуры
void StartLTimer(unsigned char TimerID); //Обнуляет таймер TimerID
unsigned int GetLTimer(unsigned char TimerID); //Возвращает текущее значение нужного таймера
#endif


CODE
#include "timers.h"
#include <intrinsics.h>

volatile unsigned int LTimers[MAXLTIMERS];

void TimersInit(void)
{
//CLK_PCKENR1 |= ?; //Вкл. тактирование таймера 3
TIM3_PSCR = 0; //Делитель выключен
TIM3_ARRH = 0x3e; //Считаем до 16000
TIM3_ARRL = 0x80;
TIM3_IER = 0x01; //Прер. по переполнению вкл.
TIM3_CR1_CEN = 1; //Включаем счетчик
__enable_interrupt();
}

void StartLTimer(unsigned char TimerID)
{
LTimers[TimerID] = 0;
}

unsigned int GetLTimer(unsigned char TimerID)
{
return(LTimers[TimerID]);
}

#pragma vector=TIM3_OVR_UIF_vector
__interrupt void TIM3_Int(void)
{
TIM3_SR1_UIF = 0;
unsigned char i;
for (i=0; i < MAXLTIMERS; i++)
LTimers[i]++;
}


В данном примере при 16 МГц тактовой имеем инкремент таймеров каждую мс... Итого точность хода, + не обязательно тупо ждать в цикле, а можно делать че-нить полезное... Хотя мелкие задержки так делать расточительно, постоянные прерывания...

Использовать вообще просто, чтобы запустить ожидание вызываем StartLTimer и переодически проверяем значение функцией GetLTimer...

Сообщение отредактировал N1X - Sep 13 2011, 12:42
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 13 2011, 13:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



ИМХО, функции типа delay_cycles() - враги, ибо поощряют небрежный стиль программирования. Программу следует проектировать так, чтобы она минимально зависела от точных задержек. Те немногие места, где они абсолютно необходимы, следует изолировать и привязывать к аппаратным таймерам.
Перенос программы на другой МК - хороший повод переписать её, улучшив её архитектуру.
Go to the top of the page
 
+Quote Post
Kalyan
сообщение Sep 13 2011, 16:25
Сообщение #5


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

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



scifi, я наверное прислушаюсь к вам и переделаю задержку под таймер. Спасибо..
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:10
Рейтинг@Mail.ru


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