My project uses a P89LPC932 @ 11.0592 MHz and CCLK equal to Fosc (11.0592MHz). UART uses BGRG1:BGRG0 as Baud Rate Generator. Buad = CCLK/((BRGR1,BRGR0)+16) I want to mensurate width of pulse by ICA of CCU. A series pulses comes from a 'U' (55 HEX). When Down edge of Start Bit comes, ICA capture first value T1. When Up edge of First Data Bit comes, ICA capture second value T2. So we have got a Count , Count = T2 - T1. My question : How can we set BGRG1:BGRG0 from Count ? e.g. BGRG1:BGRG0 = Count * x +/- y ?
Your functional description states: "My target MCU who sended 'U' will send 'U' always until P89LPC93 get correctly BAUD. After P89LPC93 has got correctly BAUD, it send 0xAA to my target MCU."
There are a few MCU at bus, and every MCU has a individual Address Word, 01, 02, 03 ... FF. My MCU is a tester, it inits MCU by Address Word @ 5 bps. After the corresponding MCU received it's Address Word, it send a series, e.g. 55 xx yy @ xxxx bps . 55 for Baud Detect. it repeats three times only (not always, I am sorry). After Received Address Word,Delay 30 ms, sends 55 xx yy ; Delay 30 ms, Wait Ack of my MCU , if not or Baud Error, then sends 55 xx yy again; then Delay 30 ms, Wait Ack of my MCU , if not or Baud Error, then sends 55 xx yy again, and Wait .... if No reply from My MCU, and Communication building Fail !
"So We must Detect Baud of MCU addressed immediately. if We can get Count = T2 - T1, and set BGRGx from Count, it is fast !" Personally, I'd still use 'Count' to look up BGRG values out of a table like Michael suggests in his last paragraph. If you want to calculate it, assuming you have the CCU configured with 1:1 prescale, wouldn't that be: BGRG1:BGRG0 = Count * 8 - 16?