/// \method deinit() /// Turn off the UART bus. STATIC mp_obj_t pyb_uart_deinit(mp_obj_t self_in) { pyb_uart_obj_t *self = self_in; uint uartPerh; switch (self->uart_id) { case PYB_UART_0: uartPerh = PRCM_UARTA0; break; case PYB_UART_1: uartPerh = PRCM_UARTA1; break; default: return mp_const_none; } self->enabled = false; MAP_UARTIntDisable(self->reg, UART_INT_RX | UART_INT_RT); MAP_UARTIntClear(self->reg, UART_INT_RX | UART_INT_RT); MAP_UARTIntUnregister(self->reg); MAP_UARTDisable(self->reg); MAP_PRCMPeripheralClkDisable(uartPerh, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK); return mp_const_none; }
void GPS_init() { dbg_printf("Initializing GPS module..."); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART); MAP_GPIOPinConfigure(GPIO_PA0_U0RX); MAP_GPIOPinConfigure(GPIO_PA1_U0TX); MAP_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); MAP_UARTConfigSetExpClk(UART_BASE, MAP_SysCtlClockGet(), UART_SPEED, UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE); MAP_UARTDisable(UART_BASE); MAP_UARTTxIntModeSet(UART_BASE, UART_TXINT_MODE_EOT); MAP_UARTIntEnable(UART_BASE, UART_INT_RX | UART_INT_TX); MAP_IntEnable(INT_UART); MAP_UARTEnable(UART_BASE); MAP_UARTFIFODisable(UART_BASE); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); // MAP_IntEnable(INT_GPIOG); // Настроить прерывания на PPS MAP_GPIOIntTypeSet(GPIO_PORTG_BASE, GPIO_PIN_7, GPIO_FALLING_EDGE); MAP_GPIOPinIntEnable(GPIO_PORTG_BASE, GPIO_PIN_7); // if (tn_task_create(&task_GPS_tcb, &task_GPS_func, TASK_GPS_PRI, &task_GPS_stk[TASK_GPS_STK_SZ - 1], TASK_GPS_STK_SZ, 0, TN_TASK_START_ON_CREATION) != TERR_NO_ERR) { dbg_puts("tn_task_create(&task_GPS_tcb) error"); goto err; } // Настроить прерывания на PPS //MAP_IntEnable(INT_GPIOG); //MAP_GPIOIntTypeSet(GPIO_PORTG_BASE, GPIO_PIN_7, GPIO_FALLING_EDGE); //MAP_GPIOPinIntEnable(GPIO_PORTG_BASE, GPIO_PIN_7); dbg_puts("[done]"); return; err: dbg_trace(); tn_halt(); }
void Uart0::close() { /* Check if port is open */ if (!is_open()) return; /* Disable Serial Port */ MAP_UARTDisable(UARTA0_BASE); MAP_UARTIntDisable(UARTA0_BASE, UART_INT_RX | UART_INT_TX); /* Free the buffers */ in_buffer_.destroy(); out_buffer_.destroy(); /* Clean the port open status */ open_ = false; g_uart0_object = NULL; }
Uart0::Error Uart0::config_uart() { if (is_open()) return kPortAlreadyOpen; uint32_t data_bits_cc3200; switch (data_bits) { case 5: data_bits_cc3200 = UART_CONFIG_WLEN_5; break; case 6: data_bits_cc3200 = UART_CONFIG_WLEN_6; break; case 7: data_bits_cc3200 = UART_CONFIG_WLEN_7; break; case 8: data_bits_cc3200 = UART_CONFIG_WLEN_8; break; default: return kUnsuportedFeature; } uint32_t stop_bits_cc3200; switch (stop_bits) { case 1: stop_bits_cc3200 = UART_CONFIG_STOP_ONE; break; case 2: stop_bits_cc3200 = UART_CONFIG_STOP_TWO; break; default: return kUnsuportedFeature; } uint32_t parity_cc3200; switch (parity) { case kParityEven: parity_cc3200 = UART_CONFIG_PAR_EVEN; break; case kParityMark: parity_cc3200 = UART_CONFIG_PAR_ONE; break; case kParityNone: parity_cc3200 = UART_CONFIG_PAR_NONE; break; case kParityOdd: parity_cc3200 = UART_CONFIG_PAR_ODD; break; case kParitySpace: parity_cc3200 = UART_CONFIG_PAR_ZERO; break; default: return kUnsuportedFeature; } MAP_UARTConfigSetExpClk(UARTA0_BASE, 80000000, baud, (data_bits_cc3200 | stop_bits_cc3200 | parity_cc3200)); /* * Disable UART to modify the configuration. * This is needed because the SetExpClk function enables the UART */ MAP_UARTDisable(UARTA0_BASE); switch (flow_control) { case kFlowControlNone: MAP_UARTFlowControlSet(UARTA0_BASE, UART_FLOWCONTROL_NONE); break; case kFlowControlHardware: /* Enable RTS/CTS Flow Control */ if (mode == kModeDuplex) MAP_UARTFlowControlSet(UARTA0_BASE, UART_FLOWCONTROL_TX | UART_FLOWCONTROL_RX); if (mode == kModeRxOnly) MAP_UARTFlowControlSet(UARTA0_BASE, UART_FLOWCONTROL_RX); if (mode == kModeTxOnly) MAP_UARTFlowControlSet(UARTA0_BASE, UART_FLOWCONTROL_TX); break; default: return kUnsuportedFeature; break; } /* Register Interrupt */ MAP_UARTIntRegister(UARTA0_BASE, isr); /* Enable Interrupt */ MAP_UARTTxIntModeSet(UARTA0_BASE, UART_TXINT_MODE_EOT); MAP_UARTIntClear(UARTA0_BASE, UART_INT_TX | UART_INT_RX); uint32_t interrupts = 0; if ((mode == kModeDuplex) || (mode == kModeTxOnly)) interrupts |= UART_INT_TX; if ((mode == kModeDuplex) || (mode == kModeRxOnly)) interrupts |= UART_INT_RX; MAP_UARTIntEnable(UARTA0_BASE, interrupts); /* Enable UART */ MAP_UARTEnable(UARTA0_BASE); /* Disable Fifo */ MAP_UARTFIFODisable(UARTA0_BASE); return kOK; }