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

 
 
 
Reply to this topicStart new topic
> scmRTOSv310 на STM32F217
Acvarif
сообщение Dec 27 2011, 12:35
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Установил scmRTOS на STM32F217 (платка от stаrterkit). Проект для IAR6.21 прилагается.
Порт для stm32f2xx взял от stm32f10x (особо и переделыватьл ничего не пришлось)
Вроде все работает.
Наблюдаются холостой ход, прерывания системного таймера, даже USART1 работает по прерываниям.
Но всеравно возникают вопросы.
1. В файле scmRTOS_TARGET_CFG.h Как правильно выставить параметры если системная частота 120 мГц
Код
// Define SysTick clock frequency and its interrupt rate in Hz.
#define SYSTICKFREQ     8000000
#define SYSTICKINTRATE  500


2.Прерывания работают без участия ОС
Подключение (отключение) к проекту файла stm32f10x_vector.c никак на работе прерываний не сказывается
Похоже, что операционка вообще в этом не учавствует.
Правда для работы прерываний пришлось к проекту подключить startup_stm32f2xx.s

Вобщем основная непонятка с прерываниями.
Ведь они должны пропускаться через ОС. Или все не так?
Прикрепленные файлы
Прикрепленный файл  GnrScmRtos310IarArmv6Prj.rar ( 683.64 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 27 2011, 14:08
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Acvarif @ Dec 27 2011, 16:35) *
1. В файле scmRTOS_TARGET_CFG.h Как правильно выставить параметры если системная частота 120 мГц
Код
// Define SysTick clock frequency and its interrupt rate in Hz.
#define SYSTICKFREQ     8000000
#define SYSTICKINTRATE  500


2.Прерывания работают без участия ОС
Подключение (отключение) к проекту файла stm32f10x_vector.c никак на работе прерываний не сказывается
Похоже, что операционка вообще в этом не учавствует.
Правда для работы прерываний пришлось к проекту подключить startup_stm32f2xx.s

Вобщем основная непонятка с прерываниями.
Ведь они должны пропускаться через ОС. Или все не так?

1. По аналогии - указываете частоту процессора в герцах и желаемую частоту прерываний таймера, к примеру:
Код
#define SYSTICKFREQ     120000000
#define SYSTICKINTRATE  200

где частота процессора 120 МГц, частота прерывания системного таймера - 200 Гц.

2. С прерываниями, скорее, наоборот - ОС "пропускается" через нужные прерывания, точнее её сервисы.
Необходимо только одно прерывание - системного таймера, чтобы ОС могла отсчитывать временные промежутки и переключать процессы.

Для использования сервисов ОС в любых других прерываниях - нужно включить в код обработчика "обёртку" TISRW:
Код
void    DMAC_IrqHandler(void)
{
    OS::TISRW isr;

    ... code ...
    
    dmac_cbtc_mci.signal_isr();
    
    ... code ...
}

Почитайте лучше мануал к ОС, там всё разжёвано.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Dec 28 2011, 09:06
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Спасибо.
Мануал прочитал. В общих чертах все понятно.
Сделал новый проектик. Все работает без startup_stm32f2xx.s

Но один вопрос так и непонимаю.

Как запускается система тактирования stm32 в ОС?

Получается, что по умолчанию все рабртает от внутреннего генератора (вроде на частоте 8 мГц).
ST для управления системой тактирования предлагает файл system_stm32f2xx.c, где можно управлять разными клоками и их частотой. Но для его запуска нужен также startup_stm32f2xx.s
где какраз вызывается инициализация клоков. Но там есть еще и установка стеков, прописка векторов прерываний. Не помешает ли это правильной работе прерываний в ОС? Ведь порт имеет свой файл со списком векторов stm32f10x_vector.c.

Подключил пока только system_stm32f2xx.c и перед запуском ОС вызвал SystemInit();
Клок изменился. Сомневаюсь все ли я правильно сделал...

Сообщение отредактировал Acvarif - Dec 28 2011, 09:29
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 29 2011, 04:02
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (Acvarif @ Dec 28 2011, 16:06) *
Как запускается система тактирования stm32 в ОС?

Вообще-то, тактирование процессора - есть вещь ортогональная к ОС. Настройка аппаратуры процессора - это зона ответственности прикладного проекта, а не кода системы. Инициализация объектов системы происходит в конструкторах оных объектов. Конструкторы по стандарту вызываются после статической инициализации (которая отвечает за инициализацию объектов встроенных типов) до вызова main(). Как я понимаю, там же должен быть рабочий пример (и не один, а целых три), почему не посмотреть, как там люди сделали?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th August 2025 - 21:17
Рейтинг@Mail.ru


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