git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7458 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2014-11-02 10:22:36 +00:00
parent bfb9a08f46
commit a5454ca785
3 changed files with 15 additions and 13 deletions

View File

@ -175,10 +175,10 @@ static void mac_lld_set_address(const uint8_t *p) {
/* Driver interrupt handlers. */ /* Driver interrupt handlers. */
/*===========================================================================*/ /*===========================================================================*/
CH_IRQ_HANDLER(ETH_IRQHandler) { OSAL_IRQ_HANDLER(ETH_IRQHandler) {
uint32_t dmasr; uint32_t dmasr;
CH_IRQ_PROLOGUE(); OSAL_IRQ_PROLOGUE();
dmasr = ETH->DMASR; dmasr = ETH->DMASR;
ETH->DMASR = dmasr; /* Clear status bits.*/ ETH->DMASR = dmasr; /* Clear status bits.*/
@ -186,9 +186,9 @@ CH_IRQ_HANDLER(ETH_IRQHandler) {
if (dmasr & ETH_DMASR_RS) { if (dmasr & ETH_DMASR_RS) {
/* Data Received.*/ /* Data Received.*/
osalSysLockFromISR(); osalSysLockFromISR();
chSemResetI(&ETHD1.rdsem, 0); osalThreadDequeueAllI(&ETHD1.rdqueue, MSG_RESET);
#if MAC_USE_EVENTS #if MAC_USE_EVENTS
chEvtBroadcastI(&ETHD1.rdevent); osalEventBroadcastFlagsI(&ETHD1.rdevent, 0);
#endif #endif
osalSysUnlockFromISR(); osalSysUnlockFromISR();
} }
@ -196,11 +196,11 @@ CH_IRQ_HANDLER(ETH_IRQHandler) {
if (dmasr & ETH_DMASR_TS) { if (dmasr & ETH_DMASR_TS) {
/* Data Transmitted.*/ /* Data Transmitted.*/
osalSysLockFromISR(); osalSysLockFromISR();
chSemResetI(&ETHD1.tdsem, 0); osalThreadDequeueAllI(&ETHD1.tdqueue, MSG_RESET);
osalSysUnlockFromISR(); osalSysUnlockFromISR();
} }
CH_IRQ_EPILOGUE(); OSAL_IRQ_EPILOGUE();
} }
/*===========================================================================*/ /*===========================================================================*/

View File

@ -245,11 +245,11 @@ struct MACDriver {
/** /**
* @brief Transmit semaphore. * @brief Transmit semaphore.
*/ */
semaphore_t tdsem; threads_queue_t tdqueue;
/** /**
* @brief Receive semaphore. * @brief Receive semaphore.
*/ */
semaphore_t rdsem; threads_queue_t rdqueue;
#if MAC_USE_EVENTS || defined(__DOXYGEN__) #if MAC_USE_EVENTS || defined(__DOXYGEN__)
/** /**
* @brief Receive event. * @brief Receive event.

View File

@ -81,10 +81,10 @@ void macObjectInit(MACDriver *macp) {
macp->state = MAC_STOP; macp->state = MAC_STOP;
macp->config = NULL; macp->config = NULL;
chSemObjectInit(&macp->tdsem, 0); osalThreadQueueObjectInit(&macp->tdqueue);
chSemObjectInit(&macp->rdsem, 0); osalThreadQueueObjectInit(&macp->rdqueue);
#if MAC_USE_EVENTS #if MAC_USE_EVENTS
chEvtObjectInit(&macp->rdevent); osalEventObjectInit(&macp->rdevent);
#endif #endif
} }
@ -160,7 +160,8 @@ msg_t macWaitTransmitDescriptor(MACDriver *macp,
(time > 0)) { (time > 0)) {
osalSysLock(); osalSysLock();
now = osalOsGetSystemTimeX(); now = osalOsGetSystemTimeX();
if ((msg = chSemWaitTimeoutS(&macp->tdsem, time)) == MSG_TIMEOUT) { msg = osalThreadEnqueueTimeoutS(&macp->tdqueue, time);
if (msg == MSG_TIMEOUT) {
osalSysUnlock(); osalSysUnlock();
break; break;
} }
@ -218,7 +219,8 @@ msg_t macWaitReceiveDescriptor(MACDriver *macp,
(time > 0)) { (time > 0)) {
osalSysLock(); osalSysLock();
now = osalOsGetSystemTimeX(); now = osalOsGetSystemTimeX();
if ((msg = chSemWaitTimeoutS(&macp->rdsem, time)) == MSG_TIMEOUT) { msg = osalThreadEnqueueTimeoutS(&macp->rdqueue, time);
if (msg == MSG_TIMEOUT) {
osalSysUnlock(); osalSysUnlock();
break; break;
} }