TI中文支持网
TI专业的中文技术问题搜集分享网站

PROCESSOR-SDK-OMAPL138: omapl138 USB dev不能适别的问题

Part Number:PROCESSOR-SDK-OMAPL138

大佬们:帮忙分析一下

根据之前帖的描述,在USB中断里面加一些调试信息会出现死机的现象。现在找到原因是串口调试用的是中断输出方式,只要串口调试改成查询方式就可以正常在USB中断进行打印输出 了。

但现在出现的问题是USB中断一直没有产生USB 端点0的中断,即没有跑如下代码:

/* Handle end point 0 interrupts. */
if(musb->epIrqStatus & USB_INTEP_0)
{
debug_printf("USB_INTEP_0 \n");
debug_printf(".\n");
musb->ulUSBEP0IntCount++;
usbMusbDcdEp0EvntHandler(musb);
}

只产生了USB reset的中断,好像产生了4次, 即如下代码:

/* Received a reset from the host. */
if(ulStatus & USB_INTCTRL_RESET)
{
debug_printf(".\n");
musb->ulUSBRstCount++;
usbMusbDcdRstEvntHandler(musb);
return 0;
}

现在找到原因是没有产生USB 端点 0的中断, 所以就出USB设备无法适别,没有枚举过程

各们TI的大佬们麻烦你们帮忙分析一下原因!

   谢谢了!

Nancy Wang:

请问是测试 USB_DevMsc_lcdkOMAPL138_armExampleProject 的吗?是否有做改动?

,

EricPengYong:

是这个工程,刚开始没有做任何改动是不行的,现在只做了while(1)循环下加了Task_sleep函数如下改动还是不行

Void taskFxn(UArg a0, UArg a1){ USB_Params usb_dev_params; USB_Handle usb_handle;

consolePrintf("\nRTOS USB Dev MSC example!!\n");

/* Initialize the RAMDisk */ RAMDISKUtilsInit((uint8_t *)gRamDisk, sizeof(gRamDisk)); formatRamDisk();

usb_dev_params.usbMode = USB_DEVICE_MSC_MODE; usb_dev_params.instanceNo = USB_DEV_INSTANCE; /* USB port # */ usb_dev_params.usbClassData = (void*)&g_sMSCDevice; usb_handle = USB_open(usb_dev_params.instanceNo, &usb_dev_params);

if (usb_handle == 0) { consolePrintf("Failed to open USB driver\n"); while(1); }

usbdIntrConfig(usb_handle, &usb_dev_params);

consolePrintf("Done configuring USB and its interrupt. Example is ready!\n");

while(1) { /* Main while loop. All USB dev events are handled in interrupt context */// System_printf("test——>1\n"); Task_sleep(100);// System_printf("test——>2\n"); Task_sleep(100); }

}

,

Nancy Wang:

我帮您升级到了英文论坛,会有相关专家给您提供支持。

e2e.ti.com/…/processor-sdk-omapl138-usb-dev-can-t-be-recognized

,

EricPengYong:

现在问题解决了,谢谢您(Nancy Wang)一直关注和提供帮助! 

现将解决的问题分享给大家,希望能帮助到有需要的朋友们。

 

1. 在初始化的时候将USB 的两个寄存器设置一下:

// Interrupt Enable Register for INTRUSB (INTRUSBE)

HWREGB(0x01E00000u+0x40B) = 0xf7;  // INTRUSBE reg

Power Management Register (POWER) Field Descriptions

HWREGB(0x01E00000u+0x401) = 0x41;  // POWER reg   

只要重新设置一下以上的两个寄存器后,USB端点0也产生了中断了,USB盘符也弹出来了。     

2.  这两个寄存器代码实际加的位置在如下函数这里:

void USB_irqConfig_musb(USB_Handle handle, USB_Params* params){#if 1   // 在此位置设置了这两个寄存器的值HWREGB(0x01E00000u+0x40B) = 0xf7;  // INTRUSBE regHWREGB(0x01E00000u+0x401) = 0x41;  // POWER reg   #endif

switch (params->usbMode) { case USB_HOST_MSC_MODE: /*usb_set_wrapper(params->instanceNo); */

break;

case USB_DEVICE_MSC_MODE: case USB_DEVICE_AC_MODE: /* Enable USB Interrupts. */ USBEnableOtgIntr(musbObj[params->instanceNo].uiSubBaseAddr);

USBIntEnableControl(musbObj[params->instanceNo].baseAddr, USB_INTCTRL_RESET | USB_INTCTRL_DISCONNECT | USB_INTCTRL_RESUME | USB_INTCTRL_SUSPEND | USB_INTCTRL_SOF);

USBIntEnableEndpoint(musbObj[params->instanceNo].baseAddr, USB_INTEP_ALL);

#ifdef DMA_MODE if (handle->handleCppiDmaInApp == FALSE) { USBDmaIntEnable(params); }#endif

break;

default: return; } }

3. 自己layout的板子说明:

自己画的板子,使用的是OMAPL132    晶振:19.2Mhz    CPU主频为192Mhz

4. 原因分析:

会不会是USB走线的原因引起的,这个还有待后面的一些验证

5. 附上两个寄存器的说明:

赞(0)
未经允许不得转载:TI中文支持网 » PROCESSOR-SDK-OMAPL138: omapl138 USB dev不能适别的问题
分享到: 更多 (0)