uint32_t _kuart_mix_init ( /* [IN] the interrupt I/O initialization information */ IO_SERIAL_INT_DEVICE_STRUCT_PTR int_io_dev_ptr, /* [IN] the rest of the name of the device opened */ char * open_name_ptr ) { /* Body */ KUART_INFO_STRUCT_PTR sci_info_ptr; KUART_INIT_STRUCT_PTR sci_init_ptr; uint32_t result = MQX_OK; //Init basic uart setting sci_init_ptr = int_io_dev_ptr->DEV_INIT_DATA_PTR; result = _kuart_polled_init((void *)sci_init_ptr, &int_io_dev_ptr->DEV_INFO_PTR, open_name_ptr); if (result != MQX_OK) { return(result); }/* Endif */ sci_info_ptr = int_io_dev_ptr->DEV_INFO_PTR; sci_info_ptr->RX_KEEP = 1; /* Add a timer config to check the UART RX state */ sci_info_ptr->LW_TIMER_PTR = (LWTIMER_PERIOD_STRUCT_PTR)_mem_alloc_system_zero(sizeof(LWTIMER_PERIOD_STRUCT) + sizeof(LWTIMER_STRUCT)); if (!sci_info_ptr->LW_TIMER_PTR) { result = MQX_OUT_OF_MEMORY; goto error_free_timer; } sci_info_ptr->LW_TIMER = (LWTIMER_STRUCT_PTR)((uint8_t *)sci_info_ptr->LW_TIMER_PTR + sizeof(LWTIMER_PERIOD_STRUCT)); _time_init_ticks(&sci_info_ptr->ticks, 1); _lwtimer_create_periodic_queue(sci_info_ptr->LW_TIMER_PTR ,*(uint32_t *)(&sci_info_ptr->ticks), 0); _lwtimer_add_timer_to_queue( sci_info_ptr->LW_TIMER_PTR, sci_info_ptr->LW_TIMER, 0, _kuart_period_isr, (void *)int_io_dev_ptr); /* RX DMA setting */ sci_info_ptr->RX_BUF = _mem_alloc_system_zero_uncached(sci_init_ptr->IQUEUE_SIZE); sci_info_ptr->RX_ACTIVE = sci_info_ptr->RX_BUF; if (!sci_info_ptr->RX_BUF) { result = MQX_OUT_OF_MEMORY; goto error_free_buf; } sci_info_ptr->RX_DMA_CHAN = sci_init_ptr->RX_DMA_CHANNEL; sci_info_ptr->RX_DMA_HARDWARE_REQUEST = _bsp_get_serial_rx_dma_request(sci_init_ptr->DEVICE); #if PSP_MQX_CPU_IS_KINETIS sci_info_ptr->ERR_INT = _bsp_get_serial_error_int_num(sci_init_ptr->DEVICE); #endif sci_info_ptr->RX_DMA_SEQ = 0; result = dma_channel_claim(&sci_info_ptr->RX_DCH, sci_info_ptr->RX_DMA_CHAN); if (result != MQX_OK) { goto error_free_channel; } result = dma_callback_reg(sci_info_ptr->RX_DCH, _kuart_dma_rx_isr, int_io_dev_ptr); dma_channel_setup(sci_info_ptr->RX_DCH, 1, DMA_CHANNEL_FLAG_LOOP_MODE); dma_request_source(sci_info_ptr->RX_DCH, sci_info_ptr->RX_DMA_HARDWARE_REQUEST); if (result != MQX_OK) { goto error_free_channel; } /* Init RX/TX interrupt vector */ sci_info_ptr->OLD_ISR_TXRX_DATA = _int_get_isr_data(sci_init_ptr->RX_TX_VECTOR); sci_info_ptr->OLD_ISR_EXCEPTION_HANDLER = _int_get_exception_handler(sci_init_ptr->RX_TX_VECTOR); sci_info_ptr->OLD_ISR_TXRX = _int_install_isr(sci_init_ptr->RX_TX_VECTOR, _kuart_mix_int_tx_isr, int_io_dev_ptr); _bsp_int_init(sci_init_ptr->RX_TX_VECTOR, sci_init_ptr->RX_TX_PRIORITY, 0, TRUE); /* Init mix error vector */ sci_info_ptr->OLD_ISR_ERR = _int_install_isr(sci_info_ptr->ERR_INT, _kuart_mix_err_isr, int_io_dev_ptr); _bsp_int_init(sci_info_ptr->ERR_INT, sci_init_ptr->ERR_PRIORITY, 0, TRUE); /* config the UART RX channel first */ _kuart_prepare_rx_dma(int_io_dev_ptr); return(MQX_OK); error_free_timer: if (!sci_info_ptr->LW_TIMER_PTR) _mem_free(sci_info_ptr->LW_TIMER_PTR); error_free_channel: dma_channel_release(sci_info_ptr->RX_DCH); error_free_buf: if (sci_info_ptr->RX_BUF) _mem_free(sci_info_ptr->RX_BUF); return result; } /* Endbody */
void lcd_task(uint32_t initial_data) { // MQX_FILE_PTR adc_file; TCHRES_INSTALL_PARAM_STRUCT install_params; printf("Hello from LCD demo\n\r"); #if (defined BSP_TCHRES_ADC_XPLUS_DEVICE) && (defined BSP_TCHRES_ADC_YPLUS_DEVICE) printf("Opening ADC device for XPLUS electrode ... " BSP_TCHRES_ADC_XPLUS_DEVICE " "); if (fopen(BSP_TCHRES_ADC_XPLUS_DEVICE, (const char*)&adc_init) == NULL) { printf("failed\n"); _task_block(); } else { install_params.ADC_XPLUS_DEVICE = BSP_TCHRES_ADC_XPLUS_DEVICE; printf("done\n"); } printf("Opening ADC device for YPLUS electrode ... " BSP_TCHRES_ADC_YPLUS_DEVICE " "); if (fopen(BSP_TCHRES_ADC_YPLUS_DEVICE, (const char*)&adc_init) == NULL) { printf("failed\n"); _task_block(); } else { install_params.ADC_YPLUS_DEVICE = BSP_TCHRES_ADC_YPLUS_DEVICE; printf("done\n"); } #elif (defined BSP_TCHRES_ADC_DEVICE) printf("Opening ADC device for XPLUS and YPLUS electrodes ... " BSP_TCHRES_ADC_DEVICE " "); if (fopen(BSP_TCHRES_ADC_DEVICE, (const char*)&adc_init) == NULL) { printf("failed\n"); _task_block(); } else { install_params.ADC_XPLUS_DEVICE = install_params.ADC_YPLUS_DEVICE = BSP_TCHRES_ADC_DEVICE; printf("done\n"); } #else printf("This demo application requires ADC devices for TCHRES to be defined!\n"); _task_block(); #endif #if ADC_IOCTL_CALIBRATE // ioctl( adc_file, ADC_IOCTL_CALIBRATE, NULL ); #endif _io_tchres_install("tchscr:", &_bsp_tchscr_resisitve_init, &install_params ); // Create the lwtimer component _lwtimer_create_periodic_queue(&lwt_ps, 25 / 5, 40); _lwtimer_add_timer_to_queue(&lwt_ps, &lwt_st25, 0, Time_event25ms, 0); if(!D4D_Init(&screen_entry)) { // D4D initialization failed printf("eGUI/D4D initialization failed\n\r"); _mqx_exit(0); } D4D_SetOrientation(D4D_ORIENT_LANDSCAPE); D4D_CheckTouchScreen(); for(;;) { D4D_Poll(); _time_delay(10); } }