Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil MON166 Target Monitor
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Massaew
Здравствуйте!

Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.

P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться
scifi
Цитата(Massaew @ Oct 11 2007, 14:06) *
Здравствуйте!

Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.

P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться

Несколько лет назад использовал ST10F168, отлаживал при помощи MON166, причём как в режиме BSL, так и Simulated Serial IO. Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Если интересно, могу выложить свою конфигурацию.
Massaew
Цитата(scifi @ Oct 12 2007, 11:57) *
Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно.

Это точно!

Я тут повошкался и кое что получилось.
Когда жму дебаг монитор загружается на 100%, а потом начинает грузится еще что-то и тут он выдает - намогу записать по адресу такому то и такому то. И таких адресов куча.

То что он не может записать туда правильно т.к. по этому адресу у меня ROM.
Но я выбрал режим при котором написано что ничего небудет прошиваться, все копируется в RAM.

Диапазоны адресов для RAM и ROM у меня в проекте указаны.

Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM?

Адреса для монитора указаны в RAM и туда он вроде как загрузился.

Вот такие пироги.

Если сможете мне помочь, буду признателен.

P.S. Спасибо что откликнулись yeah.gif , а то за посты типа "ничего не получается" обычно посылают
scifi
Цитата(Massaew @ Oct 12 2007, 19:31) *
Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM?

Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10). Я для этого предусмотрел на плате разъём и цеплял к нему маленькую RAM для отладки. Делал две конфигурации проекта с разными настройками линкера: Debug и Release, причём Debug целиком в RAM.
Насколько я помню, монитор грузит не из HEX файла, а из выходного файла линкера (не знаю, как называется формат, и, по-моему, файл без расширения), в этом же файле отладочная информация.
Massaew
Цитата(scifi @ Oct 14 2007, 21:40) *
Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10).


Добро!
Использую только RAM.
Загрузка монитора (loading monitor) проходит успешно на 100%

А затем начинает что то грузить и опять 11 адресов не пишутся. Причем в соседние адреса он что то записывает, а в это нет.

Что интересно, у меня внешняя RAM с адресами 0х40000...0х7FFFF. (туда монитор загружется без проблем)
А вот "проблемная" помять это нулевой сегмент :
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 0001FA
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00023B
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000017
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000019
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00001D
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000035
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000037
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000003
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00007B
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00008F
*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 0000FB

Там находится внутреняя ROM, кот у меня нет(МК- C167CR-LM).
Доступ к внутренней ROM у меня запрещен:

; ROMEN: Internal ROM Access Enable control bit (SYSCON.10):
_ROMEN EQU 0 ; 0 = Internal ROM disabled

В описании аппаратного занрузчика написано что есть какая то BootROM.
Если это она и есть, и в соседние адреса что то записывается(или уже было записано?), а в эти нет, то у меня битый МК?

Вообщем у меня нет мыслей. Help!
scifi
Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях.
Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу.
Кстати, полезно заглянуть в map файл (*.m66), чтобы убедиться, что линкер размещает программу там, где надо.
Massaew
У меня поломка! В плате что-то накрылось. Пока ремонт попробовать ничего не могу.
НО тема не закрыта. Как починюсь, так сразу...
Massaew
Я опять здесь!

Цитата(scifi @ Oct 16 2007, 17:37) *
Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях.


Все так и сделал. Регистры процессора изменяются и память пишется.


Цитата(scifi @ Oct 16 2007, 17:37) *
Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу.


А вот тут такой нюанс. Дело в том что я использую готовый контроллер от КАСКОДа. Там нулевой адрес это ROM. Т.е. CS0 это ROM. Получается что "замапить ОЗУ на адрес 0" нельзя.(?)

Другое дело что в Readme к монитору написано

CODE_START Specifies the start address for the Monitor Code Area.

