Estou iniciando os estudos da familia CM3 da NXP. Comprei um kit (http://www.poweravr.com/bbs/viewthread.php?tid=831&extra=) e estou testando os periféricos e desenvolvendo as lib.
Fiz a UART funcionar via INT. Tenho o costume de encerar uma comunicação por timeout, geralmente usando um timer. Então, lendo o manual do usuário, vi poderia usar o módulo RIT para gerar interrupções periódicas. Assim, poderia deixar os timers para outras funções. Configurei tudo tudo, carreguei o programa e....nada. O programa trava. Mexi no código para tentar descobrir a fonte do problema e notei que se eu alterar qualquer registrador do módulo RIT, o programa trava.
Alguém tem experiência com isso? Pode me dar uma ajuda?
Configuração da UART2
- Código: Selecionar todos
LPC_PINCON->PINSEL0 |= (1 << 20); /* Pin P0.10 used as TXD2 */
LPC_PINCON->PINSEL0 |= (1 << 22); /* Pin P0.11 used as RXD2 */
LPC_SC->PCONP = LPC_SC->PCONP|(1<<24); /* habilita o modulo UART */
LPC_UART2->LCR = 0x83; /* libera acesso aos registradores */
dummy = (FPCLK/16) / UART2_BPS; /* ajusta o baud rate */
LPC_UART2->DLM = dummy / 256;
LPC_UART2->DLL = dummy % 256;
LPC_UART2->LCR = 0x03; /* trava acesso aos registradores. Frame de dados de 8 bits */
LPC_UART2->FCR = 0x06;
dummy = LPC_UART2->IIR; // Read IrqID - Required to Get Interrupts Started
dummy = LPC_UART2->RBR; //clear receive register
dummy = LPC_UART2->LSR; //clear line status register
LPC_UART2->IER = 7; // Habilita a interrupção do RX2
/* preemption = 1, sub-priority = 1 */
NVIC_SetPriority(UART2_IRQn, ((0x01<<3)|0x01));
NVIC_EnableIRQ(UART2_IRQn); /* Enable Interrupt for UART2 channel */
Configuração do RIT
- Código: Selecionar todos
/* Int a cada 5ms*/
LPC_RIT->RICOMPVAL = 125000;
/* Ajusta o timer para zerar o contador quando atingir o valor de RICOMPVAL*/
LPC_RIT->RICTRL = 0x0E;
LPC_RIT->RICOUNTER = 0;
NVIC_SetPriority(RIT_IRQn, ((0x01<<3)|0x01));
NVIC_EnableIRQ(RIT_IRQn); // Ativa a interrupção