diff --git a/bsp/imx6ull-artpi-smart/drivers/board.c b/bsp/imx6ull-artpi-smart/drivers/board.c index d7590bc35c901de1645214f061ce832866ea2198..151b7375b677dcd561bc70131f75cc6702544b5c 100644 --- a/bsp/imx6ull-artpi-smart/drivers/board.c +++ b/bsp/imx6ull-artpi-smart/drivers/board.c @@ -82,6 +82,19 @@ int board_reboot(int argc, char **argv) } MSH_CMD_EXPORT_ALIAS(board_reboot, reboot, reboot system); +void assert_handler(const char *ex_string, const char *func, rt_size_t line) +{ + volatile char dummy = 0; + extern int list_thread(void); + extern void rt_backtrace(void); + + list_thread(); + rt_backtrace(); + rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line); + while (dummy == 0) + ; +} + void rt_hw_board_init(void) { #ifdef RT_USING_USERSPACE @@ -109,4 +122,5 @@ void rt_hw_board_init(void) rt_console_set_device(RT_CONSOLE_DEVICE_NAME); rt_thread_idle_sethook(idle_wfi); + rt_assert_set_hook(assert_handler); } diff --git a/bsp/imx6ull-artpi-smart/drivers/drv_adc.c b/bsp/imx6ull-artpi-smart/drivers/drv_adc.c index 0ee1b777f14b8c1c1665ca8b7169be834a63d362..9b91b80988f25717850c3e30a9147695b5be2ec8 100644 --- a/bsp/imx6ull-artpi-smart/drivers/drv_adc.c +++ b/bsp/imx6ull-artpi-smart/drivers/drv_adc.c @@ -50,12 +50,13 @@ static rt_err_t imx6ull_adc_convert(struct rt_adc_device *device, rt_uint32_t ch return RT_EOK; } +#if defined(BSP_USING_ADC1_1) || defined(BSP_USING_ADC1_2) || defined(BSP_USING_ADC1_3) || defined(BSP_USING_ADC1_4) static struct rt_adc_ops imx6ull_adc_ops = { .enabled = imx6ull_adc_enabled, .convert = imx6ull_adc_convert, }; - +#endif int imx6ull_adc_gpio_init(void) { @@ -165,6 +166,7 @@ void set_adc_default(void *parameter) { int result = 0; + result = result; #ifdef BSP_USING_ADC1_1 do { struct rt_adc_device *device = RT_NULL; @@ -229,7 +231,6 @@ void set_adc_default(void *parameter) rt_kprintf("adc ch4 read result is %d\n",result); } while(0); #endif - } static int set_adc_init(void) diff --git a/bsp/imx6ull-artpi-smart/drivers/drv_i2c.c b/bsp/imx6ull-artpi-smart/drivers/drv_i2c.c index b937e74297078f96b68ffd58d8380d35a388a193..148c67c9557506bce38b8ba0d818fabaec039727 100644 --- a/bsp/imx6ull-artpi-smart/drivers/drv_i2c.c +++ b/bsp/imx6ull-artpi-smart/drivers/drv_i2c.c @@ -49,8 +49,11 @@ static uint32_t g_MasterCompletionFlag[4] = {0,0,0,0}; static void i2c_master_callback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData) { /* Signal transfer success when received success status. */ - - uint32_t instance = I2C_GetInstance(imx6ull_get_periph_paddr((uint32_t)base)); + struct imx6ull_i2c_config *config; + + config = (struct imx6ull_i2c_config*)userData; + + uint32_t instance = I2C_GetInstance(config->hw_base); if (status == kStatus_Success) { g_MasterCompletionFlag[instance-1] = 1; @@ -70,7 +73,7 @@ static rt_size_t imx6ull_i2c_mst_xfer(struct rt_i2c_bus_device *bus, struct rt_i uint32_t instance = 0; i2c_bus = (struct imx6ull_i2c_bus *)bus; - instance = I2C_GetInstance(imx6ull_get_periph_paddr((uint32_t)i2c_bus->config->I2C)); + instance = I2C_GetInstance(i2c_bus->config->hw_base); for(i = 0 ;i < num; i++) { if(msgs[i].flags & RT_I2C_RD) @@ -174,7 +177,8 @@ int rt_hw_i2c_init(void) for(int i = 0; i < obj_num; i++) { i2c_obj[i].config = &i2c_config[i]; - i2c_obj[i].config->I2C = (I2C_Type *)imx6ull_get_periph_vaddr((rt_uint32_t)(i2c_obj[i].config->I2C)); + i2c_obj[i].config->hw_base = i2c_obj[i].config->I2C; + i2c_obj[i].config->I2C = (I2C_Type *)imx6ull_get_periph_vaddr((rt_uint32_t)i2c_obj[i].config->hw_base); i2c_obj[i].parent.ops = &imx6ull_i2c_ops; imx6ull_i2c_gpio_init(&i2c_obj[i]); @@ -187,11 +191,10 @@ int rt_hw_i2c_init(void) rt_i2c_bus_device_register(&i2c_obj[i].parent, i2c_obj[i].config->name); -#ifdef IMX_I2C_IRQ_MODE - I2C_MasterTransferCreateHandle(imx6ull_get_periph_paddr((uint32_t)(i2c_obj[i].config->I2C)), &i2c_obj[i].config->master_handle, i2c_master_callback, NULL); - rt_hw_interrupt_install(i2c_obj[i].config->irq_num, (rt_isr_handler_t)I2C_DriverIRQHandler, (void *)i2c_obj[i].config->I2C,i2c_obj[i].config->name); +#ifdef IMX_I2C_IRQ_MODE + I2C_MasterTransferCreateHandle(i2c_obj[i].config->hw_base, &i2c_obj[i].config->master_handle, i2c_master_callback, i2c_obj[i].config); + rt_hw_interrupt_install(i2c_obj[i].config->irq_num, (rt_isr_handler_t)I2C_DriverIRQHandler, i2c_obj[i].config, i2c_obj[i].config->name); #endif - } return RT_EOK; diff --git a/bsp/imx6ull-artpi-smart/drivers/drv_i2c.h b/bsp/imx6ull-artpi-smart/drivers/drv_i2c.h index 4471683b598004b3de9ea9cb1c24faa1690b0fdb..774d45eb54744ced3dd790a5a4e2fcf04a0f0d1b 100644 --- a/bsp/imx6ull-artpi-smart/drivers/drv_i2c.h +++ b/bsp/imx6ull-artpi-smart/drivers/drv_i2c.h @@ -23,6 +23,7 @@ struct imx6ull_i2c_config { + void *hw_base; /* hardware physical address base */ I2C_Type *I2C; char *name; rt_uint32_t baud_rate; diff --git a/bsp/imx6ull-artpi-smart/drivers/drv_usbd.c b/bsp/imx6ull-artpi-smart/drivers/drv_usbd.c index fb39b1a2d381b3e5747bb1cd5d28620e669d4a1c..baa3cd20cf5f85b79730202be0017475b044e7da 100644 --- a/bsp/imx6ull-artpi-smart/drivers/drv_usbd.c +++ b/bsp/imx6ull-artpi-smart/drivers/drv_usbd.c @@ -15,6 +15,9 @@ #include #include #include + +#define USB0_IRQNUM 75 + /* USB PHY condfiguration */ #define BOARD_USB_PHY_D_CAL (0x0CU) #define BOARD_USB_PHY_TXCAL45DP (0x06U) @@ -27,9 +30,6 @@ static struct udcd _fsl_udc_0; static usb_status_t usb_device_callback(usb_device_handle handle, uint32_t callbackEvent, void *eventParam); static usb_status_t usb_device_endpoint_callback(usb_device_handle handle, usb_device_endpoint_callback_message_struct_t *message, void *callbackParam); -#define virtual_to_physical(v) ((void *)((size_t)v + PV_OFFSET)) -#define physical_to_virtual(p) ((void *)((size_t)p - PV_OFFSET)) - static void USB_DeviceIsrEnable(uint8_t controllerId) { uint8_t irqNumber; @@ -98,9 +98,19 @@ static struct ep_id _ehci0_ep_pool[] = * * @return None. */ -void USB_OTG1_IRQHandler(int irq, void *base) +static struct rt_workqueue *usb0_wq = NULL; +static struct rt_work usb0_work; +void ehci0_work(struct rt_work *work, void *work_data) { USB_DeviceEhciIsrFunction(ehci0_handle); + rt_hw_interrupt_umask(USB0_IRQNUM); +} + +void USB_OTG1_IRQHandler(int irq, void *base) +{ + // USB_DeviceEhciIsrFunction(ehci0_handle); + rt_hw_interrupt_mask(USB0_IRQNUM); + rt_workqueue_dowork(usb0_wq, &usb0_work); } static rt_err_t _ehci0_ep_set_stall(rt_uint8_t address) @@ -216,8 +226,11 @@ static rt_err_t drv_ehci0_usbd_init(rt_device_t device) RT_ASSERT(ehci0_handle); if(result == kStatus_USB_Success) { - rt_hw_interrupt_install(75, USB_OTG1_IRQHandler, (void *)ehci0_handle,"usb1_intr"); - rt_hw_interrupt_umask(75); + usb0_wq = rt_workqueue_create("u0wq", 4096, 3); + rt_work_init(&usb0_work, ehci0_work, NULL); + + rt_hw_interrupt_install(USB0_IRQNUM, USB_OTG1_IRQHandler, (void *)ehci0_handle, "usb1_intr"); + rt_hw_interrupt_umask(USB0_IRQNUM); USB_DeviceRun(ehci0_handle); } else diff --git a/bsp/imx6ull-artpi-smart/libraries/sdk/devices/MCIMX6Y2/drivers/fsl_i2c.c b/bsp/imx6ull-artpi-smart/libraries/sdk/devices/MCIMX6Y2/drivers/fsl_i2c.c index c17020e1004e61a4d3857a1d67e7184023bfa79d..4abeffe754a8c2a94a113eb506483fe5fc6631e5 100644 --- a/bsp/imx6ull-artpi-smart/libraries/sdk/devices/MCIMX6Y2/drivers/fsl_i2c.c +++ b/bsp/imx6ull-artpi-smart/libraries/sdk/devices/MCIMX6Y2/drivers/fsl_i2c.c @@ -1373,10 +1373,14 @@ void I2C4_DriverIRQHandler(void) } #endif -extern void *imx6ull_get_periph_paddr(uint32_t vaddr); +#include void I2C_DriverIRQHandler(int irq, void *base) { + struct imx6ull_i2c_config *config; uint32_t i2c_instance = 0; - i2c_instance = I2C_GetInstance(imx6ull_get_periph_paddr((uint32_t)base)); - I2C_TransferCommonIRQHandler(base, s_i2cHandle[i2c_instance]); + + config = (struct imx6ull_i2c_config*)base; + + i2c_instance = I2C_GetInstance(config->hw_base); + I2C_TransferCommonIRQHandler(config->I2C, s_i2cHandle[i2c_instance]); }