mirror of https://github.com/ARMmbed/mbed-os.git
Update code according to the reviews
* move emac driver to COMPONENT folder * use mbed rtos C++ API instead of CMSIS APIpull/8668/head
parent
eea7245d41
commit
78b186ec56
|
|
@ -43,21 +43,9 @@
|
||||||
#define PHY_TASK_PERIOD_MS 200
|
#define PHY_TASK_PERIOD_MS 200
|
||||||
|
|
||||||
|
|
||||||
fvp_EMAC::fvp_EMAC()
|
fvp_EMAC::fvp_EMAC() : _thread(THREAD_PRIORITY,THREAD_STACKSIZE,NULL,"fvp_emac_thread")
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Create a new thread for TX/RX. */
|
|
||||||
static osThreadId_t create_new_thread(const char *threadName, void (*thread)(void *arg), void *arg, int stacksize, osPriority_t priority, mbed_rtos_storage_thread_t *_thread_cb)
|
|
||||||
{
|
{
|
||||||
osThreadAttr_t attr = {0};
|
|
||||||
attr.name = threadName;
|
|
||||||
attr.stack_mem = malloc(stacksize);
|
|
||||||
attr.cb_mem = _thread_cb;
|
|
||||||
attr.stack_size = stacksize;
|
|
||||||
attr.cb_size = sizeof(mbed_rtos_storage_thread_t);
|
|
||||||
attr.priority = priority;
|
|
||||||
return osThreadNew(thread, arg, &attr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fvp_EMAC::ethernet_callback(lan91_event_t event, void *param)
|
void fvp_EMAC::ethernet_callback(lan91_event_t event, void *param)
|
||||||
|
|
@ -79,15 +67,13 @@ void fvp_EMAC::ethernet_callback(lan91_event_t event, void *param)
|
||||||
/** \brief Ethernet receive interrupt handler */
|
/** \brief Ethernet receive interrupt handler */
|
||||||
void fvp_EMAC::rx_isr()
|
void fvp_EMAC::rx_isr()
|
||||||
{
|
{
|
||||||
if (_thread) {
|
_thread.flags_set(FLAG_RX);
|
||||||
osThreadFlagsSet(_thread, FLAG_RX);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \brief Ethernet transmit interrupt handler */
|
/** \brief Ethernet transmit interrupt handler */
|
||||||
void fvp_EMAC::tx_isr()
|
void fvp_EMAC::tx_isr()
|
||||||
{
|
{
|
||||||
osThreadFlagsSet(_thread, FLAG_TX);
|
_thread.flags_set(FLAG_TX);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \brief Low level init of the MAC and PHY. */
|
/** \brief Low level init of the MAC and PHY. */
|
||||||
|
|
@ -109,7 +95,7 @@ void fvp_EMAC::thread_function(void* pvParameters)
|
||||||
struct fvp_EMAC *fvp_enet = static_cast<fvp_EMAC *>(pvParameters);
|
struct fvp_EMAC *fvp_enet = static_cast<fvp_EMAC *>(pvParameters);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
uint32_t flags = osThreadFlagsWait(FLAG_RX|FLAG_TX, osFlagsWaitAny, osWaitForever);
|
uint32_t flags = ThisThread::flags_wait_any(FLAG_RX|FLAG_TX);
|
||||||
if (flags & FLAG_RX) {
|
if (flags & FLAG_RX) {
|
||||||
fvp_enet->packet_rx();
|
fvp_enet->packet_rx();
|
||||||
}
|
}
|
||||||
|
|
@ -234,8 +220,8 @@ bool fvp_EMAC::power_up()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ethernet Worker thread */
|
/* Start ethernet Worker thread */
|
||||||
_thread = create_new_thread("FVP_EMAC_thread", &fvp_EMAC::thread_function, this, THREAD_STACKSIZE, THREAD_PRIORITY, &_thread_cb);
|
_thread.start(callback(&fvp_EMAC::thread_function, this));
|
||||||
|
|
||||||
/* Trigger thread to deal with any RX packets that arrived before thread was started */
|
/* Trigger thread to deal with any RX packets that arrived before thread was started */
|
||||||
rx_isr();
|
rx_isr();
|
||||||
|
|
@ -246,7 +232,7 @@ bool fvp_EMAC::power_up()
|
||||||
mbed::mbed_event_queue()->call(mbed::callback(this, &fvp_EMAC::phy_task));
|
mbed::mbed_event_queue()->call(mbed::callback(this, &fvp_EMAC::phy_task));
|
||||||
|
|
||||||
/* Allow the PHY task to detect the initial link state and set up the proper flags */
|
/* Allow the PHY task to detect the initial link state and set up the proper flags */
|
||||||
osDelay(10);
|
wait_ms(10);
|
||||||
|
|
||||||
_phy_task_handle = mbed::mbed_event_queue()->call_every(PHY_TASK_PERIOD_MS, mbed::callback(this, &fvp_EMAC::phy_task));
|
_phy_task_handle = mbed::mbed_event_queue()->call_every(PHY_TASK_PERIOD_MS, mbed::callback(this, &fvp_EMAC::phy_task));
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
#define FVP_EMAC_H_
|
#define FVP_EMAC_H_
|
||||||
|
|
||||||
#include "EMAC.h"
|
#include "EMAC.h"
|
||||||
#include "rtos/Semaphore.h"
|
#include "mbed.h"
|
||||||
#include "rtos/Mutex.h"
|
#include "rtos/Mutex.h"
|
||||||
#include "lan91c111.h"
|
#include "lan91c111.h"
|
||||||
|
|
||||||
|
|
@ -163,8 +163,7 @@ private:
|
||||||
void phy_task();
|
void phy_task();
|
||||||
static void ethernet_callback(lan91_event_t event, void *param);
|
static void ethernet_callback(lan91_event_t event, void *param);
|
||||||
|
|
||||||
mbed_rtos_storage_thread_t _thread_cb;
|
Thread _thread; /* Processing thread */
|
||||||
osThreadId_t _thread; /* Processing thread */
|
|
||||||
rtos::Mutex _TXLockMutex; /* TX critical section mutex */
|
rtos::Mutex _TXLockMutex; /* TX critical section mutex */
|
||||||
|
|
||||||
emac_link_input_cb_t _emac_link_input_cb; /* Callback for incoming data */
|
emac_link_input_cb_t _emac_link_input_cb; /* Callback for incoming data */
|
||||||
|
|
@ -7134,7 +7134,7 @@
|
||||||
"USTICKER"
|
"USTICKER"
|
||||||
],
|
],
|
||||||
"release_versions": ["5"],
|
"release_versions": ["5"],
|
||||||
"extra_labels": ["ARM_FM_EMAC"],
|
"components": ["LAN91C111"],
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"network-default-interface-type": "ETHERNET"
|
"network-default-interface-type": "ETHERNET"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue