kopia lustrzana https://github.com/espressif/esp-idf
update emac_reg_v2.h
rodzic
edcaa5f300
commit
5fc130f2c0
|
@ -36,20 +36,20 @@ static const char *TAG = "emac";
|
||||||
|
|
||||||
void emac_enable_flowctrl(void)
|
void emac_enable_flowctrl(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_TRANSMIT_FLOW_CONTROL_ENABLE);
|
REG_SET_BIT(EMAC_GMACFC_REG, EMAC_TFCE);
|
||||||
REG_SET_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_RECEIVE_FLOW_CONTROL_ENABLE);
|
REG_SET_BIT(EMAC_GMACFC_REG, EMAC_RFCE);
|
||||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_DISABLE_ZERO_QUANTA_PAUSE);
|
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_DZPQ);
|
||||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_TIME, 0x1648);
|
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PAUSE_TIME, 0x1648);
|
||||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_LOW_THRESHOLD, 0x1);
|
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PLT, 0x1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_disable_flowctrl(void)
|
void emac_disable_flowctrl(void)
|
||||||
{
|
{
|
||||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_TRANSMIT_FLOW_CONTROL_ENABLE);
|
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_TFCE);
|
||||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_RECEIVE_FLOW_CONTROL_ENABLE);
|
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_RFCE);
|
||||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_DISABLE_ZERO_QUANTA_PAUSE);
|
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_DZPQ);
|
||||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_TIME, 0);
|
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PAUSE_TIME, 0);
|
||||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_LOW_THRESHOLD, 0);
|
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PLT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_enable_dma_tx(void)
|
void emac_enable_dma_tx(void)
|
||||||
|
@ -59,25 +59,17 @@ void emac_enable_dma_tx(void)
|
||||||
|
|
||||||
void emac_enable_dma_rx(void)
|
void emac_enable_dma_rx(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RECEIVE);
|
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_disable_dma_tx(void)
|
void emac_disable_dma_tx(void)
|
||||||
{
|
{
|
||||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPERATE_SECOND_FRAME);
|
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_TRANSMISSION_COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_disable_dma_rx(void)
|
void emac_disable_dma_rx(void)
|
||||||
{
|
{
|
||||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RECEIVE);
|
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RX);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t emac_read_mac_version(void)
|
|
||||||
{
|
|
||||||
uint32_t data = 0;
|
|
||||||
data = REG_READ(EMAC_GMACVERSION_REG);
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_reset(void)
|
void emac_reset(void)
|
||||||
|
@ -103,22 +95,22 @@ void emac_enable_clk(bool enable)
|
||||||
|
|
||||||
void emac_dma_init(void)
|
void emac_dma_init(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_FORWARD_UNDERSIZED_GOOD_FRAMES);
|
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_FWD_UNDER_GF);
|
||||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPERATE_SECOND_FRAME);
|
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPT_SECOND_FRAME);
|
||||||
REG_SET_FIELD(EMAC_DMABUSMODE_REG, EMAC_PROG_BURST_LEN, 4);
|
REG_SET_FIELD(EMAC_DMABUSMODE_REG, EMAC_PROG_BURST_LEN, 4);
|
||||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_DMAOPERATION_MODE_REG);
|
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_DMAOPERATION_MODE_REG);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_mac_enable_txrx(void)
|
void emac_mac_enable_txrx(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACRX);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACRX);
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACTX);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACTX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emac_mac_init(void)
|
void emac_mac_init(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACMIIGMII);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACMII);
|
||||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||||
REG_SET_BIT(EMAC_GMACFRAMEFILTER_REG, EMAC_PROMISCUOUS_MODE);
|
REG_SET_BIT(EMAC_GMACFF_REG, EMAC_PMODE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EMAC_INTR_ENABLE_BIT (EMAC_TRANSMIT_INTERRUPT_ENABLE | EMAC_RECEIVE_INTERRUPT_ENABLE | EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE | EMAC_NORMAL_INTERRUPT_SUMMARY_ENABLE)
|
#define EMAC_INTR_ENABLE_BIT (EMAC_DMAIN_TIE | EMAC_DMAIN_RIE | EMAC_DMAIN_RBUE | EMAC_DMAIN_NISE)
|
||||||
|
|
||||||
struct dma_desc {
|
struct dma_desc {
|
||||||
uint32_t desc0;
|
uint32_t desc0;
|
||||||
|
@ -78,22 +78,22 @@ void inline emac_poll_rx_cmd(void)
|
||||||
|
|
||||||
void inline emac_disable_rx_intr(void)
|
void inline emac_disable_rx_intr(void)
|
||||||
{
|
{
|
||||||
REG_CLR_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_INTERRUPT_ENABLE);
|
REG_CLR_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inline emac_enable_rx_intr(void)
|
void inline emac_enable_rx_intr(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_INTERRUPT_ENABLE);
|
REG_SET_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inline emac_disable_rx_unavail_intr(void)
|
void inline emac_disable_rx_unavail_intr(void)
|
||||||
{
|
{
|
||||||
REG_CLR_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE);
|
REG_CLR_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RBUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inline emac_enable_rx_unavail_intr(void)
|
void inline emac_enable_rx_unavail_intr(void)
|
||||||
{
|
{
|
||||||
REG_SET_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE);
|
REG_SET_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RBUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR inline emac_send_pause_frame_enable(void)
|
void IRAM_ATTR inline emac_send_pause_frame_enable(void)
|
||||||
|
|
|
@ -214,13 +214,13 @@ void esp_eth_smi_write(uint32_t reg_num, uint16_t value)
|
||||||
{
|
{
|
||||||
uint32_t phy_num = emac_config.phy_addr;
|
uint32_t phy_num = emac_config.phy_addr;
|
||||||
|
|
||||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
REG_WRITE(EMAC_GMACGMIIDATA_REG, value);
|
REG_WRITE(EMAC_MIIDATA_REG, value);
|
||||||
REG_WRITE(EMAC_GMACGMIIADDR_REG, 0x3 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | ((0x3) << 2));
|
REG_WRITE(EMAC_GMIIADDR_REG, 0x3 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | ((0x3) << 2));
|
||||||
|
|
||||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,13 +229,13 @@ uint16_t esp_eth_smi_read(uint32_t reg_num)
|
||||||
uint32_t phy_num = emac_config.phy_addr;
|
uint32_t phy_num = emac_config.phy_addr;
|
||||||
uint16_t value = 0;
|
uint16_t value = 0;
|
||||||
|
|
||||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
REG_WRITE(EMAC_GMACGMIIADDR_REG, 0x1 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | (0x3 << 2));
|
REG_WRITE(EMAC_GMIIADDR_REG, 0x1 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | (0x3 << 2));
|
||||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||||
}
|
}
|
||||||
value = (REG_READ(EMAC_GMACGMIIDATA_REG) & 0xffff);
|
value = (REG_READ(EMAC_MIIDATA_REG) & 0xffff);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -285,12 +285,12 @@ static void emac_set_user_config_data(eth_config_t *config )
|
||||||
|
|
||||||
static void emac_enable_intr()
|
static void emac_enable_intr()
|
||||||
{
|
{
|
||||||
REG_WRITE(EMAC_DMAINTERRUPT_EN_REG, EMAC_INTR_ENABLE_BIT);
|
REG_WRITE(EMAC_DMAIN_EN_REG, EMAC_INTR_ENABLE_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void emac_disable_intr()
|
static void emac_disable_intr()
|
||||||
{
|
{
|
||||||
REG_WRITE(EMAC_DMAINTERRUPT_EN_REG, 0);
|
REG_WRITE(EMAC_DMAIN_EN_REG, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static esp_err_t emac_verify_args(void)
|
static esp_err_t emac_verify_args(void)
|
||||||
|
@ -590,22 +590,22 @@ static void IRAM_ATTR emac_process_intr(void *arg)
|
||||||
|
|
||||||
static void emac_set_macaddr_reg(void)
|
static void emac_set_macaddr_reg(void)
|
||||||
{
|
{
|
||||||
REG_SET_FIELD(EMAC_GMACADDR0HIGH_REG, EMAC_MAC_ADDRESS0_HI, (emac_config.macaddr[0] << 8) | (emac_config.macaddr[1]));
|
REG_SET_FIELD(EMAC_ADDR0HIGH_REG, EMAC_ADDRESS0_HI, (emac_config.macaddr[0] << 8) | (emac_config.macaddr[1]));
|
||||||
REG_WRITE(EMAC_GMACADDR0LOW_REG, (emac_config.macaddr[2] << 24) | (emac_config.macaddr[3] << 16) | (emac_config.macaddr[4] << 8) | (emac_config.macaddr[5]));
|
REG_WRITE(EMAC_ADDR0LOW_REG, (emac_config.macaddr[2] << 24) | (emac_config.macaddr[3] << 16) | (emac_config.macaddr[4] << 8) | (emac_config.macaddr[5]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void emac_check_phy_init(void)
|
static void emac_check_phy_init(void)
|
||||||
{
|
{
|
||||||
emac_config.emac_phy_check_init();
|
emac_config.emac_phy_check_init();
|
||||||
if (emac_config.emac_phy_get_duplex_mode() == ETH_MODE_FULLDUPLEX) {
|
if (emac_config.emac_phy_get_duplex_mode() == ETH_MODE_FULLDUPLEX) {
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||||
} else {
|
} else {
|
||||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||||
}
|
}
|
||||||
if (emac_config.emac_phy_get_speed_mode() == ETH_SPEED_MODE_100M) {
|
if (emac_config.emac_phy_get_speed_mode() == ETH_SPEED_MODE_100M) {
|
||||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||||
} else {
|
} else {
|
||||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||||
}
|
}
|
||||||
#if CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE
|
#if CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE
|
||||||
emac_disable_flowctrl();
|
emac_disable_flowctrl();
|
||||||
|
@ -1091,7 +1091,6 @@ esp_err_t esp_eth_init_internal(eth_config_t *config)
|
||||||
|
|
||||||
emac_config.emac_gpio_config();
|
emac_config.emac_gpio_config();
|
||||||
|
|
||||||
ESP_LOGI(TAG, "mac version %04xa", emac_read_mac_version());
|
|
||||||
emac_hw_init();
|
emac_hw_init();
|
||||||
emac_macaddr_init();
|
emac_macaddr_init();
|
||||||
|
|
||||||
|
|
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue