Oleg_IT 0 24 августа, 2010 Опубликовано 24 августа, 2010 · Жалоба Помогите разрбраться. Делаю простой тестовый проект для 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 работать не может? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 24 августа, 2010 Опубликовано 24 августа, 2010 · Жалоба Может поможет http://www.keil.com/support/docs/814.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 24 августа, 2010 Опубликовано 24 августа, 2010 · Жалоба К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 24 августа, 2010 Опубликовано 24 августа, 2010 · Жалоба К сожалению не помогло, т.к. эта ошибка возникает в коде Startup, который мной не писан и генерится автоматически. Никто за Вас не будет инициализировать до работы с дополнительными банками памяти ни контроллеры USB, ни контроллер динамической памяти. Пока они не инициализированы, там нет памяти и будете "лететь". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 25 августа, 2010 Опубликовано 25 августа, 2010 · Жалоба Согласен, что я что-то не доделал, но что? По первому вопросу ошибка возникает в 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 и с макеткой считаю правильным. Наверное не прав. Но не думаю, что эти программы не проверены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Проверил. Все пустые (с пустой main функцией) проекты LPC24x у меня не работают, все установки по умолчанию. Те же проекты LPC23x работают нормально. Для проектов LPC24x надо ещё что-то доделывать? По проблеме с DMA, установки доступа к памяти привёл в приложении. Для нормальной работы с DMA какие-то регистры ещё инициализировать нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Все пустые (с пустой main функцией) проекты LPC24x у меня не работают Хорошо бы сжатый проект приложить. Вопрос решится на раз-два. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Два примера по двум проблемам. Primer.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Утверждать не буду(кажется видел в примерах), но вроде можно в Keil подсунуть ini файл, чтобы симулировать внешнюю SDRAM - память выше 0xA0000000. Ну если не используется, просто выключить EMC в стартапе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба Выключить SDRAM??? А с чего она по умолчанию включена? И что, стартап её тестирует? И где это выключается? Спасибо, хоть понял, что это к внешней памяти относится (по мануалу эта область обозначена как Reserved). А что со вторым примером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба по мануалу эта область обозначена как 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. не совсем про размещение, а про ноги, но по той теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба У меня 73 страница (Rev. 04). Да, надо ещё привыкнуть к этим описаниям. Разобрался, как выключить SDRAM, заменяю 1 на 0 в строке EMC_SETUP EQU 1 Но дальше идёт EMC_BASE EQU 0xFFE08000 ; EMC Base Address Откуда тогда адрес 0xA0000000 берётся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 27 августа, 2010 Опубликовано 27 августа, 2010 · Жалоба EMC рубится одной галкой из кейловского стартапа: открываем стартап -> снизу Config Wizard -> напротив EMC убрать галку. Вам стоит начать с книжки Трэвора Мартина, а так ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 28 августа, 2010 Опубликовано 28 августа, 2010 · Жалоба Есть у меня такая книга, начал читать. Но время не ждёт, приходится бежать впереди паровоза:) Спасибо, помогли с этим вопросом разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба У меня тоже вопрос по теме, хотя и с другим процом - скачал с Кейла примеры к демоборду 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) Или я что-то не так делаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться