реклама на сайте
подробности

 
 
> Ошибка в тестовом проекте Keil.
Oleg_IT
сообщение Aug 24 2010, 08:27
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Помогите разрбраться.
Делаю простой тестовый проект для LPC2478

Код
#include <stdio.h>
#include <LPC24xx.H>

int main (void)  {

  while (1) {
   ;  /* ... */  
  }  
}


При запуске дебагера выдает ошибку в файле LPC2400.s
*** error 65: access violation at 0xA0033000 : no 'read' permission
при исполнении кода в помеченной (//!!!!) строке

Код
EMC_DYN_RASCAS3_Val EQU 0x00000303
……………………………..
; Dummy read  (set SDRAM Mode register)
IF      (EMC_DYNCS0_SETUP != 0)
LDR     R4, =DYN_MEM0_BASE
LDR     R5, =(EMC_DYN_RASCAS0_Val:AND:0x00000300); get CAS Latency
LSR     R5, #4                                    ; set CAS Latency    (Bit4..6)
IF      ((EMC_DYN_CFG0_Val:AND:0x00004000) != 0)
ORR     R5, R5, #0x02                              ; set burst length 4 (Bit0..2)
LSL     R5, #11
ELSE
ORR     R5, R5, #0x03                              ; set burst length 8 (Bit0..2)
LSL     R5, #12
ENDIF
ADD     R4, R4, R5                 //!!!!
LDR     R4, [R4, #0]
ENDIF
IF      (EMC_DYNCS1_SETUP != 0)


С другими МК, например LPC2129, дебагер работает нормально. Правда и Startup у них разный.

Вторая проблема с DMA
Есть код (пример написанный не мной)

Код
#define DMA_SRC            0x7FD00000    
#define DMA_DST            0x7FD01000    
…………………………………..
volatile BYTE *TXBuffer = (BYTE *)(DMA_SRC);
volatile BYTE *SRXBuffer = (BYTE *)(DMA_DST);
………………………………………….
  for ( i = 0; i < BUFSIZE; i++ )    /* clear buffer */
  {
    TXBuffer[i] = i;
    RXBuffer[i] = 0;
  }


При присвоении элементам буферов значений возникают ошибки
*** error 65: access violation at 0x7FD00000 : no 'write' permission
*** error 65: access violation at 0x7FD01000 : no 'write' permission
*** error 65: access violation at 0x7FD00001 : no 'write' permission
*** error 65: access violation at 0x7FD01001 : no 'write' permission
………………………….


Дебагер с DMA работать не может?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 18)
kurtis
сообщение Aug 24 2010, 08:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Может поможет http://www.keil.com/support/docs/814.htm
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 24 2010, 10:48
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 24 2010, 18:18
Сообщение #4


Гуру
******

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



QUOTE (Oleg_IT @ Aug 24 2010, 12:48) *
К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически.

Никто за Вас не будет инициализировать до работы с дополнительными банками памяти ни контроллеры USB, ни контроллер динамической памяти. Пока они не инициализированы, там нет памяти и будете "лететь".



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 25 2010, 05:26
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Согласен, что я что-то не доделал, но что?
По первому вопросу ошибка возникает в Startup, я добавил в сгенерённый Keil-ом проект файл *.c с пустой функцией main(), ни к каким банкам памяти ни контроллерам USB обращения нет.

По второму вопросу (проблема с DMA) инициализация DMA идёт при старте программы, вне main() и подпрограмм
Код
#define DMA_SRC            0x7FD00000    
#define DMA_DST            0x7FD01000    
…………………………………..
volatile BYTE *TXBuffer = (BYTE *)(DMA_SRC);
volatile BYTE *SRXBuffer = (BYTE *)(DMA_DST);

Это не правильно? Этот код из примера, а т.к. по ARM-ам я только учусь поэтому пришедший код с Keil и с макеткой считаю правильным. Наверное не прав. Но не думаю, что эти программы не проверены.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 27 2010, 06:02
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Проверил.
Все пустые (с пустой main функцией) проекты LPC24x у меня не работают, все установки по умолчанию. Те же проекты LPC23x работают нормально. Для проектов LPC24x надо ещё что-то доделывать?


По проблеме с DMA, установки доступа к памяти привёл в приложении. Для нормальной работы с DMA какие-то регистры ещё инициализировать нужно?

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 27 2010, 07:29
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Oleg_IT @ Aug 27 2010, 09:02) *
Все пустые (с пустой main функцией) проекты LPC24x у меня не работают


Хорошо бы сжатый проект приложить. Вопрос решится на раз-два.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 27 2010, 08:08
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Два примера по двум проблемам.

Прикрепленные файлы
Прикрепленный файл  Primer.rar ( 84.26 килобайт ) Кол-во скачиваний: 20
 
Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 27 2010, 09:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Утверждать не буду(кажется видел в примерах), но вроде можно в Keil подсунуть ini файл, чтобы симулировать внешнюю SDRAM - память выше 0xA0000000. Ну если не используется, просто выключить EMC в стартапе.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 27 2010, 09:50
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Выключить SDRAM??? А с чего она по умолчанию включена? И что, стартап её тестирует? И где это выключается? Спасибо, хоть понял, что это к внешней памяти относится (по мануалу эта область обозначена как Reserved).

А что со вторым примером?
Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 27 2010, 10:08
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Oleg_IT @ Aug 27 2010, 12:50) *
по мануалу эта область обозначена как Reserved


По какому мануалу? 72-я страница манула на 24хх


Table 65. Memory bank selection
Chip select pin Address range Memory type Size of range
CS0 0x8000 0000 - 0x80FF FFFF Static 16 MB
CS1 0x8100 0000 - 0x81FF FFFF Static 16 MB
CS2 0x8200 0000 - 0x82FF FFFF Static 16 MB
CS3 0x8300 0000 - 0x83FF FFFF Static 16 MB
DYCS0 0xA000 0000 - 0xAFFF FFFF Dynamic 256 MB
DYCS1 0xB000 0000 - 0xBFFF FFFF Dynamic 256 MB
DYCS2 0xC000 0000 - 0xCFFF FFFF Dynamic 256 MB
DYCS3 0xD000 0000 - 0xDFFF FFFF Dynamic 256 MB

p.s. не совсем про размещение, а про ноги, но по той теме.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 27 2010, 11:34
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



У меня 73 страница (Rev. 04). Да, надо ещё привыкнуть к этим описаниям.

Разобрался, как выключить SDRAM, заменяю 1 на 0 в строке
EMC_SETUP EQU 1

Но дальше идёт
EMC_BASE EQU 0xFFE08000 ; EMC Base Address
Откуда тогда адрес 0xA0000000 берётся?

Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 27 2010, 12:02
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



EMC рубится одной галкой из кейловского стартапа: открываем стартап -> снизу Config Wizard -> напротив EMC убрать галку.

Вам стоит начать с книжки Трэвора Мартина, а так ...
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 28 2010, 19:08
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Есть у меня такая книга, начал читать. Но время не ждёт, приходится бежать впереди паровозаsmile.gif
Спасибо, помогли с этим вопросом разобраться.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 31 2010, 20:05
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



У меня тоже вопрос по теме, хотя и с другим процом - скачал с Кейла примеры к демоборду mcb1700, беру mcb1700_http_demo.
Загружаю в Кейл, жму Ф7 и получаю кучу ошибок.
Не хочень компилировать \web и создавать web.c, - пока не понял на что ругается но там есть (был с самого начала) уже кем-то созданный ранее, а в \obj лежит уже скомпилированный http_demo.axf.
Но когда я пытаюсь скомилировать, оно ругается даже на конструкции типа:
Код
  PINCON->PINSEL1 &= ~(3<<18);                   /* P0.25 is GPIO */
  PINCON->PINSEL1 |=  (1<<18);                   /* P0.25 is AD0.2 */

  SC->PCONP       |=  (1<<12);                   /* Enable power to ADC block */

  ADC->ADCR        =  (1<< 2) |                  /* select AD0.2 pin */


Потому что в lpc17xx.h нет "SC, PINCON, ADC", там они "LPC_SC, LPC_PINCON, LPC_ADC"!
Аналогично и в других .с-файлах.
Я конечно могу пройтись по ним и исправить. или переопределить, но вопрос - а как-же оно было скомпилировано?! (А ведь было потому что присутствует изначально .axf)
Или я что-то не так делаю?
Go to the top of the page
 
+Quote Post
igorsk
сообщение Aug 31 2010, 21:58
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Наверно исходники делались со старой версией хидеров.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 1 2010, 20:42
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(igorsk @ Sep 1 2010, 00:58) *
Наверно исходники делались со старой версией хидеров.


Не знаю "старой" или "новой", но я понял в чем дело - файл в самом Кейле LPC17xx.h и такой жу файл в CMSIS - разные, в последнем - без префикса.

Теперь осталось понять. как этой самой CMSIS не в демках а в своих проектах пользоваться.

P.S. Я вобще на АРМы/Кортексы только перелез, и с Кейлом никогда не работал (до этого много работал в IAR MSP430/AVR и MPLAB HiTechC ).
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Sep 3 2010, 16:20
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Прошу прощения, я всё о своём. Не удаётся решить проблему с DMA. Я и начальный адрес менял в менеджере проекта и размер блока, нет доступа к этому участку памяти. В книжке об этом ни чего не нашёл. Вероятно что-то ещё проинициализировать нужно. А что...?
Go to the top of the page
 
+Quote Post
cf7k
сообщение Sep 5 2010, 04:54
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227



Цитата(Oleg_IT @ Sep 3 2010, 20:20) *
Прошу прощения, я всё о своём......

#define DMA_SRC 0x7FD00000
#define DMA_DST 0x7FD01000


Воткнул в свой проект Ваш кусок кода... все прекрасно работает... Хотя никаких дополнительных усилий по инициализации сего блока памяти не предпринимал...
Попробуйте ради экперимента разместить в основной области памяти, попробуйте снизить скорость JTAG'a, можете попробовать из SEGGER'a напрямую записать в эту память.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016