Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Сергей Борщ 04 октября 2005 г. 12:44
В ответ на: Нужна быстрая функция для отсылки байта по RS для MSP430F149 отправлено <font color=gray>Lexandro</font> 04 октября 2005 г. 11:18


Terminal_hw.h:
------------------------------------------------------
#include "defines.h"
#define CR "\r\n"

#ifdef RS232_USART0
#define RS232 USART0
#define RS232RxVector [UART0RX_VECTOR]
#define RS232TxVector [UART0TX_VECTOR]
#define RS232TxIntEnable() IE1 |= UTXIE0
#define RS232TxIntDisable() IE1 &= ~UTXIE0
#define RS232RxIntEnable() IE1 |= URXIE0
#define RS232RxIntDisable() IE1 &= ~URXIE0
#else
#ifdef RS232_USART1
#define RS232 USART1
#define RS232RxVector [UART1RX_VECTOR]
#define RS232TxVector [UART1TX_VECTOR]
#define RS232TxIntEnable() IE2 |= UTXIE1
#define RS232TxIntDisable() IE2 &= ~UTXIE1
#define RS232RxIntEnable() IE2 |= URXIE1
#define RS232RxIntDisable() IE2 &= ~URXIE1
#else
#error Not UART module defined!
#endif
#endif
------------------------------------------------------
main.c:
#include
#include
#include
#include "Terminal_hw.h"

#define OSC 7372800L

#define UARTBaudRate 2400
#define MCLK (OSC)
#define SMCLK (OSC/2)
#define TCLK SMCLK
#define USARTCLK MCLK


#define RxBufferSize 32
#define TxBufferSize 16

unsigned char RxBuffer[RxBufferSize];
unsigned char TxBuffer[TxBufferSize];
unsigned char RxHead,RxTail,TxHead,TxTail;

void UARTInit (void)
{
RS232(USART_BR0) = MCLK/UARTBaudRate;
RS232(USART_BR1) = (MCLK/UARTBaudRate)>>8;
RS232(USART_MOD) = 0;
RS232(USART_CTL) = _Async|_NoFeedback|_8bit|_OneStop|_NoParity|_NormalMode;
RS232(USART_TCTL) = UartSMCLK|_TxEmpty;
TxHead = TxTail = RxHead = RxTail = 0;

#ifdef RS232_USART0
ME1 = URXE0 | UTXE0;
P3SEL |= (1<<5)|(1<<4);
IE1 = URXIE0;
#else
ME2 = URXE1 | UTXE1;
P3SEL |= (1<<7)|(1<<6);
IE2 = URXIE1;
#endif

RS232RxIntEnable();
}

void interrupt UARTTxVector Tx232(void)
{
RS232(USART_TXBUF) = TxBuffer[TxTail++];
TxTail &= TxBufferSize-1;
if(TxTail == TxHead)
RS232TxIntDisable;
}

void interrupt UARTRxVector Rx232 (void)
{
RxBuffer[RxHead++] = RS232(USART_TXBUF);
RxHead &= RxBufferSize-1;
}

int putchar(int Symbol)
{
while(((TxHead-TxTail) & (TxBufferSize-1)) == (TxBufferSize-1)); // buffer full
if(Symbol >= ' ')
TxBuffer[TxHead++] = Symbol;
else
TxBuffer[DebugHead++ ] = '.';
TxHead &= TxBufferSize-1;
RS232TxIntEnable;
return (1);
}

int getchar(void)
{
int Symbol;
while(RxHead == TxTail); // buffer empty
Symbol = RxBuffer[RxTail++];
RxTail &= RxBufferSize-1;
return (Symbol);
}


void main (void)
{
printf(CR"Tipa test UART 2400"CR);
for(;;);

}


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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru