Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как проще/правильнее сделать смену режимов встроенных OP усилителей?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Make_Pic
Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы?
Forger
Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Просится оформить в виде структур

Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.

Timer.hpp:
CODE


#pragma once

.....

#include "Include/stm32l1xx.h"
#include "Interrupt.hpp"

.....

namespace stm32l1
{
class TimerBase
{
public:
explicit TimerBase(TIM_TypeDef * registers, Interrupt::Index irqIndex);
virtual ~TimerBase();

void installVector(stm32l1::Interrupt::Vector& vector);

void run();
void stop();

void setPrescaler(uint16_t value);
void setBaseFrequencyHz(uint32_t frequencyHz);

.............

private:
volatile TIM_TypeDef * timer;
uint32_t baseFrequencyHz;
Interrupt interrupt;

.............


};


#ifdef TIM2
class TimerTIM2 : public TimerBase
{
public:
TimerTIM2() : TimerBase(TIM2, TIM2_IRQn) { }
Irq<TIM2_BASE, TIM_DIER_UIE, TIM_SR_UIF> irqUpdate;
...................
};
#endif


#ifdef TIM3
class TimerTIM3 : public TimerBase
{
public:
TimerTIM3() : TimerBase(TIM3, TIM3_IRQn) { }

...................

};
#endif

// и так далее



Если вырезать вообще все лишнее, то вот суть:

Код
class TimerBase
{
public:
    TimerBase(TIM_TypeDef * registers); // Вся реализация TimerBase в соотв. cpp файле
}

......

class TimerTIM2 : public TimerBase
{
public:
    TimerTIM2() : TimerBase(TIM2)  {}
}



На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))
Make_Pic
Цитата(Forger @ Jun 23 2018, 15:05) *
Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.
...

На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))

А как на СИ такое сделать (не приходит что то вумное в голову)?
Forger
Цитата(Make_Pic @ Jun 24 2018, 09:03) *
А как на СИ такое сделать (не приходит что то вумное в голову)?

В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень.
Иначе выйдет "шило на мыло" wink.gif




Make_Pic
Цитата(Forger @ Jun 24 2018, 10:37) *
В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень.
Иначе выйдет "шило на мыло" wink.gif


Я в IAR пишу.
Forger
Цитата(Make_Pic @ Jun 24 2018, 20:46) *
Я в IAR пишу.

А я - в Keil. Но при чем тут это?
Make_Pic
Цитата(Forger @ Jun 24 2018, 21:47) *
А я - в Keil. Но при чем тут это?

Тогда так спрошу как чайник (да простит меня...) Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы? И есть еще какие либо варинты смены реимов OP операациоников на лету?
Forger
Цитата(Make_Pic @ Jun 25 2018, 05:10) *
Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы?

Вижу три варианта:
1. искать либу под IAR (например, на гитхабе),
2. переделывать существующую либу под IAR (нужные части),
3. писать проект целиком под CCS

Цитата
И есть еще какие либо варинты смены реимов OP операациоников на лету?

Вооружившисть даташитом, изучить функционал существующих библиотек.
k155la3
Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы?

Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться
RAM и flash. Если алгоритм прикладной задачи и объем данных небольших, то вполне возможно.
--
Для "упаковки" текста функционала вместо собственно функций можно использовать макросы.
Их использование увеличит быстродействие, улучшит читабельность кода и его "портабельность", если все макро-определения делать в одном h-файле.
(аналогично inline - функциям)
Код
#define PORT_CS   P1OUT
#define MASK_CS_FLASH  0x01
#define MASK_CS_RTC      0x02
#define CS_ACTIVE_FLASH  ( PORT_CS &= ~MASK_CS_FLASH )
#define CS_OFF       ( PORT_CS = 0xFF )

ps
у Ti есть MSP430Ware == driverlib.
Пробовал использовать их HAL, но "не пошло", выписывал потом все оптимально и компактно и собственноручно. В HAL-реализациях только подсматривал основы.

Цитата(Make_Pic @ Jun 25 2018, 05:10) *
И есть еще какие либо варинты смены реимов OP операациоников на лету?

"на лету" - это термин, или как ? Самое близкое к этому (?) - аппаратное прерывание и изменение конфигурации в обработчике евойном.
Поскольку из вопроса видно, что "не на лету" Вы уже реализовали, выкладывайте код.
Forger
Цитата(k155la3 @ Jun 25 2018, 10:51) *
Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться

Не пугайте народ: один и тот же код на CPP требует практически столько же RAM, как и голый C (разумеется, без дин. памяти). В больших и серьезных проектах эта разница может быть даже в пользу плюсов.
А вот c ROM ситуация не такая однозначная - тут все сильно зависит от проекта и опыта программиста: криворукий может на плюсах нагородить такой огород, что никакого проца не хватит.

зы. В контексте данной темы все равно не понятно, чего именно хочет ТС. Впрочем, как и в других его темах wink.gif
Подобные темы будет порождать холивары и офф. Это практически неизбежно.
XVR
Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?
Ваш вопрос очень напоминает тему про 'Гайку М3' от уважаемого iosifik
Вы хотите что то конкретное с этими усилителями сделать, или просто поиграться?
На вопрос в его исходной постановке ответить невозможно - не хватает данных.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.