Função para cálculo de UxDLL, UxDLM e UxFDR para LPC2000

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Função para cálculo de UxDLL, UxDLM e UxFDR para LPC2000

Mensagempor Viktor » 21 Mar 2007 12:30

Normalmente calcular os valores dos registradores que prgogramam o baudrate no LPC2148, por exemplo, é um "pé no saco" e normalmente recorre-se a tabelas. Para evitar este transtorno segue rotina abaixo :

typedef struct
{
unsigned char UDLM;
unsigned char UDLL;
unsigned char DIVADDVAL;
unsigned char MULVAL;
} uart_divisor;


//------------------------------------------------------------------------------|
// Retorna a estrutura que programa o baud rate desejado |
//------------------------------------------------------------------------------|
uart_divisor *get_divisor(uart_divisor *result, unsigned short baud)
{
unsigned char divaddval, mulval;
unsigned short udl;
double error, min_error = FLT_MAX;
double tmp;

for(divaddval=0; divaddval<=15; divaddval++)
for(mulval=2; mulval<=15; mulval++)
{
tmp =(PCLK * mulval)>>4;
udl = tmp/(double)(baud*(divaddval+mulval));
error = fabs((baud-(tmp/(double)(udl*(divaddval+mulval))))/baud);
if(error < min_error)
{
min_error = error;
result->DIVADDVAL = divaddval;
result->MULVAL = mulval;
result->UDLM = udl>>8;
result->UDLL = udl;
}
}
return result;
}


Exemplo : Calcular os registradores para baudrate 9600 :

uart_divisor divisor;
get_divisor(&divisor, 9600);


Resultado:

o valor de UxDLL é: divisor.UDLL
o valor de UxDLM é: divisor.UDLM
o valor de UxFDR é: (divisor.MULVAL<<4) | divisor.DIVADDVAL
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor microeletronica » 21 Mar 2007 20:19

Pode ser usando este programinha..

que tah no forum LPC2000 do Yahoo! Groups

http://f1.grp.yahoofs.com/v1/8LgBRi6gAw ... udcalc.zip

Tem que estar logado no Yahoo!
É da hora...

By Jean Fernandes...
microeletronica
Byte
 
Mensagens: 158
Registrado em: 05 Dez 2006 18:22

Mensagempor Viktor » 22 Mar 2007 06:51

Eu sei, mas se mudar algum parâmetro, clock, vpbdiv,.... já era. A função anterior é para evitar este incômodo e amarrar tudo com os #define do sistema
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor jeanfernandes » 23 Mar 2007 15:39

Esse baudcalc, foi o que fizemos....posso por em algum ftp, acho que ja ta no meu site.....

qq coisa só falar.
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x