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:
parent
6d4cee3b28
commit
4434fed8d8
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
* @{
|
* @{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue