Fixed stop procedure in the USB driver.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5634 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2013-04-27 10:06:06 +00:00
parent 6d4cee3b28
commit 4434fed8d8
7 changed files with 32 additions and 16 deletions

View File

@ -44,7 +44,7 @@
uninit [label="USB_UNINIT", style="bold"]; uninit [label="USB_UNINIT", style="bold"];
ready [label="USB_READY\nClock Enabled"]; ready [label="USB_READY\nClock Enabled"];
selected [label="\nUSB_SELECTED\naddress\nassigned"]; selected [label="\nUSB_SELECTED\naddress\nassigned"];
configured [label="\nUSB_ACTIVE\nconfiguration\nselected"]; active [label="\nUSB_ACTIVE\nconfiguration\nselected"];
uninit -> stop [label=" usbInit()", constraint=false]; uninit -> stop [label=" usbInit()", constraint=false];
stop -> stop [label="\nusbStop()"]; stop -> stop [label="\nusbStop()"];
@ -53,12 +53,14 @@
ready -> ready [label="\n\nusbStart()"]; ready -> ready [label="\n\nusbStart()"];
ready -> ready [label="\nSUSPEND/WAKEUP\n>event_cb<"]; ready -> ready [label="\nSUSPEND/WAKEUP\n>event_cb<"];
ready -> selected [label="\nSET_ADDRESS\n>event_cb<"]; ready -> selected [label="\nSET_ADDRESS\n>event_cb<"];
selected -> stop [label="\nusbStop()"];
selected -> ready [label="\nUSB RESET\n>event_cb<"]; selected -> ready [label="\nUSB RESET\n>event_cb<"];
selected -> selected [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<"]; selected -> selected [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<"];
selected -> configured [label="\nSET_CONF(n)\n>event_cb<"]; selected -> active [label="\nSET_CONF(n)\n>event_cb<"];
configured -> selected [label="\nSET_CONF(0)\n>event_cb<"]; active -> stop [label="\nusbStop()"];
configured -> configured [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<\n\nEndpoints Activity\n >in_cb< or >out_cb<"]; active -> selected [label="\nSET_CONF(0)\n>event_cb<"];
configured -> ready [label="\nUSB RESET\n>event_cb<"]; active -> active [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<\n\nEndpoints Activity\n >in_cb< or >out_cb<"];
active -> ready [label="\nUSB RESET\n>event_cb<"];
} }
* @enddot * @enddot
* @else * @else
@ -73,7 +75,7 @@
uninit [label="USB_UNINIT", style="bold"]; uninit [label="USB_UNINIT", style="bold"];
ready [label="USB_READY\nClock Enabled"]; ready [label="USB_READY\nClock Enabled"];
selected [label="\nUSB_SELECTED\naddress\nassigned"]; selected [label="\nUSB_SELECTED\naddress\nassigned"];
configured [label="\nUSB_ACTIVE\nconfiguration\nselected"]; active [label="\nUSB_ACTIVE\nconfiguration\nselected"];
uninit -> stop [label=" usbInit()", constraint=false]; uninit -> stop [label=" usbInit()", constraint=false];
stop -> stop [label="\nusbStop()"]; stop -> stop [label="\nusbStop()"];
@ -82,12 +84,14 @@
ready -> ready [label="\n\nusbStart()"]; ready -> ready [label="\n\nusbStart()"];
ready -> ready [label="\nSUSPEND/WAKEUP\n>event_cb<"]; ready -> ready [label="\nSUSPEND/WAKEUP\n>event_cb<"];
ready -> selected [label="\nSET_ADDRESS\n>event_cb<"]; ready -> selected [label="\nSET_ADDRESS\n>event_cb<"];
selected -> stop [label="\nusbStop()"];
selected -> ready [label="\nUSB RESET\n>event_cb<"]; selected -> ready [label="\nUSB RESET\n>event_cb<"];
selected -> selected [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<"]; selected -> selected [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<"];
selected -> configured [label="\nSET_CONF(n)\n>event_cb<"]; selected -> active [label="\nSET_CONF(n)\n>event_cb<"];
configured -> selected [label="\nSET_CONF(0)\n>event_cb<"]; active -> stop [label="\nusbStop()"];
configured -> configured [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<\n\nEndpoints Activity\n >in_cb< >out_cb< >setup_cb<"]; active -> selected [label="\nSET_CONF(0)\n>event_cb<"];
configured -> ready [label="\nUSB RESET\n>event_cb<"]; active -> active [label="\nSUSPEND/WAKEUP\n>event_cb<\n\nValid EP0 Message\n>requests_hook_cb<\n\nGET DESCRIPTOR\n>get_descriptor_cb<\n\nEndpoints Activity\n >in_cb< or >out_cb<"];
active -> ready [label="\nUSB RESET\n>event_cb<"];
} }
* @enddot * @enddot
* @endif * @endif

View File

@ -927,6 +927,10 @@ void usb_lld_stop(USBDriver *usbp) {
/* If in ready state then disables the USB clock.*/ /* If in ready state then disables the USB clock.*/
if (usbp->state != USB_STOP) { if (usbp->state != USB_STOP) {
/* Disabling all endpoints in case the driver has been stopped while
active.*/
otg_disable_ep(usbp);
usbp->txpending = 0; usbp->txpending = 0;
otgp->DAINTMSK = 0; otgp->DAINTMSK = 0;

View File

@ -282,7 +282,8 @@ void usbStop(USBDriver *usbp) {
chDbgCheck(usbp != NULL, "usbStop"); chDbgCheck(usbp != NULL, "usbStop");
chSysLock(); chSysLock();
chDbgAssert((usbp->state == USB_STOP) || (usbp->state == USB_READY), chDbgAssert((usbp->state == USB_STOP) || (usbp->state == USB_READY) ||
(usbp->state == USB_SELECTED) || (usbp->state == USB_ACTIVE),
"usbStop(), #1", "invalid state"); "usbStop(), #1", "invalid state");
usb_lld_stop(usbp); usb_lld_stop(usbp);
usbp->state = USB_STOP; usbp->state = USB_STOP;

View File

@ -19,8 +19,8 @@
*/ */
/** /**
* @file SPC563Axx/bam.s * @file SPC564Axx/bam.s
* @brief SPC563Axx boot assistant record. * @brief SPC564Axx boot assistant record.
* *
* @addtogroup PPC_CORE * @addtogroup PPC_CORE
* @{ * @{

View File

@ -19,7 +19,7 @@
*/ */
/** /**
* @file SPC563Axx/core.s * @file SPC564Axx/core.s
* @brief e200z4 core configuration. * @brief e200z4 core configuration.
* *
* @addtogroup PPC_CORE * @addtogroup PPC_CORE

View File

@ -27,7 +27,7 @@
<link> <link>
<name>board</name> <name>board</name>
<type>2</type> <type>2</type>
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI> <locationURI>CHIBIOS/boards/OLIMEX_STM32_E407</locationURI>
</link> </link>
<link> <link>
<name>os</name> <name>os</name>

View File

@ -472,7 +472,14 @@ int main(void) {
* after a reset. * after a reset.
*/ */
usbDisconnectBus(serusbcfg.usbp); usbDisconnectBus(serusbcfg.usbp);
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1500);
usbStart(serusbcfg.usbp, &usbcfg);
usbConnectBus(serusbcfg.usbp);
chThdSleepMilliseconds(3000);
usbDisconnectBus(serusbcfg.usbp);
usbStop(serusbcfg.usbp);
chThdSleepMilliseconds(1500);
usbStart(serusbcfg.usbp, &usbcfg); usbStart(serusbcfg.usbp, &usbcfg);
usbConnectBus(serusbcfg.usbp); usbConnectBus(serusbcfg.usbp);