2012-07-03 1 views
1

J'ai quelques problèmes avec la façon de changer la vitesse de transmission de l'uart sur mon lpc1768.La modification de la vitesse de transmission UARTx pour le LPC 1768 ne fonctionne pas

Pour init et configurer mes UART, j'utilise le code suivant et qui fonctionne très bien avec 9600 bauds ou 38400.

/* RxD0 is P0.3 and TxD0 is P0.2 */ 
LPC_PINCON->PINSEL0 &= ~(0x03<<4);   // Reset P0.2 = GPIO 
LPC_PINCON->PINSEL0 |= (0x01<<4);   // Config P0.2 = TxD0 
LPC_PINCON->PINSEL0 &= ~(0x03<<6);  // Reset P0.3 = GPIO 
LPC_PINCON->PINSEL0 |= (0x01<<6);   // Config P0.3 = RxD0 

LPC_UART0->LCR = 0x87; //8bits, no parity, 2 stop bits 
switch (baudrate) 
{ 
default : 
case 9600 : 
    LPC_UART0->DLM = 0x00; //calculated with datasheet 
    LPC_UART0->DLL = 0x4E; 

    LPC_UART0->FDR = 0x21; 
    break; 

case 38400 : 
    LPC_UART0->DLM = 0x00; //calculated with datasheet 
    LPC_UART0->DLL = 0x14; 

    LPC_UART0->FDR = 0xF7; 
} 




LPC_UART0->LCR = 0x07;//0x03;  /* DLAB = 0 */ 
LPC_UART0->FCR = 0x07;  /* Enable and reset TX and RX FIFO. */ 

NVIC_EnableIRQ(UART0_IRQn); 

LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */ 

Mais pour changer la vitesse de transmission 9600-38400, j'essaie de changer juste la DLM/Les registres DLL et FDR ont la valeur appropriée (comme dans le code ci-dessus). Mais ça ne marche pas ... (le débit en bauds n'est pas défini).

Mon PCLK est 18MHz

en ne changeant que ces trois registres ne suffit pas? Ai-je tort ?

Répondre

2

J'ai trouvé la solution: J'ai oublié de mettre le bit DLAB dans le registre LCR. Sans ce changement, il n'est pas possible de changer la vitesse de transmission.

Et une façon simple de modifier le débit binaire ca être que:

LPC_UART0->LCR = 0x87; 
    switch (baudrate) 
    { 
    default : 
    case 9600 : 
     LPC_UART0->DLM = 0x00; //fhn calculated with algorithm in the datasheet 
     LPC_UART0->DLL = 0x4E;//0x06; 

     LPC_UART0->FDR = 0x21;//0x85;calculation, but not sure to need 
    break; 

     case 38400 : 
     LPC_UART0->DLM = 0x00; 
     LPC_UART0->DLL = 0x14;//0x06; 

     LPC_UART0->FDR = 0xF7; 
    break; 
} 
LPC_UART0->LCR = 0x07; 
Questions connexes