30.11.2011, 20:02
|
|
Прохожий
Регистрация: 17.03.2008
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Доброго времени суток! На днях приобрел китайский ULINK2. Спаял простейшую макетку на lpc2101(кварц, питание 1.8, 3.3В) Схему не рисовал. Создал проект в KEIL. JTAG в настройке дебагера, при отключенном питании на платке, никаких ID не показывает, а при включенном - JTAG communication failure. Ноги DBGSEL и RTCS подтянул к питанию. В остальных темах такого вопроса не нашел, поэтому задал сюда.
|
|
|
|
01.12.2011, 21:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,604
Сказал спасибо: 708
Сказали Спасибо 4,362 раз(а) в 2,000 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Последний раз редактировалось Kabron; 01.12.2011 в 21:53.
|
|
|
|
04.12.2011, 01:44
|
|
Частый гость
Регистрация: 16.01.2010
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
AT91SAM7S256
Не могу прочитать значения регистра WDT
int main( void ) {
*AT91C_WDTC_WDMR =(0x1 ‹‹ 15)|(0x1‹‹12); вот тут задаю значения.
mr=*AT91C_WDTC_WDMR;
printf ("AT91C_WDTC_WDMR=%ld\n",mr );
И вот в терминал мне отправляет, всегда одно и тоже самое, чтобы я не записал в *AT91C_WDTC_WDMR.
AT91C_WDTC_WDMR=32768
|
|
|
|
04.12.2011, 01:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,604
Сказал спасибо: 708
Сказали Спасибо 4,362 раз(а) в 2,000 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
|
|
|
|
13.12.2011, 10:05
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
люди прошу пожалуста растолкуйте на двух пальцах что это за ошибка и как сней баротся
собрал простейший проект для SMT32 discover помигать светодиодом
выдал: Ошибка L6236E: No section matches selector - no section to be FIRST/LAST.
в описании это
The scatter-file specifies a section to be +FIRST or +LAST, but that section does not exist, or has
been removed by the linker because it believes it to be unused. Use the linker option "-info
unused" to reveal which objects are removed from your project. Example:
ROM_LOAD 0x00000000 0x4000
{
ROM_EXEC 0x00000000
{
*.o (Vect, +First) ‹‹ ошибка здесь
* (+RO)
}
RAM_EXEC 0x40000000
{
* (+RW, +ZI)
}
}
ругается на линкер
как всегда инфы очень мало, что то типа насколько я понял программа незнает откуда ей старотовать но как это исправит так и непонял, похоже где то недонастроил проект но где? или чего то упустил
|
|
|
|
14.12.2011, 00:21
|
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от rtyugh
|
AT91SAM7S256
Не могу прочитать значения регистра WDT
int main( void ) {
*AT91C_WDTC_WDMR =(0x1 ‹‹ 15)|(0x1‹‹12); вот тут задаю значения.
mr=*AT91C_WDTC_WDMR;
printf ("AT91C_WDTC_WDMR=%ld\n",mr );
И вот в терминал мне отправляет, всегда одно и тоже самое, чтобы я не записал в *AT91C_WDTC_WDMR.
AT91C_WDTC_WDMR=32768
|
А это учитываете? :
"The Watchdog Mode Register (WDT_MR) can be written only once. Only a processor reset
resets it."
|
|
|
|
14.12.2011, 01:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Пока что не ясно, чем лучше/хуже ULINK2, который вдвое дешевле.
|
|
|
|
19.12.2011, 22:15
|
|
Прохожий
Регистрация: 09.12.2011
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Приветствую всех. Есть ADuC7020. Приведите пример кода где значение переменной сохранялось в флеш память микроконтроллера, а затем при новом запуске мк подгружалось из памяти. Как это организовывается? Желательно с подробными комментариями, можно для любого другого мк с ядром ARM7 (принцип вроде везде один и тот же), просто примеров пока не нашел. А своими мозгами дойти не могу, даташит скудный.
|
|
|
|
10.02.2012, 19:40
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
userKR принцип как раз везде разный - тут куда производителя понесет так и будет. попозже кину пример для ADuC.
Kabron ...и в 5 раз дороже jlink, при одинаковых, как говорят в описании, возможностях. вам шашечки или ехать?
|
|
|
|
10.02.2012, 20:11
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
userKR
код не вполне причесан - делал побыстрее, так что можешь пилить как хочешь.
и помним, что последнее 16бит слово последней доступной страницы флеша трогать низя, иначе эксцепшен.
Код:
|
[заголовки]
// структура "блок данных для записи во флеш"
typedef struct
{
WORD CurrentAddress; // текущий адрес по которому пишутся данные во флеш
WORD BufferSize; // размер данных в буфере
WORD BufferIndex; // индекс текущего слова в буфере
WORD Buffer[256]; // буфер записи для одного 512 байтного блока
} TFlashParameters;
//================================================== ====================
[код]
void FlashWaitForReady (void)
{
int Status;
while (((Status = FEESTA) & 0x04) == 0x04) {} // ждем завершения операции с флешем
if (Status & 0x02) HaltOnError(FLASH_MEM_ERROR, 1, 1); // останов программы с выводом кода ошибки на индикатор
}
//================================================== ====================
// APageIndex - индекс страницы для записи, 0..123
// ABuffer - указатель на записываемые данные
// ADataSize - размер записываемых данных, ‹= 512, должен быть четным
void FlashWritePage (int APageIndex, void *ABuffer, int ADataSize)
{
memmove(&Flash.Buffer, ABuffer, ADataSize); // перемещаем данные в буфер записи
Flash.CurrentAddress = APageIndex * 512; // базовый адрес страницы флеша
Flash.BufferSize = ADataSize / 2; // размер данных в 16-бит словах
Flash.BufferIndex = 0; // сброс индекса данных
FEEMOD = 0x08; // разрешение записи во флеш
FEEADR = Flash.CurrentAddress; // базовый адрес страницы
FEECON = 0x05; // команда на стирание страницы флеша
FlashWaitForReady(); // ждем завершения
while (Flash.BufferIndex ‹ Flash.BufferSize)
{
FEEADR = Flash.CurrentAddress; // адрес записи во флеш
Flash.CurrentAddress += 2; // смещение адреса
FEEDAT = Flash.Buffer[Flash.BufferIndex++]; // данные для записи во флеш
FEECON = 0x02; // команда записи слова во флеш
FlashWaitForReady(); // ждем завершения
}
// если запись данных завершена
FEEMOD = 0x00; // запрет записи во флеш
}
//================================================== ====================
[использование]
char Buffer[64];
TFlashParameters Flash;
//================================================== ====================
memset(&Buffer, 0, sizeof(Buffer));
strcpy(&Buffer[0], "Hello, dolly!");
FlashWritePage(120, &Buffer, sizeof(Buffer));
//================================================== ==================== |
Последний раз редактировалось Hives; 10.02.2012 в 20:19.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:42.
|
|