Наши
Сайдбары
   
IRC-канал
Linuxportal.ru
   
Импорт новостей
 
Вход Быстрая регистрация На главную

Поиск:
 
   КАЛЕНДАРЬ
     Выберите дату записи:
 

<Июль 2004 >
ПН ВТ СР ЧТ ПТ СБ ВС
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
  Блог сисадмина | ded_marazm


Работа с микроконтроллером MC9S12DP256 | 08.07.2004 | 07:49

Достался нам с Андреевым набор "Умелые руки": отладочная плата для устройств на МК MC9S12DP256. С ней 2 компашки документации, пару шнурков для подключения переферии и блок питания.

Так как изделее 100% американское, то блок питания был на 120 вольт. Пришлось отрезать хвост (кстати весьма длинный 2 метра точно есть) зачистить провода и воткнуть в ТЭС (венгерский блок питания, регулировка от 0 до 120 вольт, так же регулируется выходной ток). Перед этим воткнули туды адаптер от хаба 8-портового COMPEX, огонечки загорелись, но работает или нет не поняли. Когда воткнули ТЭС выставили на нем 7 вольт (как в доке указанно), прицепили его к компутеру решили проверить его терминальные возможности. На этой плате расположен МК с прошитой в него програаммой терминала и средствами обмена по RS232S c внешним миром. Вобщем воткнули в него мы компутер и начали насиловать minicom, но нифига не получилось.
На следующий день решили почитать доку, там сказанно, что при включении должен пробежать огонек по линейке светодиодов. Но у нас горел только первый, ясно указывая на неисправность чего-то. Потом я ради развлечения решил померить напряжение в различных точках платы, и обнаружил что на разведенной там логике всего 4.5 вольта, что для ее нормальной работы весьма мало. Подключив к ноге вольтметр, начали накручивать ТЭС, когда стало 5 вольт, оказалось, что на входе платы все 9 вольт! И самое интересное, что после сброса мы увидели как начал бегать огонек по линейке светодиодов. Правда сначало он бегал непрерывно потом однократно. Как в последствии оказалось, что 9 вольт было мало, и когда загорались светодиоды или еще что-нибудь то потребляемый ток возростал, напряжение проседало и плата сбрасывалась. А после сброса опять запускался цикл поочередного зажигания светодиодов. Подкрутив еще ТЭС добились устойчивой работой платы. Взялись с утроенной силой за minicom. Перебрав всевозможные режимы пришли к такому 9600N1 XON/XOFF. И как только мы это установили, сразу выскочило приглашение к вводу команд. Ввели help нам выскочила подсказка на двух экранах о всех командах которые понимает встроенное ПО платы. Сразу вспомнил времена работы на "Микроше", теже мнемоники, адреса.... чуть не прослезился :)
День был прожит не зря!
Скажу сразу, что вся докуменция была в pdf (что в принципе очевидно), а вот программы и системы разработки, кросс-ассемблеры, отладчики и эмуляторы под Виндовс. Наша задача заточить все под Линух.
День 3-тий. Решил поупражнятся в закачке различных бинарников в МК (МикроКонтроллер), на компашке были некоторые тестовые программки на ассемблере в тексте и кодах. Все успешно получилось, minicom позволяет передовать в порт файлы в различных форматах (в нашем случае использовался ascii). По команде "G 2000" программка запускалась и чего-то делала. Так как на плате расположено 8 светодиодов, 4 кнопки, 8 DIP-переключателй, 4-е 7-сегментных индиктора и LCD дисплей 16х2 символов, IR приемник и передатчик, динамик. Различнае программки чего-то со всей этой переферией делают. Светодиоды мигаю, динамик проигрывает "К Элоизе", на дисплей всякие ругательства выводятся... Вобщем, можно реализовать любые больные фантазии.
Осталось проблема в самостоятельной компиляции своих программ. По-шерстив компашку нашел кросс-ассемблер под ДОС и ссыылку на автора. На странице автора узнал, что изначально кросс-ассемблер был написан для Unix... что не могло не радовать. Еще этот товарищ не пожадничал оставить на своей странице архивчик с исходниками своего детища. Мы их оперативно стянули и развернули. Внутри оказались исходники заточенные под Borland C++ и еще что-то досевое. При этом наличиствовали несколько Makefile-ов. Так-как исходники были весьма просты, я просто поправил один из мейк-файлов под линуховые правила и запустил. И он скомпилился! Правда линкер ругнулся на одну функцию которой нигде не оказалось. В тексте рядом с этой функцией стояло пояснение, что она нужна для перевода символов в нижний регистр. Мы подумали, что нам переводить ничего не надо и сделали для нее заглушку (пустое тело). И сразу же получили исполняемый файл. Конечно его надобыло проверить в действии. Дернул исходник, поправил для внес коррективы касающиеся переводов строки и каких то символов "конец файла", имена инклюдов. Вобщем с 5 попытки получил бинарник (на несколько байтов короче чем аналогичный бинарник с компашки). Загрузили в МК и она отработала так же как и исходная версия бинарника. Таким образом мы обзавелись кросс-ассемблером под Linux. Остался сущий пустяк, компилятор C. Под виндовоз сей инструмент есть, будем искать под Linux, причем уже нашли нечто похожее на компилятор в тарболе. Будем пробывать.


Комментарии посетителей:

Дед Маразм
07.09.2004 | 11:29
Омск
Ст: | Комм:
Вчера решил занятся компилятором С для этого МК. На компашке кое-что было, сходил еще на сайт... вобщем вывод такой. Некий добрый дядя состряпал 4 патча на gcc, binutils, gdb и newlib. Ставим их, компилим и получаем поддержку CPU HC12. Что весьма насторожило. Почемe бы не сделать отдельный набор продуктов. Незнаю. Впринципе на сайте есть нечто в RPM-ках, но надо смотреть.
Сегодня еще распечатал систему команд - начальство не досчитается 200 листов бумаги :))
kaboom
07.09.2004 | 20:33

Ст: 0 | Комм: 0
100% американскии блок питания vidaet 11.1V.
andi
07.10.2004 | 11:50
Омск
Ст: 0 | Комм: 0
Сегодня получил письмо от Кабума. он расписал все "прелести" GNU компилера С под МК. Как оказалось (или как я понял), gcc после патчей выдает исполняемые файлы для hc12, но только в формате elf. А для исполнения этих файлов нужно иметь ОС и glibc, что для МК с 12 Кб RAM и 256 Кб ROM черезмерное расходование ресурсов. Линкер также не позволяет гибко назначать сегменты кода и данных. Есть еще один немаловажный момент, в ассемблере очень популярно передача параметров в функции через регистры МК, в С для этого используется стек.
Вобщем резюме такое - писать на ассемблере, а отлаживать в эмуляторе. Потому как каждый раз загружать прогу в МК надоест после 10-го раза.
Вот такая засада....

Теперь про БП, Кабум написал, что он выдает 11 вольт. Это скорей всего на холостом ходу. Узнать бы сколько под нагрузкой он выдает. Например когда выполняется файл test.s19. У нас при включении всех узлов он начинает потреблять значительно больше и если мощности не хватает, он перегружается.
Кстати, у нас весьма сильно греется стабилизатор напряжения. Вова (Кабум) у тебя так же?
kaboom
07.12.2004 | 23:21

Ст: 0 | Комм: 0
ya tut glubze zadumalsya, i, naprimer, dlya StrongARM architecturi GNU -- tollchain imeeet daze "instruction set emulator".
podderzivayutsya neskol'ko target(s):
arm-elf; arm-coff; arm-aout.
vozmozno, s hc12 i gnu ni tak vse i ploho.
seichas poprobuyu nastroit' gnu-toolchain
ns XScale/StrongARM/SA-110 zeleze. esli ponravitsya, poprobuyu hc12.