If you install the Monitor into a ROM, the ROM device must be
addressed with the CS0 chip select output. The 166/ST10 starts
the program at address 0 and executes the JMPS instruction.
If CODE_START is not 0, ensure that the first JMPS instruction
is burned to ROM address 0. It is possible to locate a RAM
device at address 0, so that you can modify all interrupt
vector locations. The Monitor program writes automatically
the NMI and optionally the SERIAL interrupt vector into this
RAM to support program breakpoints.

У меня получается вариант когда CODE_START is not 0.
Вопрос, как прожеч в ROM the JMPS instruction? Не в том смысле как прожигать, а как сформировать файл, в кот будет эта инструкция и кот я запишу по адресу 0.

И потом все таки что делать с таблицей векторов исключений? Пробовал изменить значение переменной VECTAB, а так же вот здесь: Project-Options for Target-L166 Misc-Interrupt Vector Table Address. Ничего.

help.gif
scifi
Цитата(Massaew @ Oct 30 2007, 14:52) *
Вопрос, как прожеч в ROM the JMPS instruction? Не в том смысле как прожигать, а как сформировать файл, в кот будет эта инструкция и кот я запишу по адресу 0.

И потом все таки что делать с таблицей векторов исключений? Пробовал изменить значение переменной VECTAB, а так же вот здесь: Project-Options for Target-L166 Misc-Interrupt Vector Table Address. Ничего.

Есть такой приём: на месте таблицы векторов исключений в ROM поместить пачку инструкций JMPS, которые передают управление в RAM, где располагается другая таблица векторов исключений, загружаемая при отладке. Насколько я помню, Project-Options for Target-L166 Misc-Interrupt Vector Table Address для этого и сделана: разместить таблицу векторов в указанном месте, предполагая, что кто-то уже позаботился о перенаправлении туда. Как сформировать таблицу перенаправления в ассемблерном файле, см. INST167.A66 (PROC INITSEC).
Massaew
Цитата(scifi @ Oct 30 2007, 18:36) *
Как сформировать таблицу перенаправления в ассемблерном файле, см. INST167.A66 (PROC INITSEC).


Эээ...
Вот исходный код:

INITSEC PROC NEAR

JMP FAR InitSerial
$IF (SERIAL0)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4) ; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP
) ELSE (%IF (%COUNT EQ (2BH*4)) THEN (JMP FAR SER_ISR
) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI
%SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF

$IF (SERIAL1)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4) ; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP
) ELSE (%IF (%COUNT EQ (2EH*4)) THEN (JMP FAR SER_ISR
) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI
%SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF

$IF (SERIAL2)
%IF (%CODE_START EQ 0) THEN (
%SET(COUNT,4) ; SET UP INTERRUPT TABLE
%WHILE(%COUNT LE 01FCH)
(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP
) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI
%SET(COUNT,%COUNT + 4)
)
) FI
$ENDIF


SER_INT_JMP: JMPS INT_ADR_SEG,(INT_ADR_OFF + SER_INT_TRAP*4)

INITSEC ENDP

Что тут надо менять? Не могу сообразить.

Вразумите!

//edited
P.S.
И потом.
Я так понял из файла INST167.A66 формируется файл монитора, кот. загружается в RAM(т.к. используется режим BSL)
Допустим я сделал нужные изменения в INST167.A66
А что в ROM прожигать?
//end edited
scifi
К сожалению, у меня нет времени, чтобы объяснять ещё подробнее. В своё время мне удалось всё настроить самостоятельно, опираясь на штатные руководства. Надеюсь, Вам это тоже удастся. Удачи!
Massaew
crying.gif
А я так надеялся! Остался последний шаг, как я понял!
Ладно.
Надеюсь мне тоже удасться "всё настроить самостоятельно, опираясь на штатные руководства"!
Тем не менее спасибо за Вашу помощь!

Буду пробовать сам, ну и заглядывать сюда, может еще кто поможет советом!

