[an error occurred while processing this directive]
Использую типа такого, достаточно удобно и эффективно
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Tima 11 октября 2006 г. 10:44
В ответ на: В ИАР кто-нибудь пользуется стандартным заголовочным файлом в котором описывается переферия МК? Кто-нибудь описывает переферию сам при помощи классов С++?? отправлено =NIK= 11 октября 2006 г. 09:40


//---------------------------------------------------------------------------
// Описание апаратного обеспечения
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef __HARDWARE_DESCRIPTION_H
#define __HARDWARE_DESCRIPTION_H
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include
#include
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#define XTAL 14.7456 // Тактовая частота контроллера, МГц

#define BIT(x) (1<<(x)) // Определение макросов
#define LOW(x) ((x) & 0xFF)
#define HIGH(x) ((x) >> 8)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Класс описания апаратного обеспечения модуля
class HARD
{
private:

static unsigned char LBT[3]; // Состояние кнопок однократного нажатия
static unsigned char HBT[4]; // Состояние кнопок с автоповтором

public:
enum PORT_PINS
{
CSL = 1, // PD1 - линия управления CS SED1335
RES = 2, // PD2 - линия управления RES SED1335

CSR = 0, // PF0 - линия управления CS RAM
PS = 2, // PE2 - выборка страницы RAM

Light = 3, // PG3 - включение подсветки индикатора
Sound = 3, // PE3 - звуковой сигнал
LED = 5, // PD5 - линия управления светодиодом

SFINT = 5 // PE5 - линия Software interrupt (INT5)
};

enum SBEnumerate
{
SBErase = 1, // PF1 - кнопка "Стереть"
SBList = 2, // PF2 - кнопка "Лист"

SBUp = 4, // PF4 - кнопка "Вверх"
SBDown = 5, // PF5 - кнопка "Вниз"
SBLeft = 3, // PF3 - кнопка "Влево"
SBRight = 7, // PD7 - кнопка "Вправо"

SBEnter = 6, // PD6 - кнопка "Ввод"
SBReceipt = 4, // PD4 - кнопка "Квитирование"
SBReset = 3 // PD3 - кнопка "Сброс"
};

enum Buttons
{
BErase = 0, // Кнопка "Стереть" - младший байт
BList = 1, // Кнопка "Лист"
BEnter = 2, // Кнопка "Ввод"
BReceipt = 3, // Кнопка "Квитирование"
BReset = 4, // Кнопка "Сброс"

BLeft = 0, // Кнопка "Влево" - старший байт
BRight = 1, // Кнопка "Вправо"
BUp = 2, // Кнопка "Вверх"
BDown = 3 // Кнопка "Вниз"
};

//--------------------------------------------------
//--------------------------------------------------

static inline void LedON(void){ PORTD |= BIT(LED); } // Включить светодиод "Статус"
static inline void LedOFF(void){ PORTD &= ~BIT(LED); } // Выключить светодиод "Статус"

static inline void SoundON(void){ PORTE |= BIT(Sound); } // Включить звуковой сигнал
static inline void SoundOFF(void){ PORTE &= ~BIT(Sound); } // Выключить звуковой сигнал

//--------------------------------------------------

static void IOPortInit(void); // Инициализация портов I/O
static void DeviceInit(void); // Инициализация устройств
static void StartTMR1(void); // Запуск TMR1

static unsigned short GetKey(void); // Опрос клавиатуры

};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Управление шиной внешней памяти
class ExtBUS
{
private:

static void Enable(void){ PORTF &= ~BIT(HARD::CSR); } // Активация внешней RAM
static void Disable(void){ PORTF |= BIT(HARD::CSR); } // Деактивация внешней RAM

public:

//--------------------------------------------------
//--------------------------------------------------

static void HighPage(void){ PORTE |= BIT(HARD::PS); } // Выбор верхней страницы внешней RAM
static void LowPage(void){ PORTE &= ~BIT(HARD::PS); } // Выбор нижней страницы внешней RAM

static void Initialize(void) // Инициализация внешней шины
{
XMCRB = 0x00; // Upper sector = 0x1100 - 0xFFFF
XMCRA = BIT(SRW11); // Wait one cycle during read/write strobe
MCUCR = BIT(SRE)|BIT(SRW10);
};

static void RAMtoLCD() // Переключение шины на LCD
{
PORTF |= BIT(HARD::CSR);
PORTD &= ~BIT(HARD::CSL);
MCUCR |= BIT(SRW10);
};

static void LCDtoRAM() // Переключение шины на RAM
{
PORTD |= BIT(HARD::CSL);
PORTF &= ~BIT(HARD::CSR);
MCUCR &= ~BIT(SRW10);
};

//--------------------------------------------------

static long TestRAM(void); // Тест работоспособности внешней памяти

};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Функция записи данных в EEPROM
void SaveEEPROM(void *Ptr,unsigned short Addr,unsigned char Count);
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#endif //__HARDWARE_DESCRIPTION_H
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание