04.10.2011, 19:41
|
|
Прописка
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от evil_laugh
|
Первый вопрос: где можно посмотреть значения контроллерных спецрегистров? Наблюдать их в окне Memory, которое сплошняком показывает всю память контроллера, как-то не очень наглядно.
Второй вопрос: у многих регистров есть так называемое Reset Value. Почему в окне Memory все регистры, кроме очищенных в начале кода, равны 0xFF?
Третий вопрос: почему приведённый выше код, хоть и изменяет значения регистров (от 0xFF) согласно данным командам, ни к чему не приводит? Как вообще правильно инициализировать контроллер? В примерах из сети якобы всё прекрасно работает, хотя там всего одна строчка (выдача 1цы на ножку) добавляется вместо бесконечного цикла, который с самого начала в программе стоит.
И, наконец, четвёртый вопрос - есть ли что-то ... ну, поприличнее, что ли, этой среды разработки, где можно нормально писать на ассемблере под STM8? После MPLAB этот STVD поначалу кажется неудобным, да ещё и симулятор как-то странно работает.
|
1) меню - вид - регистры периферии
2) см. доку
3) к сожалению симулятор слабенький и не позволяет симулировать работу внешнего генератора, да и ещё много чего не позволяет
4) нет.
Лучший вариант для вас дождаться платы и поработать с ней напрямую.
__________________
ziblog.ru
|
|
|
Сказали "Спасибо" zheleznjakov
|
|
|
04.10.2011, 20:00
|
|
Прохожий
Регистрация: 04.10.2011
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
zheleznjakov, спасибо большое.
А что касается "смотри доку" - не могли бы вы чуточку подробнее объяснить, куда именно хотя бы там смотреть? Я правда не понимаю. Казалось бы, запустился контроллер, и все регистры должны принять своё значение после ресета. Почему так не происходит? Это пока основная моя загвоздка...
|
|
|
|
04.10.2011, 20:24
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Патамушта STVD это жалкое подобие левой руки...
Попробуйте IAR под STM8... он со своими тараканами... но всё таки...
|
|
|
|
04.10.2011, 20:34
|
|
Прохожий
Регистрация: 04.10.2011
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
st_1, благодарю! Да, я вот только что установил IAR WB Kickstart edition. Со вчерашнего дня не мог разобраться, почему установщик мне пишет, что только что выданный мне ключ активации истёк. Оказалось, дата на компе на день сбита была
В нём хотя бы... хотя бы... Да! В нём можно нормально просмотреть регистры! и они даже принимают свои изначальные значения!
Осталось понять, как инициализировать контроллер. Код, генерируемый STVD и IAR очень сильно отличаются... У STVD это куча строчек для инициализации стэка и очистки памяти, а у IAR это всего лишь
Код:
|
MODULE asmmain
PUBLIC __iar_program_start
PUBLIC main
EXTERN CSTACK$$Limit
SECTION `.near_func.text`:CODE:NOROOT(0)
__iar_program_start:
LDW X, #CSTACK$$Limit-1 ; Set stackpointer
LDW SP, X
main:
HALT ; End of program
NOP
END |
И всё... А в даташите сказано, что надо стек правильно инициализировать... Плюс к тому, IAR даже не спросил, какой у меня контроллер вообще
Вот ещё что. Я правильно понимаю, что файл с описанием всех регистров - это "iostmXXXXXXX.h" в директории \\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\stm8\inc ? Ничего, что он на Си вроде как написан? После включения его в #include компилятор вроде бы больше не ругается на неописанные регистры.
Последний раз редактировалось dosikus; 04.10.2011 в 22:32.
|
|
|
|
05.10.2011, 16:38
|
|
Прохожий
Регистрация: 04.10.2011
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Ура! Приехала моя платка, точнее, я с ней приехал
Стал разбираться. Подключил к компу, что IAR, что STVD плату опознали.
Решил попробовать предыдущий проект запустить сперва в IAR. Результат плачевен. Вместо того, чтобы начать выполнение с начала кода, контроллер следует какой-то своей программе (видно в дизасме) и в начало моего кода никак не попадает. Интересно, почему так? Непонятно.
Ладно, попробовал теперь STVD. Здесь всё немного получше - программа выполняется, и я даже сумел зажечь свой первый диодик да, я счастлив))
Но при попытке, как в первый раз, переключить источник тактирования, я потерпел неудачу. Во-первых, почему в регистре CLK_SWR постоянно находится непонятное мне значение 0x01? Почему не 0хЕ1? И при попытке записать туда 0xE1 ничего не происходит. Я догадываюсь, что это как-то связано с режимом отладки, но как? Кто может подсказать? В IAR всё то же самое.
Нашёл информацию в даташите на свой контроллер. Там действительно Reset Value регистра CLK_SWR равняется 0x01. Но это же совершенно не стыкуется с Reference Manual...
[проблема решена, читал Reference Manual не на тот контроллер... ]
To dosikus&Other_Moderators. Добрый день. Пожалуйста, не объединяйте этот пост с предыдущим. Тема постепенно сползает вниз и рано или поздно потеряется, а здесь, похоже, единственный ресурс, где могут хоть как-то помочь (если заметят ).
Upd: проблемы продолжаются... При попытке установить бит SWEN в CLK_SWCR STVD вылетает с ошибкой "Flash memory is not accessible while core is running".
А IAR, похоже, вообще работать не собирается корректно. Программа (написанная не мной, а генерированная, видимо, средой) начинается с инструкции LD A,__iar_program_start. Почему-то эта инструкция закидывает в A не 0x8000, как это делает STVD, а невесть что, и в результате имеем какой-то дикий замкнутый цикл с невыходом в EPT.
Вопрос: где взять это самое __iar_program_start (где оно определено вообще?), как его переопределить и почему происходит такая ерунда?
Помогите, шесть часов уже мучаюсь ...
Последний раз редактировалось evil_laugh; 05.10.2011 в 20:16.
|
|
|
|
30.11.2011, 14:20
|
|
Временная регистрация
Регистрация: 16.06.2006
Адрес: Даугавпилс
Сообщений: 52
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Код:
|
I2C_GenerateSTART (ENABLE);
while (!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(0xa0, I2C_DIRECTION_TX);
while (I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_ SELECTED));
I2C_SendData(0x02); //
while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTIN G));
I2C_GenerateSTART (ENABLE);
while (!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(0xa0, I2C_DIRECTION_RX);
while (I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SEL ECTED)); |
Код:
|
I2C_GenerateSTART (ENABLE);
008C68 A601 LD A, #?b1
008C6A CD98B9 CALL I2C_GenerateSTART
while (!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
??read_clock_0:
008C6D AE0301 LDW X, #0x0301
008C70 CD94AB CALL I2C_CheckEvent
008C73 A100 CP A, #0x00
008C75 27F6 JREQ ??read_clock_0
I2C_Send7bitAddress(0xa0, I2C_DIRECTION_TX);
008C77 3F00 CLR 0x00
008C79 A6A0 LD A, #0xA0
008C7B CD988D CALL I2C_Send7bitAddress
while (I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_ SELECTED));
??read_clock_1:
008C7E AE0782 LDW X, #0x0782
008C81 CD94AB CALL I2C_CheckEvent
008C84 A100 CP A, #0x00
008C86 26F6 JRNE ??read_clock_1
I2C_SendData(0x02); //
008C88 A602 LD A, #?b2
008C8A CD9946 CALL I2C_SendData
while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTIN G));
??read_clock_2:
008C8D AE0780 LDW X, #0x0780
008C90 CD94AB CALL I2C_CheckEvent
008C93 A100 CP A, #0x00
008C95 27F6 JREQ ??read_clock_2
I2C_GenerateSTART (ENABLE);
008C97 A601 LD A, #?b1 |
И куда пропало I2C_SendData(0x02); ? Третье устройство на шине, оптимизация отключена... Что то IAR... или я... ничего не понимаю... Может кто подскажет что.
|
|
|
|
30.11.2011, 15:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от LDZ
|
И куда пропало I2C_SendData(0x02); ?
|
Код:
|
I2C_SendData(0x02); //
008C88 A602 LD A, #?b2
008C8A CD9946 CALL I2C_SendData |
А это тогда что?
|
|
|
|
30.11.2011, 15:36
|
|
Временная регистрация
Регистрация: 16.06.2006
Адрес: Даугавпилс
Сообщений: 52
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
А это тогда что?
|
По идеи это должно быть то, что я ищу. Но почему вместо 0х02 стоит какая-то переменная? И где ЭТО на шине?
|
|
|
|
30.11.2011, 15:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от LDZ
|
Но почему вместо 0х02 стоит какая-то переменная?
|
Это какой то глюк листинга. Если смотреть опкод - все в порядке. A602 это именно ld A,#0x02.
Сообщение от LDZ
|
И где ЭТО на шине?
|
А что - нету? Может до этой строчки вообще не доходит? Может ошибка в библиотеке. Может все есть, но Вы просто не замечаете.
|
|
|
|
30.11.2011, 15:59
|
|
Временная регистрация
Регистрация: 16.06.2006
Адрес: Даугавпилс
Сообщений: 52
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Ага, спасибо за разъяснение. Выше картинка есть... не знаю, как еще смотреть... Это третье устройство, которое не хочет работать. Два работают, библиотека не при делах, надеюсь.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:36.
|
|