Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25

Ethernet MAC контроллера Atmel

04.04.2016, 09:27. Показов 1645. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Использую ATSAM3x8e совместно с трансивером DP83848i. Автосогласование проходит на ура. Потом начинается прием пакета в настроенные буфферы.Прерывание срабатывает по биту Buffer Not Available.Якобы буфер уже использовался,и туда ничего нельзя запихнуть.Хотя при посмотре буфферов в онлайн режиме они заполняются. Пробывал и очищать буфферы и расширять!Все равно прилетает этот бит.Что за чудо?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2016, 09:27
Ответы с готовыми решениями:

Atmel Studio 6. Как добавить поддержку нового контроллера Atmega8515?
Доброго времени суток. Подскажите. Atmel Studio 6. Как добавить поддержку нового контроллера Atmega8515? В списке его нет, при...

Старт изучения контроллера ethernet (W5100)
Требуется ответ от специалистов, имевших дело с контроллером Wyznet W5100. Для реализации задуманного проекта требуется наличие...

плата контроллера PIC32 с TFT, USB, ethernet и проч.
Продолжая тему форума <a ctoss="postlink-local"...

12
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
04.04.2016, 10:17
какая SDK, какой код инициализаци, прерывание чего (Atmel или DP83...?). Примеры работают?
0
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
04.04.2016, 10:52  [ТС]
Visua Studio 2005,не мой выбор пред товарищ ваял на нем)Код инит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
bool ModbusTCP::InitEMAC()
{   
    using namespace HW;
 
    u32 regv,tout,id1,id2;
    u32 id3;
    u32 value;
    u32 phy_anar;
    u32 phy_analpar;
    u32 retry_count;
    u32 value1;
    u32 stat1;
    u32 stat2;
        u32 i;
    using namespace HW;
 
    HW::EMAC->NCR     = 0;
    HW::EMAC->IDR     = ~0;
 
 
    RxBufIndex = 0;
 
    for (i = 0; i < NUM_RX_BUF; i++)//NUM_RX_BUF расширял до 128,сейчас 16
    {       
        //Rx_Desc[i].addr =(((u32)&rx_buf[i]) ) & 0xFFFFFFFC ;
        Rx_Desc[i].addr = ((u32)(&(rx1[i *128]))) & 0xFFFFFFFC;
        Rx_Desc[i].stat = 0;
    }
    //rx_buf[0][0] = 17;
    /* Set the WRAP bit at the end of the list descriptor. */
    Rx_Desc[NUM_RX_BUF-1].addr |= 0x02;
    /* Set Rx Queue pointer to descriptor list. */
 
    HW::EMAC->RBQP = ((u32)&Rx_Desc[0]); 
 
    
    tx_descr_init ();   
 
    HW::EMAC->SA[0].B =( ((unsigned int)MacAddress[3] << 24)
                         | ((unsigned int)MacAddress[2] << 16)
                         | ((unsigned int)MacAddress[1] << 8 )
                         |                MacAddress[0]      );
    HW::EMAC->SA[0].T =( ((unsigned int)MacAddress[5] << 8 )
                         |                MacAddress[4]      );
 
 
 
    HW::EMAC->NCR    |= EMAC_CLRSTAT;
    HW::EMAC->RSR    |= EMAC_OVR | EMAC_REC | EMAC_BNA;
    HW::EMAC->TSR    |= EMAC_UBR | EMAC_COL  | EMAC_RLES
                       |EMAC_BEX | EMAC_COMP | EMAC_UND;
    HW::EMAC->ISR;
    HW::EMAC->NCFGR  |= EMAC_DRFCS | EMAC_PAE | EMAC_CAF;
    HW::EMAC->NCR |= EMAC_TE;
    HW::EMAC->NCR |= EMAC_RE;
    HW::EMAC->NCR |= EMAC_WESTAT;
 
    HW::EMAC->IER     = EMAC_RXUBR | /* Enable receive used bit read interrupt. */
                        EMAC_TUND  | /* Enable transmit underrun interrupt. */
                        EMAC_RLE   | /* Enable retry limit  exceeded interrupt. */
                        EMAC_TXERR | /* Enable transmit buffers exhausted in mid-frame interrupt. */
                        EMAC_TCOMP | /* Enable transmit complete interrupt. */
                        EMAC_RCOMP;// |
                        EMAC_ROVR  | /* Enable receive overrun interrupt. */
                        EMAC_HRESP | /* Enable Hresp not OK interrupt. */
                        EMAC_PFR   | /* Enable pause frame received interrupt. */
                        EMAC_PTZ;   /* Enable pause time zero interrupt. */
 
 
 
    int_enable_eth();//enable interrupt
    //HW::EMAC->NCR  |= EMAC_LB | EMAC_LLB;
        
    HW::EMAC->ISR;
    
 
    /* Enable receiving of all Multicast packets. */
    //HW::EMAC->HRB  = 0xFFFFFFFF;
    //HW::EMAC->HRT  = 0xFFFFFFFF;
 
    //start new settings for dp838.....
    
    //emac_set_clock(pemac,mck);
    //HW::EMAC->NCFGR |=EMAC_CLK_HCLK_16;
    
    /*инициализацию и автосогласование выполняется*/
    EnableMDI();
 
    id1 = ReadPHY(PHY_REG_IDR1);
    id2 = ReadPHY(PHY_REG_IDR2);
    
    if (((id1 << 16) | (id2 & 0xfff0)) == DP83848C_ID)
    {
    };
    
    WritePHY(PHY_REG_BMCR, BMCR_RESET);
    
        /* Wait for hardware reset to end. */
    for (tout = 0; tout < 0x800000; tout++)
    {
        if(tout < 20000)
        {
            ;
        }
        else
        {
        
            if (!(ReadPHY(PHY_REG_BMCR) & BMCR_RESET))
            {
                break; /* Reset complete */
            }
        }
    };
 
    DisableMDI();
 
    EnableMDI();
 
    value = ReadPHY(PHY_REG_BMCR);
    
    value &= ~BMCR_ANENABLE;
    value &= ~(BMCR_LOOPBACK | BMCR_PDOWN);
    value |= BMCR_ISOLATE;
    WritePHY(PHY_REG_BMCR,value);
    value = ReadPHY(PHY_REG_BMCR);
 
    phy_anar = ANAR_CSMA | ANAR_10HALF | ANAR_10FULL | ANAR_100HALF | ANAR_100FULL;
    WritePHY(PHY_REG_ANAR,phy_anar);
 
    value |=BMCR_SPEED100 | BMCR_FULLDPLX | BMCR_ANENABLE;
    WritePHY(PHY_REG_BMCR,value);
 
    value |=BMCR_ANRESTART;
    value &=~BMCR_ISOLATE;
    WritePHY(PHY_REG_BMCR, value);
 
    while(1)
    {
    value1 = ReadPHY(PHY_REG_BMSR);
    if(value1 & BMSR_ANEGCOMPLETE)
    {
        //value &=~BMCR_ANENABLE;
        //WritePHY(PHY_REG_BMCR,value);
        break;
    }
    }
    phy_analpar = ReadPHY(PHY_REG_ANLPAR);
 
    if((phy_anar & phy_analpar) & ANLPAR_100FULL)
    {
        HW::EMAC->NCFGR |= EMAC_SPD;
        HW::EMAC->NCFGR |= EMAC_FD;
    }
    if((phy_anar & phy_analpar) & ANLPAR_10FULL)
        HW::EMAC->NCFGR |= EMAC_FD; 
    if((phy_anar & phy_analpar) & ANLPAR_100HALF)
        HW::EMAC->NCFGR |= EMAC_SPD;
    if((phy_anar & phy_analpar) & ANLPAR_10HALF)
        ;
    HW::EMAC->USRIO |= EMAC_CLKEN | EMAC_RMII;
 
    id3 = ReadPHY(PHY_REG_BMSR);
    DisableMDI();
 
    
}
Аналогично скатал с примера в атмеле.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
04.04.2016, 12:19
а как объявлены Rx_Desc и rx1 в программе? есть подозрение - они тоже должны быть объявлены статически выравнены по 32бита.
0
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
04.04.2016, 15:37  [ТС]
C++
1
2
volatile u8 rx1[16*128]
static Buf_Desc Rx_Desc[NUM_RX_BUF]
При этом:
C++
1
2
3
4
5
6
#defiene NUM_RX_BUF  16
 
typedef struct{
    u32 addr;
    u32 stat;
}Buf_Desc
Добавлено через 2 часа 4 минуты
пробывал
C++
1
volatile u8 rx1[16*128]
поменять на
C++
1
static u8 rx1[16*128]
ничего не поменялось(
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
04.04.2016, 16:39
обеспечьте
Цитата Сообщение от Voland_ Посмотреть сообщение
должны быть объявлены статически выравнены по 32бита
это делается либо директивой компилятора ( нужно читать как это возможно, везде по-разному ), либо нужно учесть выравнивание внутри архива и вычислить начало нового 32битного слова внутри этого массива. Смещение будет от 0 до 3 байт.
1
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
04.04.2016, 16:53  [ТС]
спасибо за подсказку буду пробывать).Вроде
C++
1
Rx_Desc[i].addr = ((u32)(&(rx1[i *128]))) & 0xFFFFFFFC;
это и есть выравнивание.Или помимо этого.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
04.04.2016, 19:47
Цитата Сообщение от mus_zzz Посмотреть сообщение
HW::EMAC->RBQP = ((u32)&Rx_Desc[0]);
<== вот здесь не выравнивается.
во-вторых, если не выровнен rx1, то по приходу данных может затереться что-то совсем другое.

ЗЫ: такие ошибки надо сразу исключать. Потому что в зависимости от конфигурации глобальных переменных у вас может сложиться ситуация, когда эти переменные таки выравняются сами собой (просто совпадет), и все будет прекрасно работать. Но при самом (казалось бы) незначительном изменении конфигурации все может резко поломаться снова.
0
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
05.04.2016, 09:37  [ТС]
По поводу
C++
1
HW::EMAC->RBQP = ((u32)&Rx_Desc[0]);
проверил,адреса дескрипторов выровнены,проверял Кейлом. Остался открытый вопрос с прерыванием по биту BNA. Делаю следующим образом запускаю железо и подсоединяю ethernet кабель к ноуту. Срабатывает прерывание по этому биту. Данные в буффере присутствуют. Не пойму почему не прилетает бит REC(то что запись произведена).Про условия возникновения бита BNA в даташите очень мало и не понятны пути избавления от них.Или я что-то упустил?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
05.04.2016, 11:33
Цитата Сообщение от mus_zzz Посмотреть сообщение
Не пойму почему не прилетает бит REC
возможно не включен, возможно вы не там его ищете. Иногда сложная периферия (такая как Ethernet, по сути это ж отдельный контроллер) имеет несколько векторов прерываний, которые управляются по отдельности.
0
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
05.04.2016, 11:45  [ТС]
Прерывания настроены..Уже не знаю что делать...Все равно спасибо за помощь)а не подскажите где можно приобрести отладочные платы на базе Atmel желательно с Ethernet. Заранее благодарен.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
05.04.2016, 12:06
Цитата Сообщение от mus_zzz Посмотреть сообщение
на базе Atmel желательно с Ethernet.
например у Atmel? ))

