Уважаемые Гуру,
Стоит довольно-таки простая задача: наш контроллер должен делать несколько простых действий по сбору и общету данных и потом выводить это на маленький дисплейчик. Устройство носимое, питание батарейное. Именно:
- раз в 10 миллисекунд передать/принять данные по SPI от датчика. Всего 48 бит. Время 10mS очень критично и хотелось бы, чтобы ничего не мешало этому процессу. - принимать данные по уарту раз в секунду (около 1кб), передавать данные... раз в минуту (несколько байт). - иногда (раз или два раза в минуту) записывать данные на флэш (atmel at45dbxxx). - кнопки обслуживать (6 штук) желательно по прерываниям. - 2 раза в секунду (если надо) обсчитывать данные и обновлять дисплей. - раз в час или по мере необходимости синхронизировать внутренний тактовый генератор с внешним сигналом, чтобы более-менее синхронно (+-5mS) опрашивать внешний датчик по SPI!!!
На самом деле это раньше было сделано и без оси, правда датчик опрашивался раз в 50mS и обработка была значительно проще. Но тут, при уменьшении интервала опроса датчика до 10mS, столкнулись с проблемой обсчета данных - приходится использовать плавающую точку (ну никак в целочисленную дробную арифметику его не вписать) и обсчет не разбить на части, чтобы уложить каждую часть в 10mS, а весь счет длится около 120-130mS.
Нам видится, что использование оси позволит нам делать обработку (расчет) в "фоновой" задаче и использовать результаты по мере необходимости.
Мы предполагаем использовать stm32L151cb на 14МГц.
Вопрос - подойдет ли FreeRTOS для этой задачи? Ну очень жесткие требования к 10mS опросу датчика. Возможно ли синхронизировать внутренний такт у этого проца?
И еще - хотелось бы использовать USB, а не уарт как сейчас, для обмена данными с компом. Для usb надо 48МГц. Можно ли как-нибудь, по внешнему прерыванию, переключать тактовую?
Есть ли примеры использования UART, SPI, etc. для этой оси и для этого проца?
Заранее благодарю
|