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

Ошибка в тестовом проекте Keil.

Помогите разрбраться.

Делаю простой тестовый проект для 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 работать не может?

 

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


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

К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически.

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


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

К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически.

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

 

 

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


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

Согласен, что я что-то не доделал, но что?

По первому вопросу ошибка возникает в 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 и с макеткой считаю правильным. Наверное не прав. Но не думаю, что эти программы не проверены.

 

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


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

Проверил.

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

 

 

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

post-5709-1282888944_thumb.jpg

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


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

Все пустые (с пустой main функцией) проекты LPC24x у меня не работают

 

Хорошо бы сжатый проект приложить. Вопрос решится на раз-два.

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


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

Утверждать не буду(кажется видел в примерах), но вроде можно в Keil подсунуть ini файл, чтобы симулировать внешнюю SDRAM - память выше 0xA0000000. Ну если не используется, просто выключить EMC в стартапе.

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


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

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

 

А что со вторым примером?

 

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


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

по мануалу эта область обозначена как 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. не совсем про размещение, а про ноги, но по той теме.

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


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

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

 

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

EMC_SETUP EQU 1

 

Но дальше идёт

EMC_BASE EQU 0xFFE08000 ; EMC Base Address

Откуда тогда адрес 0xA0000000 берётся?

 

 

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


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

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

 

Вам стоит начать с книжки Трэвора Мартина, а так ...

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


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

Есть у меня такая книга, начал читать. Но время не ждёт, приходится бежать впереди паровоза:)

Спасибо, помогли с этим вопросом разобраться.

 

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


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

У меня тоже вопрос по теме, хотя и с другим процом - скачал с Кейла примеры к демоборду 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)

Или я что-то не так делаю?

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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