Перейти к содержанию
    

Как проще/правильнее сделать смену режимов встроенных OP усилителей?

Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просится оформить в виде структур

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

Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.

"Лишнее" вырезано с целью упрощения понимания.

 

Timer.hpp:


#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 это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.

"Лишнее" вырезано с целью упрощения понимания.

...

 

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

А как на СИ такое сделать (не приходит что то вумное в голову)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как на СИ такое сделать (не приходит что то вумное в голову)?

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

Иначе выйдет "шило на мыло" ;)

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Иначе выйдет "шило на мыло" ;)

 

Я в IAR пишу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я - в Keil. Но при чем тут это?

Тогда так спрошу как чайник (да простит меня...) Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы? И есть еще какие либо варинты смены реимов OP операациоников на лету?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы?

Вижу три варианта:

1. искать либу под IAR (например, на гитхабе),

2. переделывать существующую либу под IAR (нужные части),

3. писать проект целиком под CCS

 

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

Вооружившисть даташитом, изучить функционал существующих библиотек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть микроконтроллер - 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-реализациях только подсматривал основы.

 

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

"на лету" - это термин, или как ? Самое близкое к этому (?) - аппаратное прерывание и изменение конфигурации в обработчике евойном.

Поскольку из вопроса видно, что "не на лету" Вы уже реализовали, выкладывайте код.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться

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

А вот c ROM ситуация не такая однозначная - тут все сильно зависит от проекта и опыта программиста: криворукий может на плюсах нагородить такой огород, что никакого проца не хватит.

 

зы. В контексте данной темы все равно не понятно, чего именно хочет ТС. Впрочем, как и в других его темах ;)

Подобные темы будет порождать холивары и офф. Это практически неизбежно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?
Ваш вопрос очень напоминает тему про 'Гайку М3' от уважаемого iosifik

Вы хотите что то конкретное с этими усилителями сделать, или просто поиграться?

На вопрос в его исходной постановке ответить невозможно - не хватает данных.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...