Перейти к содержанию
    

Проблемы с модулем MAC LPC2368

Беру Keilовский пример делаю инициализацию MAC, когда доходит до MAC_MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX |

MAC1_SIM_RES | MAC1_SOFT_RES;

 

 

то уходит на DAbt_Handler, кто может подсказать почему так происходит и что делать?

 

 

void Init_EMAC(void)

{

// Keil: function modified to access the EMAC

// Initializes the EMAC ethernet controller

unsigned int regv,tout,id1,id2;

 

/* Enable P1 Ethernet Pins. */

PINSEL2 = 0x55555555;

PINSEL3 = (PINSEL3 & ~0x0000000F) | 0x00000005;

 

/* Power Up the EMAC controller. */

PCONP |= 0x40000000;

 

/* Reset all EMAC internal modules. */

MAC_MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX |

MAC1_SIM_RES | MAC1_SOFT_RES;

MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

data abort - следствие обращения к несуществующему адресу.

Пройдите в отладчике непосредственно до иструкции, которая приводит к исключению.

Посмотрите, к какому адресу происходит обращение. Разберитесь, почему он неправильный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Любое обращение к регистрам Ethernet контроллера, чтение или запись вызывает это прерывание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Любое обращение к регистрам Ethernet контроллера, чтение или запись вызывает это прерывание.

 

смотрите тогда как эти регистры определены в .h файле

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да определены они по документации правильно, более того я беру Keilовский пример работы с Ethernet, и происходит такая хня. Неужели никто не пробовал работать с Ethernetом на Keil.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да определены они по документации правильно, более того я беру Keilовский пример работы с Ethernet, и происходит такая хня. Неужели никто не пробовал работать с Ethernetом на Keil.

 

Я подключал PHY по RMII. Били 2 проблемы:

 

Первая вот здесь:

 

PINSEL2 = 0x50151105; /* selects P1[0,1,4,8,9,10,14,15] */

 

Позже вышла эррата версии 1,2 и там для разных ревизий в этот регистр нужно писать разные значения.

Причем если перепутать - процессор вылетал в DataAbort или в Prefeth(давно было, точно не помню, в эррате все написано).

 

Вторая более уникальная.

При выполнении программы из флэшь наблюдался улет в функции инициализации MAC:

EMAC_TxDisable();

EMAC_RxDisable();``//* вот после этого вылетал в неопределенное состояние

Причем при выполнении кода из RAM все было нормально.

Решилась проблема не совсем удачно. Просто закоментировал и все заработало. Потом стоит функция разрешения работы и подпрограмма используется всего один раз при инициализации микроконтроллера, поэтому данная строка не влияет на дальнейшую работу.

 

Контроллер LPC2468, rev A, код пробовал компилировать в обоих режимах. Компилятор IAR.

Может это вам чем-нибудь поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...