int UARTAutoBaud(unsigned long *pulRatio){
long lPulse, lValidPulses,LTEmp, lTotal;
volatile long lDelay;
HWREG(NVIC_ST_RELOAD) = 0xffffffff;
HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC| NVIC_ST_CTRL_ENABLE;
HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = UART_RX;
HWREG(NVIC_EN0) = 1;
while(g_ulTickIndex < MIN_EDGE_COUNT)
{}
for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){
lTemp = (((long)g_pulDataBuffer[lPulse] - (long)g_pulDataBuffer[lPulse + 1]) & 0x00ffffff);
g_pulDataBuffer[lPulse] = lTemp;
}
for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){
lTemp = (long)g_pulDataBuffer[lPulse];
lTemp -= (long)g_pulDataBuffer[lPulse + 1];
if(lTemp < 0) {
lTemp *= -1;
}
if((lTemp * PULSE_DETECTION_MULT) < (long)g_pulDataBuffer[lPulse + 1]) {
lTotal += (long)g_pulDataBuffer[lPulse];
lValidPulses++;
}
else{
lValidPulses = 0;
lTotal = 0;
}
if(lValidPulses == 7) {
lTotal += (long)g_pulDataBuffer[lPulse];
*pulRatio = lTotal >> 1;
return(0);
}
}
return(-1);
}