MAX3110Ehd.h

Transcrição

MAX3110Ehd.h
/*
Filippo Pardini - [email protected]
Protótipo para utilização do MAX3110E em Half Duplex
*/
#ifndef _MAX3110Ehd_INCLUDED_
#define _MAX3110Ehd_INCLUDED_
#pragma used+
#ifndef _DELAY_INCLUDED_
#include <delay.h>
#endif
//_______________________________________________________________________________________________
char
char
char
char
char
MSBconfigMAX[3];
LSBconfigMAX[3];
PortMAX[3];
PinMAX[3];
BaudMAX[3];
//
//
//
//
//
Byte MSB da configuração dos MAX
Byte LSB da configuração dos MAX
Portas para os MAX
Pinos para os MAX
Indice de velocidade RS232 para os MAX (Tabela 6 do datasheet)
//_______________________________________________________________________________________________
void
char
void
void
void
void
void
char
InitMAX(char Max, char porta, char pin, char baud);
// Configura o MAX e associa o pino CS
PutGetCharMAX(char Max, char n, char cout);
// Envia e recebe um byte ao MAX/RS232
TurnOn(char Max); // Seta o pino alto
TurnOff(char Max); // Seta o pino baixo
ReadConfigMAX(char Max, char *msb, char *lsb);
// Lê os dois bytes da configuração do MAX
WriteDataMAX(char Max, char *data, char len);
// Envia um string de bytes ao MAX/RS232
ReadDataMAX(char Max, char *data, char len);
// Lê um string de bytes do MAX/RS232
SPI(char data);
// Envia um byte e recebe um byte via SPI
//_______________________________________________________________________________________________
char PutGetCharMAX(char Max, char n, char cout)
// Max - Número do MAX
// n = 1 indica primeiro byte (MSB)
// n = 2 indica segundo byte (LSB)
// cout - byte a enviar
// return - byte recebido
{
Page 1 of 5
char c;
if (n == 1)
{
TurnOff(Max);
return SPI(cout);
}
if (n == 2)
{
c = SPI(cout);
TurnOn(Max);
return c;
}
}
//_______________________________________________________________________________________________
void ReadConfigMAX(char Max, char *msb, char *lsb)
// Max - número do max
{
*msb = PutGetCharMAX(Max,1,0x40);
*lsb = PutGetCharMAX(Max,2,0x00);
}
//_______________________________________________________________________________________________
void WriteDataMAX(char Max, char *data, char len)
// Max - número do max
// *data - pointer para o string a ser enviado
// len - comprimento do string
{
char i;
for (i=0;i<len;i++)
{
PutGetCharMAX(Max,1,0x80);
PutGetCharMAX(Max,2,*data);
++data;
delay_us(500); // valido para SPI 115.2k e RS232 19.2k
}
}
Page 2 of 5
//_______________________________________________________________________________________________
void ReadDataMAX(char Max, char *data, char len)
// Max - Número do MAX
// *data - pointer para o string que vai rceber os dados
// len - comprimento a ser lido
{
char c1,c2,i;
for (i=0;i<len;i++)
{
do
{
c1 = PutGetCharMAX(Max,1,0x00) & 0x80;
c2 = PutGetCharMAX(Max,2,0x00);
}while (c1 != 0x80);
*data = c2;
++data;
}
}
//_______________________________________________________________________________________________
char SPI(char data)
// data - byte a ser enviado
// return - byte recebido
{
char c;
SPDR=data;
while ((SPSR & (1<<7))==0);
c = SPDR;
return c;
}
//_______________________________________________________________________________________________
void InitMAX(char Max, char porta, char pin, char baud)
// Max - número de ordem do MAX
// porta - letra maiúscula indicando a porta a ser usada
// pin - 0 a 7 indicando o pino a ser usado
// baud - indice de velocidade RS232. Tabela 6 do datasheet
{
Page 3 of 5
delay_ms(50);
PortMAX[Max] = porta;
PinMAX[Max] = pin;
BaudMAX[Max] = baud;
MSBconfigMAX[Max] = 0xC4;
LSBconfigMAX[Max] = baud;
PutGetCharMAX(Max,1,MSBconfigMAX[Max]);
PutGetCharMAX(Max,2,LSBconfigMAX[Max]);
}
//_______________________________________________________________________________________________
void TurnOn(char Max)
// Max - Número do MAX
{
switch(PortMAX[Max])
{
case 'A':
PORTA =
break;
case 'B':
PORTB =
break;
case 'C':
PORTC =
break;
case 'D':
PORTD =
break;
case 'E':
PORTE =
break;
}
}
PORTA | (1 << PinMAX[Max]);
PORTB | (1 << PinMAX[Max]);
PORTC | (1 << PinMAX[Max]);
PORTD | (1 << PinMAX[Max]);
PORTE | (1 << PinMAX[Max]);
//_______________________________________________________________________________________________
void TurnOff(char Max)
// Max - Número do MAX
{
switch(PortMAX[Max])
{
Page 4 of 5
case 'A':
PORTA =
break;
case 'B':
PORTB =
break;
case 'C':
PORTC =
break;
case 'D':
PORTD =
break;
case 'E':
PORTE =
break;
PORTA & ~(1 << PinMAX[Max]);
PORTB & ~(1 << PinMAX[Max]);
PORTC & ~(1 << PinMAX[Max]);
PORTD & ~(1 << PinMAX[Max]);
PORTE & ~(1 << PinMAX[Max]);
}
}
//_______________________________________________________________________________________________
#pragma used#endif
Page 5 of 5

Documentos relacionados