Перейти к содержанию
    

LPC2148 UART baudrate

 

Имеется совершенно "стандартный" кит - 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!!!

Никто с таким странным поведением не сталкивался? Мож кто подскажет где искать грабли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/*-------------------------------------------------------------------------*/
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
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...