void UART_init(void) { // Habilito la llave general de las interrupciones NVICISER0 |= NVIC_ISER_SETENA(1<<31); //Habilito los cuatro modulos de UART SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; // Habilito el pin PTC1 como salida del canal 0 PORTB_PCR16 = (PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x03)); //Tx PORTB_PCR17 = (PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x03)); //Rx //Habilito por interrupcion, un bit de stop y baudrate UART_C1_REG(UART0_BASE_PTR) = 0x00; UART_BDH_REG(UART0_BASE_PTR) = /*UART_BDH_RXEDGIE_MASK | */UART_BDH_SBR(BAUDRATEHIGH); UART_BDL_REG(UART0_BASE_PTR) = UART_BDL_SBR(BAUDRATELOW); UART_C2_REG(UART0_BASE_PTR) = UART_C2_TIE_MASK | UART_C2_TE_MASK | UART_C2_RE_MASK | UART_C2_RIE_MASK; UART_C3_REG(UART0_BASE_PTR) = UART_C3_TXDIR_MASK; UART_PFIFO_REG(UART0_BASE_PTR) = UART_PFIFO_TXFE_MASK | UART_PFIFO_TXFIFOSIZE(0x06) | UART_PFIFO_RXFE_MASK | UART_PFIFO_RXFIFOSIZE(0x01); UART_S2_REG(UART0_BASE_PTR) = 0x00; }
void UART2_init(uint32_t BAUD_RATE) { uint16_t sbr=0; // auxiliary variable to store SBR register value /* PORT CONFIG */ SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK // clock gating for UART module pins | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK; SIM->SCGC4 |= SIM_SCGC4_UART2_MASK; // clock gating for UART module UART_GPIO_init(UART2_TX); UART_GPIO_init(UART2_RX); /* SBR */ sbr = (BUS_CLOCK)/(16*BAUD_RATE); /* UART MODULE CONFIG */ UART2->BDH |= UART_BDH_SBR(sbr>>8); // writing to higher register UART2->BDL = UART_BDL_SBR(sbr); // writing to lower register UART2->C2 |= UART_C2_TIE_MASK; // enabling transmit interrupt UART2->C2 |= UART_C2_RIE_MASK; // enabling receiver interrupt UART2_ENABLE_TX; // enabling transmiter UART2->C2 |= UART_C2_RE_MASK; // enabling receiver /* INTERRUPT CONFIG */ NVIC_ClearPendingIRQ(UART2_IRQn); NVIC_SetPriority(UART2_IRQn,3); NVIC_EnableIRQ(UART2_IRQn); }