private void ComputeRateParameters(int picClockSpeed) { int rate; if (Int32.TryParse(DesiredBaudRateText, out rate)) { Rates.Clear(); Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed)); Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.FtdiLow, rate)); Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.FtdiHigh, rate)); ActualBaudRateText = String.Format("{0:F1}", Rates[0].ActualBaud); ErrorRateText = String.Format("{0:F1}", Rates[0].PercentError); } }
private void PrepareSerialSpeeds(int picClockSpeed) { int[] desiredRates = { 9600, 19200, 38400, 56000, 57600, 115200, 250000, 500000, 750000, 1000000 }; // create possible PIC32 UART speeds, given by // picClockRate/(4*(num+1)) for num = 1 to 65535 SerialSpeeds.Clear(); foreach (var targetRate in desiredRates) { SerialSpeeds.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, targetRate, picClockSpeed)); } // add the rest of the speeds that hit exactly var rate = desiredRates[desiredRates.Length - 1]; var br = BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed); var divider = Int32.Parse(br.Setting); while (divider > 0) { --divider; if ((picClockSpeed % (divider + 1)) == 0) { rate = BaudRateCalculator.ComputePic32BaudRateFromClockDivider(picClockSpeed, divider); SerialSpeeds.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed)); } } }