smartleds (13.11.2006 14:00, просмотров: 1257)
Господа, подскажите в чем может быть причины не работы UART0 Использую LPC2138 UART0
При различной конфигурации ФАПЧ UART то работает ,а то нет.
Кварц использую 12МНz.
Хотелось бы частоту процессора установить 48MHz, а UART сконфигурировать на 2400бод
Процедура установки частоты процессорв и шины VPB
Если частоту кварца умножаю на 4 т.е. коэффициент M=4, для шины VPB (от которой UART работает) потом делю на 4, чтобы остались по прежнему 12MHz, то UART не работает
А если не увеличивать частоту процессора , и соответственно не уменьшать потом для шины VPB (M=0), то все работает.
Вот процедура увеличения частоты
void FrecInit(void)
{
unsigned char div;
// M=Cclk/Fosc=48/12=4
//P -> 156Mhz<Cclk*2*P<320Mhz
// PLLCFG_bit.MSEL = 4; //M - multiplier Cclk = freq external oscillator*M <60Mhz так не работает
PLLCFG_bit.MSEL = 0; //M - multiplier Cclk = freq external oscillator*M <60Mhz так работет
PLLCFG_bit.PSEL = 2; //P - devider 156Mhz<Cclk*2*P<320Mhz
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;
//enable or connect PLL
//enable PLL
PLLCON_bit.PLLE = 1;
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;
//wait for PLOK (correct freq)
while(PLLSTAT_bit.PLOCK == 0);
PLLCON_bit.PLLC = 1;
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;
// div=4; делю чтобы получить частоту VPB =12MHz
div=1; делю на 1 поскольку частота VPB уже 12MHz
VPBDIV=div; // frequence VPB-->Pclk Pclk=Cclk/div; div=1,2 or 4
// PLLFEED_bit.FEED = 0xAA;
// PLLFEED_bit.FEED = 0x55;
}