Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания в tms470r1b1m
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
k_george
Люди добрые, подскажите где засада ? help.gif help.gif help.gif
Суть проблемы: CrossWorks -> Вигглер -> tms470r1b1m в бесконечных циклах работает без проблем:
RAM, FLASH в долбаггере и со сброса. Как только разрешаю IRQ (таймер нужен), так пошли чудеса: под житагом всё нормалёк даже если и компилил без отладочной информации - шагает, запускается, останавливается, но после сброса (питание, кнопка) программа начинает перезапускаться по таймеру как по сбросу, хотя все вектора вроде живы (вывожу на экран). Было подозрение на WatchDog? но в SYSESR о нём ничего нет и вообще там только PORRST. Отсюда следующие вопросы:

1. В чём у сабжа разница запуска по житагу и по сбросу(про WatchDog знаю)?
2. Кто ещё может вызвать перезапуск (не в SYSESR)?
2. Может кто santa2.gif поделится проетом с работающим таймером?
IV_K
вобщем была похожая фигня.. методом научного тыка убрал заменой команд LDR на B в cstartup (переходы на обработчики исключений), это было под 4-м иаром. при переходе на 5-й опять наступил на эти грабли, но линкер не переваривает перестановки LDR на B.. придется копать глубже..
k_george
А как оно вааще с иаром - у меня совсем плохо: даже с простыми examl'ами брешет на cable & power и при всём том чётко определяет id девайса(с 256-м процом такого нет). Пробовал менять распределение памяти(как CW) теже яйца... cranky.gif
IV_K
иар+мт-линк+тмс 470 b1m,a288,a384 полет нормальный. но бывают затыки, которые удается все-таки обойти.
k_george
Как я понянл - слабое звено здесь Wiggler -> TMS. Без МТлинка не жисть? или всё же как-то можно выкрутиться?
IV_K
cable & power - это имхо косяк виглера или платы с тмс-ом.. с мтлинком у меня такого нет.. как у вас там с ножками тмс-а TRST, RST и PORRST? как подключены? PORRST и TRST идут на житаг, при инициализации по ним должны быть импульсы, у меня косяки были похожие, когда PORRST отвалилась..

З.Ы. еще ногу AWD резистором в землю нужно
k_george
Плату я делал а ля TI и Olimex: ~TRST и ~RST на житаге присутствуют, хотя сигналов на какой-то одной(какой не помню) нет; AWD с джампером, но ведь же CW всё грузит, жжёт и отлаживает. А вот про PORST просил бы по подробнее - у меня на неё RESET от TPS'а заведён, а ещё её куда?
IV_K
у меня RST просто к VCC притянут, а с супервизора и rst житага на PORRST идет.
IV_K
чудеса мля... из флеши начинает работать ТОЛЬКО при использовании с нулевого адреса команды B.. LDR ему не катит..
с прерыванием та же фигня.. LDR PC,IRQ_Addr ему не нравится, а вот B IRQ_Addr работает!!!

похоже этот проц до инициализации карты памяти НЕ МОЖЕТ выполнить команду, в которой используется адрес вне поля команды.. =(( афигеть.. а житаг в нем карту памяти инитит, других вариантов у меня нет..
k_george
Если можно поподробнее пжалуйста, осбенно с того момента где и как оно работает (хорошо бы пример) - у меня это первый опыт с uM и С. Тупая замена LDR PC,IRQ_Addr на B IRQ_Addr дала чистого мертвяка - летает по всей памяти, а вот при LDR для вектора 0x0 с кнопки не запускается.
Замена ~RST на ~PORRST в житаге не помогла: IAR перестала определять ID; H_JTAG как не видел так и не видит, а CW работает как работала. Похоже дело здесь не в железе а в конкретных дровах. Завтра попробую на 256-м - он дома.
IV_K
вот этот пример работает из флеши, прерывания есть, переделан cstartup
k_george
Проблема решена добавлением в старап след. кода:

// Read the MSM keys
ldr r1, =0x1000FFE0
ldr r0, [r1, #0x00]
ldr r0, [r1, #0x04]
ldr r0, [r1, #0x08]
ldr r0, [r1, #0x0C]

найдено методом комментирования инструкций в JTAG-скрипте:

/******************************************************************************
Target Script for TMS470R1B1M.

Copyright © 2006 Rowley Associates Limited.

This file may be distributed under the terms of the License Agreement
provided with this software.

THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
******************************************************************************/

function Reset()
{
TargetInterface.stopAndReset(1);

// Disable reset on address access violation
TargetInterface.pokeWord(0xFFFFFFE0, 0x00004007); // SYSECR

// Map internal SRAM (bank 2) to 0x10300000
TargetInterface.pokeWord(0xFFFFFE10, 0x00001030); // MFBAHR2
TargetInterface.pokeWord(0xFFFFFE14, 0x00000080); // MFBALR2

// Duplicate internal SRAM (bank 3) at 0x00000000
TargetInterface.pokeWord(0xFFFFFE18, 0x00000000); // MFBAHR3
TargetInterface.pokeWord(0xFFFFFE1C, 0x00000080); // MFBALR3

// Configure HET RAM static memory controller (32-bit, 7 wait states)
TargetInterface.pokeWord(0xFFFFFD04, 0x00000072); // SMCR1

// Map HET RAM (bank 4) to 0x10800000
TargetInterface.pokeWord(0xFFFFFE20, 0x00001080); // MFBAHR4
TargetInterface.pokeWord(0xFFFFFE24, 0x00000020); // MFBALR4

/* Enable write buffer and write trailing wait state override */
TargetInterface.pokeWord(0xFFFFFD2C, 0x00000003); // WCR0

// Disable FLASH (bank 1)
TargetInterface.pokeWord(0xFFFFFE08, 0x00000000); // MFBAHR1
TargetInterface.pokeWord(0xFFFFFE0C, 0x00000000); // MFBALR1

// Map internal FLASH (bank 0) to 0x10000000
TargetInterface.pokeWord(0xFFFFFE00, 0x00001000); // MFBAHR0
TargetInterface.pokeWord(0xFFFFFE04, 0x000001c2); // MFBALR0

// Read the MSM keys
// TargetInterface.peekWord(0x1000FFE0);
// TargetInterface.peekWord(0x1000FFE4);
// TargetInterface.peekWord(0x1000FFE8);
// TargetInterface.peekWord(0x1000FFEc);
}

function RAMReset()
{
Reset();
}

function FLASHReset()
{
Reset();
}




Онако гемора с IAR -> Wiggjer -> 1B1M это не решило. 01.gif Что ж будем воевать в CrossWorks.
IV_K
с добавлением куда именно? я вставил после метки ctartup - не помогло..
k_george
Проект у меня собссно CrossWork'овский - стартап там побольше + TMS470.c для перываний + clt0.c для управления библиотеками, а вместо самого стартапа (TMS470_Startup.s) я держу его копию system.s чтобы можно было править. Так вот добавка в ней после инита катры памяти и перед вызовом настройщика библиотек clt0.c.
IV_K
в иаре у меня есть чтение MSM, как раз после настройки карты памяти, но в сишном файле в __low_level_init()
попробую я перенести это все в асмовый стартап..
k_george
После всего этого ИАР через Вигглер тоже заработал, правда МакРайгорские дрова кривые - они всегда такие были - пстоянно дёргать чере "Диспетчер устройств" приходится (остановить-запустить как альтернатива перезагрузке системы). У CW этого нет - всё работает надёжно.

Так что же в сухом остатке? Почему стартап "чуть-чуть" не доделан? Борьба с пиратствующими юзерами?
IV_K
дык стартап и экзамплы наверное студенты пишут =) доделанного там вряд ли можно найти.. вот проблемы под иаром насчет замены LDR на B я так и не понял..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.