gladov 0 13 сентября, 2010 Опубликовано 13 сентября, 2010 · Жалоба Имеется совершенно "стандартный" кит - Olimex LPC-P2148. На нем стоит кварц 12МГц (проверял осциллом - действительно так). Отключаю (а точнее не включаю) PLL, делитель APB ставлю в 1. Должен получить PCLK = 12МГц. FDR либо не трогаю, либо инициализирую значением по умолчанию, т.е. 0x10 чтобы он не работал. Считаем по DS baudrate: DLM:DLL = PCLK / (16 * BR) = 12000000 / (16 * 9600) = 78. И... не работает. Точнее работает, передает, но при передаче пачки нормально проходит только первый символ, а в последующих бъются биты. Явно слегка некорректный бодрейт. Экспериментально подобрал, что если выставить DLM:DLL в 82 все четко работает. Аналогичная ситуация возникает если влючить PLL х4 и разделить в APB на 2. Получаем PCLK = 24, DLL = 156. А работает он при DLL = 165!!! Никто с таким странным поведением не сталкивался? Мож кто подскажет где искать грабли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cornflyer 0 13 сентября, 2010 Опубликовано 13 сентября, 2010 · Жалоба /*-------------------------------------------------------------------------*/ void SerialInit(void){ unsigned int reload = (15000000/(115200*16)); //Configure UART0 Pins PINSEL0 |= 0x05;//Enable RxD0 and TxD0 U0LCR = 0x00000007;//Configure Data Bits and Parity MB_PAR_NONE U0IER = UART_RX_TX;//UART0 Interrupts*/ U0LCR |= 0x80;//Set DLAB U0DLL = reload;//Set Baud U0DLM = reload>>8;//Set Baud U0LCR &= ~0x80;//Clear DLAB U0FCR = 0x07;//Activate and clear FIFOs VICVectAddr0 = (unsigned long)sio_irq; VICVectCntl0 = 0x20|6; VICIntEnable = 1 << 6;//Enable UART0 Interrupt } /*-------------------------------------------------------------------------*/ void sio_irq(void) __irq{ switch (U0IIR&0x0E){ case 0x04://Receive Data Available ModBusBuff[ModBusBuffIndex]=U0RBR; ModBusBuffIndex++; StartTimer();//check frame by timeout break; case 0x02://char sent if(tx_i<tx_pos){ U0THR = tx_buf[tx_i++]; } break; } VICVectAddr = 0xFF;//Acknowledge Interrupt } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться