|
|
  |
LPS 2478 errors, Проблема с контроллером внешнейй памяти EMC |
|
|
|
Aug 25 2009, 07:16
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(argentum @ Aug 25 2009, 08:01)  Скажите, кто-нибудь работал с EMC на этом контроллере? Нет, Вы первый человек в мире, который решился на этот поступок. Хотя,.... если поищите по этому форуму найдете и многочисленных предшественников, и примеры инициализации, например http://electronix.ru/forum/index.php?showt...&pid=391050Цитата Приглашаю к обсуждению, так сказать. Обсуждать собственно нечего - берете свежий User Manual с сайта и внимательно инициализируете контроллер. P.S. Не худо было-бы для начала правильно называать микроконтроллер - он LPC, а не LPS
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 25 2009, 08:58
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283

|
2 Andy Буду очень благодарен, если поможете Вот код инициализации: CODE void EMC_init (void) {
EMC_CTRL |= 1; PCONP |= (1 << 11);
// Инициализация ног PINSEL6 = 0x55555555; PINSEL7 = 0x55555555; PINSEL8 = 0x55555555; PINSEL9 = 0x55555555; //Ноги инициализированы
EMC_CONFIG = 0; // Litle indian
EMC_STA_CFG0 |=1; // 16ти разрядная память
EMC_STA_CFG0 |= (1<<6); // Выбор девайса низким уровнем EMC_STA_CFG0 |= (1 << 7); // Управление сигналами BLS0 и BLS1 для 16ти разрядной памяти EMC_STA_CFG0 |= (1 << 8); // Разрешение задержек EMC_STA_CFG0 &= ~(1 << 20); // Сбросить защиту от записи // Выставить макс. задержки EMC_STA_WAITWEN0 = (0x0F && 0x0f); EMC_STA_WAITOEN0 = (0x0F && 0x0f); EMC_STA_WAITRD0 = (0x0F && 0x0f); EMC_STA_WAITPAGE0 = (0x1F && 0x1f); EMC_STA_WAITWR0 = (0x1F && 0x1f); EMC_STA_WAITTURN0 = (0x0F && 0x0f); EMC_STA_EXT_WAIT = (0x1FF && 0x01ff); }
А вот нехитрые опыты с записью и чтением: CODE while { ex_mem = (DWORD *) 0x80000000; *(ex_mem) = 0xAA; can_msg_out[0].data[0] = (char)(*ex_mem) ; CAN1_SendStdMessage( &can_msg_out[0] ); } Результаты считывания выдаются в проверенный CAN. Считывается из этого адреса всегда 0xFF. Байт статуса EMC_STAT всегда 0x05; Сигналы: 0E - импульсы с частотой 125кГц и скважностью примерно 10% WE - 3,3В постоянно BLS0 и BLS1 - 3,3В постоянно СE - постоянно 0В Косяков получается что-то очень много: WE должен менять уровент в зависимости от того, запись производится или чтение BLS0 и BLS1 должны быть внизу хоть иногда. На всякий случай прикладываю док на SRAM/
|
|
|
|
|
Aug 25 2009, 10:07
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283

|
Цитата(zltigo @ Aug 25 2009, 13:15)  ...надо начинать с букварей по 'C'  Если Вы имеете в виду выражения типа "...= (0x0F && 0x0f);", то слева стоит маска, а справа присваиваемое значение. Коряво, конечно, но я на скорую руку сделал так. Буквари по "С" читаю и свои недостатки в этом деле знаю. По сущству можете что-нибудь ответить?
|
|
|
|
|
Aug 25 2009, 10:28
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283

|
Спасибо) Изенил на CODE EMC_STA_WAITWEN0 = 0x0f; EMC_STA_WAITOEN0 = 0x0f; EMC_STA_WAITRD0 = 0x0f; EMC_STA_WAITPAGE0 = 0x1f; EMC_STA_WAITWR0 = 0x1f; EMC_STA_WAITTURN0 = 0x0f; EMC_STA_EXT_WAIT = 0x01ff;
Ошибка исправлена, но улучшений не настало
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|