vse eze ostaetsya vopros, kak zastavit' GAS pokazivat' vremya ispolneniya v cyclah. vproche, vsegda mozno v knizechku posmotret'.. tam vremena v tablichkah napisani:)
kaboom
07.13.2004 | 01:26
Washington, DC
Ст: 35 | Комм: 24
voobsche volosi dibom vstayut ot C:)
poproboval scompilirovat':
int main(void){
int a, b;
a = 0x0f; 0xf0;
a^=b^=a;
return;
}
poluchil:
;;;-----------------------------------------
;;; Start MC68HCS12 gcc assembly output
;;; gcc compiler 3.3.3-m68hc1x-20040222
;;; Command: /mnt/hc12/gnu/lib/gcc-lib/m6811-elf/3.3.3-m68hc1x-20040222/cc1 -quiet -D__GNUC__=3 -D__GNUC_MINOR__=3
-D__GNUC_PATCHLEVEL__=3 -Dmc68hc1x -D__mc68hc1x__ -D__mc68hc1x -D__INT__=32 -Dmc6812 -DMC6812 -Dmc68hcs12 test.c -qu
iet -dumpbase test.c -m68hcs12 -auxbase test -o test.s
;;; Compiled: Mon Jul 12 17:19:48 2004
;;; (META)compiled by GNU C version 2.95.3 20010315 (release) (NetBSD nb3).
;;;-----------------------------------------
.file "test.c"
.mode mlong
.sect .text
.globl main
.type main,@function
main:
movw _.frame,2,-sp
leas -12,sp
sts _.frame
ldy _.frame
movw #15,2,y
clr 1,y
clr 0,y
ldy _.frame
ldd 6,y
ldx 4,y
ldy _.frame
eora 2,y
eorb 3,y
xgdx
eora 0,y
eorb 1,y
xgdx
ldy _.frame
std 10,y
stx 8,y
ldy _.frame
movw 10,y,6,y
movw 8,y,4,y
ldy _.frame
ldd 2,y
ldx 0,y
ldy _.frame
eora 10,y
eorb 11,y
xgdx
eora 8,y
eorb 9,y
xgdx
ldy _.frame
std 2,y
stx 0,y
leas 12,sp
movw 2,sp+,_.frame
rts
.size main, .-main
.ident "GCC: (GNU) 3.3.3-m68hc1x-20040222"


interesno, chot nekotorie operazii po manipulirovaniyu stack(a) na hc12 gcc ochen' krasivo delaet...
no v zelom vpechatlenie udruchayuschee.
kaboom
07.20.2004 | 04:26

Ст: 0 | Комм: 0
gdb na samom to dele okazalsya ochen' poleznim instrumentom.


List of target subcommands:

