Página 1 de 1

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

MensagemEnviado: 21 Mar 2007 12:30
por Viktor
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

MensagemEnviado: 21 Mar 2007 20:19
por microeletronica
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...

MensagemEnviado: 22 Mar 2007 06:51
por Viktor
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

MensagemEnviado: 23 Mar 2007 15:39
por jeanfernandes
Esse baudcalc, foi o que fizemos....posso por em algum ftp, acho que ja ta no meu site.....

qq coisa só falar.