P.S.
Вы предлогали выложить свою конфигурацию.
Выложите, может она мне поможет.
scifi
Конфигурация монитора: прошит во флэш-ПЗУ по адресу 0, используется simulated serial I/O (чтобы не занимать аппаратный UART). Отлаживаемая программа размещается в ОЗУ по адресу 0x60000, для монитора используется область ОЗУ 0x7A600-0x7A7FF.
Massaew
Я так понял, что без прошивки ROM не обойтись.
Настроил монитор примерно так же как у вас, только в режиме UART.
Прошил MONITOR.H86 в ROM.

Но тут столкнулся с другой проблемой - как настроить основной проект.
Во вкладке дебаг, сеттингс, конфигурация монитора я до этого выбирал из списка имя монитора, кот указывал вот сдесь:

If you generate the Monitor in BOOTSTRAP MODE open the file BOOTCOPY.BAT
and set the variable MON_NAME to the name of your target system. Example:
SET MON_NAME=Phytec 167

А теперь (режим UART) непонятно что выбирать.
Пробовал имя монитора Monitor166 in ROM но он говорит нет файлов *.MON и *.BOT.
Massaew
scifi, уважаемый!
Пришлите мне пожайлуста ваш проект, кот вы отлаживали с помощью ващего монитора в режиме simulated serial I/O.
Код мне не нужен, а вот настройки проекта (дебагера) пригодились бы.

Я думаю, по примеру я все пойму и не буду вопросами доставать!

p.s.
блин, такое чувство, что не хватает совсем чуть-чуть! Хожу совсем рядом, а очивидного не замечаю!!
...
!!!
scifi
Цитата(Massaew @ Nov 9 2007, 19:27) *
Пришлите мне пожайлуста ваш проект

Держите. Там секретов нет. Если в результате использования этого кода что-то сломалось или кто-то пострадал, то я не виноват.
Massaew
К сожалению ответа на свой вопрос в настройвах вашего проекта я не нашел.

Вот я описал все свои шаги и какую проблему они порождают, так сказать.
Решил описать более менее подробно чтобы легче вникнуть было и избежать доп вопросов
(сорри за настойчивость)

Конфигурирую монитор, следуя инструкциям readme.txt

Выбираю режим UART ASC0 MODE: In this configuration the Monitor program will be direct
programmed to (Flash) EPROM's.

a) Create a new empty sub-folder in C:\KEIL\C166\MONITOR.
сделал, папка допустим называется MyMON

cool.gif Copy the contents of the sub-folder C:\KEIL\C166\MONITOR\USER167 to this
new folder.

сделал

c) Load the project file Monitor.UV2 into uVision2 environment.
сделал

d) Set the Monitor Mode you want to configure as current target with the
dialog Project - Targets, Groups, Files...

сделал

e) Describe your target hardware in the file ABSTRACT.TXT. If you generate
the Monitor in BOOTSTRAP MODE the content of this file will be shown
during the selection of the Monitor program.

не делал

f) Open the file CONFIG.INC and specify your hardware.

DATA_START Specifies the start address for the Monitor Data Area. This
address must be an addressable RAM area.

в RAM (0х07Е600)


CODE_START Specifies the start address for the Monitor Code Area.
в RОM (0х000000)



VECTAB Defines the Interrupt Vector Address relocation and is only
required if CODE_START is 0. In this case, the application
program cannot write the interrupt vectors in the address space
0 .. 0x200. Instead it is possible to relocate the interrupt
vectors to an address in RAM space and use in uVision2 Project-
Options for Target-L166 Misc-Interrupt Vector Table Address
to generate the interrupt vector table at a different address.

в RAM (0х070000)


BAUDRATE Defines the communication Baudrate. In BOOTSTRAP MODE the
baudrate is self-adjusting and this value is not used. For the
SIMULATED SERIAL MODE the maximum Baudrate is 38400bps @20MHz CPU
clock. In most cases, the maximum baudrate is 57600bps. Try
9600bps first, before you use higher baudrates.

If you set BAUDRATE to the value 0, code for automatic baudrate
adjustment will be used. In this case the Monitor works typical
with baudrates between 2400bps and 57600bps. Try 9600bps first.
The automatic baudrate detection does not work for the SIMULATED
SERIAL MODE.

9600


CPU_CLOCK Defines the internal CPU Clock frequency and is used to calculate
BAUDRATE factors for the serial interface. The internal Clock
might be different from the XTAL frequency, due to on-chip PLL of
the 166/ST10 device. CPU_CLOCK is not relevant in BOOTSTRAP Mode.

20000000

g) If you generate the Monitor in BOOTSTRAP MODE open the file BOOTCOPY.BAT
and set the variable MON_NAME to the name of your target system. Example:
SET MON_NAME=Phytec 167

не делал

h) Generate your Monitor configuration with Project - Build Target.
сделал

i) If you generate the Monitor in UART ASC0 MODE or SIMULATED SERIAL MODE,
you need to burn the file MONITOR.H86 into the (Flash) EPROM of your
target system.

прошил

плюс к этому
Reserve Statements In Application Programs

BOOTSTRAP MODE and UART ASC0 MODE:
Requires the NMI and ASC0 interrupt vectors. You need to enter under
Options - L166 Misc - RESERVE: 8H-0BH, 0ACH-0AFH

сделал и плюс еще те адреса где распологаются DATA_START и VECTAB

Все, теперь монитор создан, прошит, настроен, и можно отлаживать свой проект (пусть будет MyPrj)

Теперь настраиваю проект MyPrj
uVision2 Project-Options for Target-Debug выбираю использовать keil monitor 166driver,
жму settings выскакивает error

The monitor configuration file каракули.MON could not be found in the
directory c:\progfiles\keil\c166\Monitor\'
Please select a different configuration or copy the configuration files
into this directory


Так вот вопрос, что туда копировать?!! В папке MyMON файлов с расширением *.MON нет.


Что я не доделал?

Плизззз, хелп!!!
scifi
Цитата(Massaew @ Nov 12 2007, 11:20) *
Теперь настраиваю проект MyPrj
uVision2 Project-Options for Target-Debug выбираю использовать keil monitor 166driver,
жму settings выскакивает error

The monitor configuration file каракули.MON could not be found in the
directory c:\progfiles\keil\c166\Monitor\'
Please select a different configuration or copy the configuration files
into this directory

Если Keil установлен в Program Files, то весьма вероятно, что пробел в имени директории сбивает Keil с толку. Я всегда устанавливал в C:\Keil, чтобы избежать эти засады.
А вообще предлагаю игнорировать это сообщение об ошибке и выбрать в списке "Monitor in ROM". Это особый пункт списка мониторов, он существует независимо от всех *.MON файлов (можно их все стереть), и именно он Вам и нужен.
Massaew
Переставил Keil в c:\Keil
Ошибка все равно выскакивает. Выбрал "Monitor in ROM".
Ни фига!

Жму дебаг, вылетает CONNECTION TO TARGET SYSTEM LOST!

Жму try Again вылетает ошибка

The file *.MON or *.BOT could not be found in the MONITOR directory of your installation.
Please reconfigure the Monitor 166 again or copy the preconfigured *.MON and *.BOT files
from the hardware mamufacturer into the MONITOR directory!


Может это потому что у меня евал версия кейла, крякнутая. То ли не до конца крякнулась, то ли еще что.
ХЗ.

scifi, еще раз спасибо
Massaew
Вообжем после неудачи с Keil, решил попробовать отладчик, кот. предлагает КАСКОД вместе со своими контроллерами - ПО называется RIDE.

Это кошмар какой-то! Глюк на глюке, работать не возможно!

Все таки хочется использовать монитор Keil.

Народ, ну помогите!!! Чего у меня не так-то?!!
Massaew
Проблему решил (еще до нового года), вот появилось время решил отписаться!

Вообщем все было дело в том что я не правильно указывал диапазон адресов RAM!

Помогло разобраться то что я взял описание платы кайля MCBXC167 Evaluation Board и монитор к ней. Ну и сопоставил настройки и железо.

Спасибо еще раз scifi
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.