target async -- Use a remote computer via a serial line
target bdm12 -- Debug using Kevin Ross' BDM12 Pod
target buffalo -- Debug via the Buffalo 68HC11 monitor
target cisco -- Use a remote machine via TCP
target dbug -- Debug via the DBug 68HC12 monitor
target exec -- Use an executable file as a target
target extended-async -- Use a remote computer via a serial line
target extended-remote -- Use a remote computer via a serial line
target remote -- Use a remote computer via a serial line
target sim -- Use the compiled-in simulator
andi
07.20.2004 | 15:59
нЛЯЙ
Ст: 0 | Комм: 0
Ну про gdb мы и сами знаем :) (чего стоит только отладка многопоточного кода).
Ты лучше скажи четко, есть ли смысл писать на С для этого монстра.
И стоит ли gcc того чтоб его патчить под hc12. Хочется попроще писать всякие интерфейсные функции (ну типа там на монитор чего-нидь вывести или с клавы ввести).
Еще такой вопрос мучает. Можно ли добраться ли до функции которые осуществляют передачу данных через последовательный порт. Чтоб запустил к примеру прогу, а она тебе обратно в терминальную консоль всякие сообщения посылала?
kaboom
07.20.2004 | 21:32
Washington, DC
Ст: 35 | Комм: 24
писать на С mozno, esli hochetsya.
ya pisal na assemblere iz mazohizma i interesa. gcc bezuslovno ne samii luchshii instrument, no rabotaet.
pro monitor, tut u menya zadumchivost'.
kak monitor budem interfac(it') k hc12?...
na vskidku nichego umnogo v golovu ne prihodit.
pro SCI i SPI poischi na motorole, nine freescale.com. u menya knizechka, no zub dayu, na freescale est' AN (application note) kotorii obyasnyaet podrobno kak programmirovat' Serial Communication Interface.
Дед Маразм
07.21.2004 | 06:42
Омск
Ст: 7 | Комм: 46
Ты не понял меня немного.
Смотри, мы подключаем плату к компутеру, заводим терминал. Командуем help, нам на экран сваливается подсказка. Командуем еще что-то - нам дамп памяти и т.д.
Так вот, когда я даю команду "g 2000" почему бы исполняемой команде не обращаться к "монитору" и при помощи его функций мне на терминал не скидывать всякие сообщения? Сам же "монитор" это каким-то образом делает?
В любом случае при выполнении моей команды терминал ничем не занят.
kaboom
07.23.2004 | 00:11
Washington, DC
Ст: 35 | Комм: 24
ok. pochitai AN1280 i budet schast'e vam. AN == application note.

v chastnosti napisano kak ispol'zovat' vstroennie funczii D-Bug12 typa printf().
kaboom
07.23.2004 | 01:30
Washington, DC
Ст: 35 | Комм: 24
podskazochka: addressa v AN1280 otlichayutsya ot vashih.
esli ne naidete svoi addressa, vot tablichka:
far main() Start of D-Bug12 $EE80

getchar() Get a character from SCI0 or SCI1 $EE84

putchar() Send a character out SCI0 or SCI1 $EE86

printf() Formatted Output - Translates binary values to characters $EE88

far GetCmdLine() Obtain a line of input from the user $EE8A

far sscanhex() Convert an ASCII hexadecimal string to a binary integer $EE8E

isxdigit() Checks for membership in the set [0..9, a..f, A..F] $EE92

toupper() Converts lower case characters to upper case $EE94

isalpha() Checks for membership in the set [a..z, A..Z] $EE96

strlen() Returns the length of a null terminated string $EE98

strcpy() Copies a null terminated string $EE9A

far out2hex() Displays 8-bit number as 2 ASCII hex characters $EE9C

far out4hex() Displays 16-bit number as 4 ASCII hex characters $EEA0

SetUserVector() Setup user interrupt service routine $EEA4

far WriteEEByte() Write a data byte to on-chip EEPROM $EEA6

far EraseEE() Bulk erase on-chip EEPROM $EEAA

far ReadMem() Read data from the M68HC12 memory map $EEAE

far WriteMem() Write data to the M68HC12 memory map $EEB2
Дед Маразм
07.23.2004 | 06:05
Омск
Ст: 7 | Комм: 46
Замечатально.
Я этот документ читал, но дойдя до таблицы и увидев вызовы в стиле С, слегка разочаровался и читать дальше не стал.
А где-нибудь попадались исходники этих функций? Или вообще исходники всего ПО что там прошито? Интересно посмотреть.
kaboom
07.25.2004 | 22:30
Washington, DC
Ст: 35 | Комм: 24
muziki, tut takaya vesch' tvoritsya:
pitalsya zavesti ECT (Enhanced Capture Timer). Taki tam est' registr TSCR1 po addressu $0x46. v etom TSCR1 est' bit 7 (poslednii sprava) TEN. t.e. Timer Enable.
problema vot kakaya:
v EVP mode zalivayu code, gde

bset $0x46, #%10000000
...
ili
blcr $0x46, #%01111111
...
ili
movb #$0x80, $0x46
...
ili
ldaa #$0x80
staa $0x46

chto voobschem-to odno i toze.

vidimoost' takova, chto bit ne stavitsya. biti 6,5 ili 4 -- legko. a 7 --net. esli v D-Bug(e) ruchkami postavit' $0x80 v $0x46, vse chudesno rabotaet. counter begaet po addressu $0x44:$0x45.

teper' soobstvenno eze paradox:
esli sdelat' tak:

movb #$0x80, $0x46
; edinichka v 7 bite @ $0x46

ldaa #$0x80
; registr A imeet $0x80

cmpa $0x46
; sravnim A s $0x46

bne ta_Da
; esli ne ravni idem na ta_Da

....

ta_Da: swi
; ta_Da opredelena prosto kak nemerennii non-maskable interrupt

to poluchaetsya, chto branch nikogda ne zovetsya. t.e. esli verit' code(u), to v $0x46 stoit imenno $0x80. v debuggere etogo konechno ze ne vidno. esli postavit' breakpoint v lyubom meste, to $0x46 imeet zeleznii 0 v 7 bite.

dumal na PIM i port T. zavel PIM. ne ochen' pomogaet.

nuzni idei. s pyatnizi boryus'.

kaboom
07.26.2004 | 00:04
Washington, DC
Ст: 35 | Комм: 24
nda... ECT rabotaet. ya tam ISR napisal, chtob lampochkoi morgal. lampochka svetit.
vremya bezit.
vopros pravda ostaetsya, pochemu ze debuzit' eto delo nikak ne udaetsya.
kaboom
07.26.2004 | 22:43
Washington, DC
Ст: 35 | Комм: 24
А где-нибудь попадались исходники этих функций? Или вообще исходники всего ПО что там прошито? Интересно посмотреть.




tam lezat s-rec(i). + BootDP256.Asm.
C-code skorei vsego naiti ne udastasya. Vprochem, ne uveren. A vot s dissasemblit' s-rec -- tol miloe delo.
Vprochem, nikto ne meshaet dissasemblit' D-Bug12 is pod samogo sebya. T.e. pryamo v komandnoi stroke. Da i sam BootDP256.Asm pochitat' interesno.
Дед Маразм
07.27.2004 | 06:53
Омск
Ст: 7 | Комм: 46
Спасибо, но опять немного не то. Этот бутлоадер я уже изучил (всмысле отметил про себя). Мне интересно та прога которая отвечает за терминал. Вот ее я не могу найтить. Исходник файла Ep9s12_mon.s19
Дед Маразм
07.27.2004 | 07:27
Омск
Ст: 7 | Комм: 46
Попробывал загрузить монитор в симулятор (WinIDE DE), а он зараза, не хочет грузить говорит: Map file does not exist. Вот теперь думаю что за файла ему не хватает.
А при попытке загрузки монитора говорит:
Warning: download to non-existent memory.
Map file does not exist.
Симуляторы от Cosmic вообще демки, не позволяют загружать файлы.
kaboom
07.27.2004 | 22:20
Washington, DC
Ст: 35 | Комм: 24
starik, ne muchaisya tak:)
m6811-elf-objdump -D -m m68hcs12 Ep9s1`_mon.s19

vse chudesno dissasemblit.
kaboom
07.27.2004 | 22:23
Washington, DC
Ст: 35 | Комм: 24
nu estestvenno s pamyatyu tam bez pol-litri ne razobrat'sya.
Дед Маразм
07.28.2004 | 08:55
Омск
Ст: 7 | Комм: 46
Так, стоп. Давай поподробней про инструменты. Что есть m6811, под какой ОС работает.
И можно небольшой список инструментов которыми пользуешься? Что и для чего.
kaboom
07.28.2004 | 20:54
Washington, DC
Ст: 35 | Комм: 24
m6811-elf-* eto imena binutils + toolchain ot gnu dlya hc11/hc12/hcs12.
v chastnosti m6811-elf-objdump eto tot ze objdump, chto x86/linux/elf, no dlya hc12.
...
список инструментов которыми пользуешься
...
kogda chem. poslednee vremya vse bol'she gnu. pravda prihoditsya pisat' samomu ld-scripti. do etogo, poproboval vse chto prislal na CD + bila licensiya na CodeWarrior.
kaboom
08.01.2004 | 23:43
Washington, DC
Ст: 35 | Комм: 24
raz foruma u nas net:)
obschaemsya zerez blog.

http://linuxportal.ru/novost.php/1177_0_2_20_C/

est' ideya napisat' ma hc12 assemblere.
hc12 imeet vstroennie instruczii table-lookup.

chast' uze napisal.
vizivayu na duel':")_
chei code budet men'she.

San АНДРЕЕВ
08.02.2004 | 22:03
Омск
Ст: 539 | Комм: 143
Дед завтра в отпуск на две недели укатывает. :)))
kaboom
08.02.2004 | 22:09
Washington, DC
Ст: 35 | Комм: 24
nashel opisanie kak elf perekatat' v s19.
dlya vashei/nashei plati...




...
отпуск на две недели укатывает. :)))
yasno...
nu uspehov emu.

P.S. s pochinkoi forumov pomosch' nuzna?

Ваш комментарий:

имя Email
Географическое положение Домашняя страница
Показывать email Запомнить пароль
Уведомлять о новых ответах на это сообщение?

Предыдущая запись Следующая запись

©"Linuxportal.Ru". Материалы сайта можно
использовать свободно при условии
сохранения этой свободы при дальнейшем
распространении, если явно не указано иное

Дизайн и программирование:


Powered by pMachine Pro 2.3

Поставьте
нашу кнопку:
Получить код кнопки
Linux Portal.ru ::: Линукс Портал.ру
Наш партнер: