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

 
 
> Программирование на C++, А почему не С++?
KingGeorg
сообщение Oct 23 2004, 12:51
Сообщение #1





Группа: Свой
Сообщений: 9
Регистрация: 20-10-04
Пользователь №: 933



По идее, IAR должны были бы вместе с EC++ и стантдартными библиотеками предоставлять и библиотеки классов, описывающие микроконтроллеры, хотя бы тот же MSP430. Но я у них ничего подобного не нашёл, нет даже упоминаний. Интересно, кто-нибудь вообще в этом деле использует С++ как С++. Если да, давайте одсудим детали. Я (скромный такой rolleyes.gif ) за месяц с небольшим знакомства с предметной областью кое-что своё накарябал. Готов предъявить и получить заимечания.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KingGeorg
сообщение Nov 1 2004, 16:11
Сообщение #2





Группа: Свой
Сообщений: 9
Регистрация: 20-10-04
Пользователь №: 933



А вот код инкапсулирующий ЦАП
Код
#ifndef __DAC12_HPP__
#define __DAC12_HPP__
#include "430.hpp"

struct DAC12_CTL
{
    bit DAC12GRP   : 1; /* Группировка ЦАП12. Группируется DAC12_x с DAC12_х, имеющий следующий
                     * более высокий порядковый номер. 0 Нет группировки 1 ЦАП`ы сгруппированы */
    bit DAC12ENC   : 1; /* Включение преобразования ЦАП12. Этот бит включает модуль ЦАП12,
                     * когда DAC12LSELx>0. Когда DAC12LSELx=0, бит DAC12ENC игнорируется.
                     * 0 ЦАП12 выключен 1 ЦАП12 включен */
    bit DAC12IFG   : 1; /* Флаг прерывания ЦАП12 0 Прерывание не ожидается 1 Прерывание ожидается */
    bit DAC12IE    : 1; /* Разрешение прерывания от ЦАП12 0 Запрещено 1 Разрешено */
    bit DAC12DF    : 1; /* Формат данных ЦАП12 0 Натуральный двоичный 1 Формат с дополнением до двух */
    bit DAC12AMP   : 3; /* Настройка усилителя ЦАП12. Эти биты выбирают время установки в зависимости
                     * от потребляемого тока для входного и выходного усилителей ЦАП12
                     * DAC12AMPx  Входной буфер              Выходной буфер
                     *    000     Выключен ЦАП12 выключен,   выход в высокоимпедансном состоянии
                     *    001     Выключен ЦАП12 выключен,   на выходе 0В
                     *    010     Низкая скорость/ток        Низкая скорость/ток
                     *    011     Низкая скорость/ток        Средняя скорость/ток
                     *    100     Низкая скорость/ток        Высокая скорость/ток
                     *    101     Средняя скорость/ток       Средняя скорость/ток
                     *    110     Средняя скорость/ток       Высокая скорость/ток
                     *    111     Высокая скорость/ток       Высокая скорость/ток */
    bit DAC12IR    : 1; /* Входной диапазон ЦАП12.
                     * Этот бит устанавливает диапазон входного опорного напряжения и выходного напряжения.
                     * 0 Полный диапазон выходного напряжения ЦАП12 равен 3-х кратному опорному напряжению
                     * 1 Полный диапазон выходного напряжения ЦАП12 равен 1-но кратному опорному напряжению */
    bit DAC12CALON : 1; /* Включение калибровки ЦАП12. Этот бит инициирует последовательность калибровки
                     * смещения ЦАП12 и сбрасывается автоматически после завершения калибровки.
                     * 0 Калибровка не выполняетс
                     * 1 Инициирование калибровки / выполняется калибровка */
    bit DAC12LSEL : 2;  /* Выбор загрузки ЦАП12. Выбирается сигнал запуска загрузки защелки ЦАП12. Для обновлени
                     * ЦАП должен быть установлен DAC12ENC, за исключением случая, когда DAC12LSELx=0.
                     * 00 Загрузка в защелку ЦАП12 выполняется при записи в DAC12_xDAT
                     *     (DAC12ENC игнорируется)
                     * 01 Загрузка в защелку ЦАП12 выполняется при записи в DAC12_xDAT, или,
                     * когда используется группировка, при записи во все регистры DAC12_xDAT группы
                     * 10 Фронт сигнала c Таймера_А3.Выход1 (TA1)
                     * 11 Фронт сигнала c Таймера_B7.Выход2 (TB2) */
    bit DAC12RES   : 1; /* Выбор разрешения ЦАП12 0 12-разрядное разрешение 1 8-разрядное разрешение */
    bit DAC12SREF  : 2; /* Выбор опорного напряжения ЦАП12 00 VREF+ 01 VREF+ 10 VeREF+ 11 VeREF+ */
    bit reserved   : 1; /* Не используется */
};
__no_init volatile DAC12_CTL dac12_ctl[2] @ 0x01C0;

struct DAC12_DAT
{
    unsigned int data       :12; /* данные ЦАП */
    unsigned int reserved   : 4; /* Не используется */
};
__no_init volatile DAC12_DAT dac12_dat[2] @ 0x01C8;

class DAC12
{
    byte n;
public:
    DAC12(byte no) : n(no-1)
    {}

    enum grouping{ nogrp, grp};
    void group(grouping g){ dac12_ctl[n].DAC12GRP = grp; }    // группировка ЦАПов

    void on( void) { dac12_ctl[n].DAC12ENC = 1; }           // включение и

    void off(void) { dac12_ctl[n].DAC12ENC = 0; }           // выключение ЦАП

    bit is_interrupt(void){ return dac12_ctl[n].DAC12IFG; } // Флаг прерывания ЦАП12

    void enable_interrupt(){ dac12_ctl[n].DAC12IE = 1; }    // Разрешение прерывания от ЦАП12

    void disable_interrupt(){dac12_ctl[n].DAC12IE = 0; }    // Запрет прерывания от ЦАП12

    enum formats{ natural, up_to_two};
    void data_format( formats fmt){ dac12_ctl[n].DAC12DF = fmt; } // Формат данных ЦАП12

    /* не стал делать enum */
    void amp_cust( byte a){ dac12_ctl[n].DAC12AMP = a; }    // Настройка усилителя ЦАП12.

    enum ranges{ x3, x1};
    void range( ranges r){ dac12_ctl[n].DAC12IR = r; }      // Входной диапазон ЦАП12.

 void calibration(void){ dac12_ctl[n].DAC12CALON = 1; }  // Включение калибровки ЦАП12.

 enum run_signals{ DAC12_DAT, DAC12_DAT_or_group, A3_1, B7_2};
 void sel_loading(run_signals s) { dac12_ctl[n].DAC12LSEL = s; } // Выбор загрузки ЦАП12.

    enum permissions{ x12, x8};
 void permission( permissions p){ dac12_ctl[n].DAC12RES = p; }   // Выбор разрешения ЦАП12

 enum reference_voltages{ VREF, VREF_, VeREF, VeREF_ };
 void ref_volt( reference_voltages v){ dac12_ctl[n].DAC12SREF = v; } // Выбор опорного напряжения ЦАП12

 int operator =( int value)
 { return dac12_dat[n].data = value & 0x0FFF; }

};

#endif

Обеспокоен Вашим молчанием, господа unsure.gif. Хотелось бы узнать мнение компетентных специалистов.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KingGeorg   Программирование на C++   Oct 23 2004, 12:51
- - IgorKossak   У IAR вообще всё идёт довольно медленно, но не буд...   Oct 23 2004, 13:20
- - KingGeorg   У меня есть классы: clocking -- инкапсулирует сист...   Oct 24 2004, 09:31
- - IgorKossak   Неплохо, а где можно на реализацию взглянуть?   Oct 24 2004, 10:29
- - KingGeorg   Ну, напимер, сторожевой таймер: Код #ifndef __WD...   Oct 27 2004, 14:54
- - lamerok   Уважаемый KingGeorg Я все таки так и не пойму, ...   Nov 2 2004, 04:50
- - KingGeorg   Фишка вот в чём. Всё это нет никакого резона писат...   Nov 4 2004, 11:38
- - -Tумблер-   Цитата(KingGeorg @ Nov 4 2004, 03:38 PM)А есл...   Nov 5 2004, 13:32
- - IgorKossak   Уже давно пишу на С++ для МК. Плевать на снижение ...   Nov 5 2004, 15:03
- - lamerok   KingGeorg Попробывал маленький проектик, аля миган...   Nov 10 2004, 09:42
- - froakch   ЦитатаУ меня есть классы: clocking -- инкапсулируе...   Nov 15 2004, 09:50
- - Slavik   C++ удобно применять где мегабайты текста. А для в...   Nov 29 2004, 10:11
|- - COMA   Цитата(Slavik @ Nov 29 2004, 13:11)На мой суб...   Nov 30 2004, 06:10
|- - IgorKossak   Цитата(COMA @ Nov 30 2004, 09:10)Код при комп...   Nov 30 2004, 09:49
|- - COMA   Цитата(IgorKossak @ Nov 30 2004, 12:49)Удивит...   Nov 30 2004, 14:41
|- - IgorKossak   Цитата(COMA @ Nov 30 2004, 17:41)Цитата(IgorK...   Dec 1 2004, 08:19
- - Slavik   Опять же, на мой субъективный взгляд, для встраива...   Nov 30 2004, 09:44


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

 


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


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