ЗЫ: все ж зависит откуда вы, и что вы можете себе позволить...

Но если предположить "локацию по умолчанию", то вот, например. [Не реклама, если что. Просто на заре еще TI Stellaris я брал у этих товарищей. У них же купил другую плату по-мощнее].
0
1 / 1 / 0
Регистрация: 29.11.2015
Сообщений: 25
05.04.2016, 12:30  [ТС]
спасибо)буду думать))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2016, 12:30
Помогаю со студенческими работами здесь

Драйвер для Ethernet контроллера на MacBook
Здравствуйте!.. Помогите разобраться, пожалуйста... Не могу найти драйвер для Ethernet-контроллера на MacBook под Windows 7. Диспетчер...

драйвер Ethernet-контроллера для ноутбука ASUS A52JT
Подскажите где найти драйвер Ethernet-контроллера для ноутбука ASUS A52JT

Слетает драйвер Ethernet контроллера и проблемы с установкой Windows 7
1. Чуть больше недели назад слетел драйвер сетевого контроллера, винда не может выполнить его обновление или установку самостоятельно,...

Открыть Ethernet port для дальнейшей передачи данных с контроллера на ПК
Здравствуйте! Подскажите пожалуйста как открыть Ethernet port для дальнейшей передачи данных с контроллера на ПК? Это делать как через...

Получить MAC адрес Ethernet адаптера
Мне надо получить мас адрес встроенный еthernet адаптера. Я постарался сделать это через этот код: try { String mmm =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru