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

 
 
> Прерывания на С++ и классы для ARM LPC, Как пишется?
yuriyc
сообщение May 13 2009, 09:59
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 27
Регистрация: 28-04-05
Пользователь №: 4 557



Уважаемые коллеги! Перерыл интернет в поисках ответа. Информации нашел крайне мало.
Если кто уже решал подобную проблему поделитесь опытом.
Ранее писал на С для LPC2148. Теперь интересует переход с С++.
Как правильно объявить класс и прерывание. И как потом взаимодействовать с ними.
Или если уже есть подобная тема, адресуйте меня туда .

PS среда разработки keil.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kurtis
сообщение May 13 2009, 12:49
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Где-то скопипастил, но ключевые моменты понять можно, правда код для АВРок, но не думаю что для АРМ он будет сильно отличаться.
Это заголовочный файл, тела методов описаны в соответствующем .cpp файле.
CODE
/// pp.debski@gmail.com
/// Debug with uart c++ example for ATmega88.
/// It's always possible to buy me a beer or two :-).

#ifndef _C_UART_H_
#define _C_UART_H_
#include <avr/interrupt.h>

extern "C" void USART2_TX_vect(void) __attribute__ ((signal));
extern "C" void USART2_RX_vect(void) __attribute__ ((signal));

/// You should definitely change this values.
/// They're correct only for ~8.8MHz and 9600 b/s baud rate.
//#define UBRR0H_9600 0
//#define UBRR0L_9600 47

/// UART class.
class C_UART
{
private:
/// Data to send.
char* pTxBuffer;
/// Buffer for received data.
char* pRxBuffer;
/// Transmitter data counter and data size. When equals - transmiter is ready to send new data.
volatile unsigned int uiTxCounter;
volatile unsigned int uiTxSize;
/// Receiver data counter and data size. When equals - transmiter is ready to send new data.
volatile unsigned int uiRxCounter;
volatile unsigned int uiRxSize;
/// Static pointer used in interrupts routines.
static C_UART* pUart;
public:
/// Setting up UART registers.
void Init(void);
/// Sending data.
bool Send(char* pBuffer, unsigned int uiSize);
/// Receiving data.
bool Receive(char* pBuffer, unsigned int uiSize);
/// Checks if transmitter is ready to send new data.
bool IsTxReady(void)
{
return !uiTxSize;
}
/// Checks if receiver is ready to send new data.
bool IsRxReady(void)
{
return !uiRxSize;
}
/// Setting static pUart pointer.
C_UART()
{
pUart = this;
}
/// Interrupt routines.
friend void USART2_TX_vect(void);
friend void USART2_RX_vect(void);
};

#endif
Go to the top of the page
 
+Quote Post



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

 


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


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