Перейти к содержанию
    

подскажите по функциям C167cs мк

01.ROM:00000948 sub_948:                               ; CODE XREF: sub_8E8+4Ap
02.ROM:00000948                                        ; ROM:00000A22p
03.ROM:00000948                 cmp     r9, #0Fh
04.ROM:0000094C                 jmpr    cc_C, loc_95E  ; переход если 10 -15? произвольно выбрал 10.
05.ROM:0000094E                 add     r9, #1
06.ROM:00000950                 bmov    P4_4, r9.0     ; CAN линия
07.ROM:00000954                 bmov    P4_7, r9.1     ; CAN линия
08.ROM:00000958                 mov     r9, #0Fh       ; зачем здесь запись p5.15?
09.ROM:0000095A                 calla   cc_UC, sub_5B4 ; пауза
10.ROM:0000095E
11.ROM:0000095E loc_95E:                               ; CODE XREF: sub_948+4j
12.ROM:0000095E                 or      r9, #0B000h    ; логическое сложение. и какой тут будет порт? явно не с 0 по 15
13.ROM:00000962                 mov     ADCON, r9      ; записываем выбраный порт
14.ROM:00000966                 bset    ADST           ; включаем АЦП
15.ROM:00000968
16.ROM:00000968 loc_968:                               ; CODE XREF: sub_948:loc_968j
17.ROM:00000968                 jb      ADBSY, loc_968 ; время преобразоания 0=готово.Переход если бит установлен
18.ROM:0000096C                 jbc     word_FDD0.4, loc_97C; если бит=1 то Переход и сброс бита
19.ROM:00000970                 mov     r9, ADDAT      ; результат преобразования.после считки результата ADBSY=1
20.ROM:00000974                 and     r9, #3FFh      ; логическое умножение. можно заменить на mov.
21.ROM:00000978
22.ROM:00000978 loc_978:                               ; CODE XREF: sub_948+36j
23.ROM:00000978                 mov     [r10], r9
24.ROM:0000097A                 ret
25.ROM:0000097C; ---------------------------------------------------------------------------
26.ROM:0000097C
27.ROM:0000097C loc_97C:                               ; CODE XREF: sub_948+24j
28.ROM:0000097C                 mov     r9, #0
29.ROM:0000097E                 jmpr    cc_UC, loc_978

всем здрасте,

коменты я правильно написал?

что делает эта функция. обьясните пожалуйста. судя по команде or в ADCON точно не порт пишется.

cmp r9, #0Fh

jmpr cc_C, loc_95E при каких условиях прыжок?

or r9, #0B000h что в r9?

and r9, #3FFh что в r9?

что делают эти команды?

описания команд я брал с www.kaskod.ru

но не все досупно понятно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Моё предположение.

В первом куске кода (строки 3-9) проверяется будущий номер канала АЦП, и если он >=15, то на линии P4_4, P4_7 выводится какое-то значение, связанное с двумя младшими битами R9 - после увеличения их на 1. Зачем это, без схемы устройства сказать трудно.

А если номер канала <15, то переход к строкам 11-14, где значение в R9 дополняется битами, задающими скорость оцифровки АЦП (команда OR R9,#0B000h), это значение загружается в ADCON, и запускается конверсия.

Дальше вроде всё ясно.

 

Я нашёл даташит на C167CR от Infineon, и если он правильный, то вот формат регистра ADCON (картинка).

Например, если в R9 было значение #0007h, то после OR R9,#0B000h - там будет значение #0B007h. Вот это #B в старшей тетраде - задаст скорость выборки и конверсии, а 7 - будет содержать номер канала.

 

cmp r9, #0Fh

jmpr cc_C, loc_95E при каких условиях прыжок?

прыжок будет, если в R9 значение меньше #0Fh (то есть от 0 до Eh)

or r9, #0B000h что в r9?

В R9 будет #0B00xh, где х - номер канала, заданный в R9 изначально.

and r9, #3FFh что в r9?

В R9 будет результат конверсии, считанный из ADDAT, в котором старше 6 бит обнулены, а то что было "накрыто" маской #3FFh - осталось неизменным. Так "чистят" число от всяких посторонних данных, которые не нужны. В данном случае не нужны были старшие 6 бит.

post-45309-1498928903_thumb.png

Изменено пользователем controller_m30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо все четко расписал. читаю вникаю.

вот функция паузы,забыл добавить.

sub_5B4:                               ; CODE XREF: sub_948+12p
02.ROM:000005B4                 mov     r3, #7Ah; 'z'
03.ROM:000005B8
04.ROM:000005B8 loc_5B8:                               ; CODE XREF: sub_5B4+6j
05.ROM:000005B8                 cmpd1   r3, #0
06.ROM:000005BA                 jmpr    cc_NZ, loc_5B8
07.ROM:000005BC                 ret

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот такое у меня описание флагов с сайта, и как понять сс_С что за перенос или что за заем? мож кто обьяснит.

http://www.kaskod.ru/filemanager/download/23157

http://www.kaskod.ru/article/10scom/

post-97905-1498945373_thumb.png

post-97905-1498945394_thumb.png

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

перенос или заем - смотрите на то, как используют этот флаг инструкции сложения/вычитания с использование переноса/займа от предыдущей операции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ROM:000015C4                 mov     r1, #5B5Ch
ROM:000015C8                 mov     r2, #0E184h
ROM:000015CC
ROM:000015CC loc_15CC:                              ; CODE XREF: sub_15AC+2Aj
ROM:000015CC                 movb    rh3, #0        ; обнуляем старш байт
ROM:000015CE                 movb    rl3, [r1+]     ; сдесь как прибавляется?
ROM:000015D0                 callr   sub_15DA       ; считка портов 1....15
ROM:000015D2                 cmpi2   r2, #0E1A4h    ; сравниваем результат
ROM:000015D6                 jmpr    cc_C, loc_15CC ;  прыжок если r2<#0E1A4h
ROM:000015D8                 ret

 

собственно вопросик в коменте. подскажите

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ROM:000015C4                 mov     r1, #5B5Ch
...................
ROM:000015CE                 movb    rl3, [r1+]    ; сдесь как прибавляется?
......................

В RL3 будет загружен байт из ячейки памяти, адрес которой находится в регистре R1, после чего значение в R1 будет увеличено на 1.

 

Поскольку эта команда будет вызвана в цикле несколько раз, то сначала считается байт из ячейки по адресу #5B5Ch, при следующем витке цикла из #5B5Dh, потом из #5B5Еh, и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

4eb8.gif

 

4eb8.gif

 

ROM:000008F4 movb rl0, [r4+4EB8h] ; здесь должен быть порт ацп p5.0...p5.15

В r4 находится адресс на данные но там FFFFFF

видать это оперативка которая заполняется при работе проца

где эти данные искать как они туда попадают?

 

по второй фотке

seg012:015C calls 11h, 4EB8h ; 114EB8h

вот таких вызовов более 100 что к чему не пойму.

ложу бинарник флеши мож кто глянет. мож у кого дизасемблер другой.

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

собственно не важно какой порт будет в r4 ,сдесь идет проверка порта на соответствие напряжения.

а вот возможное решение вопроса т.е. отключение проверки порта 5.15

ROM:00000948 sub_948:                               ; CODE XREF: sub_8E8+4Ap
ROM:00000948                                        ; ROM:00000A22p
ROM:00000948                 cmp     r9, #0Fh
ROM:0000094C                 jmpr    cc_C, loc_95E  ; прыжок, если в R9 значение меньше #0Fh (то есть от 0 до Eh)
ROM:0000094E                 add     r9, #1
ROM:00000950                 bmov    P4_4, r9.0     ; CAN линия при 0Fh=0, при 10h=1
ROM:00000954                 bmov    P4_7, r9.1     ; CAN линия 0
ROM:00000958                 mov     r9, #0Fh       ; p5.15 вместо 15 порта ставим например 13 !!!
ROM:0000095A                 calla   cc_UC, sub_5B4 ; пауза без r9
ROM:0000095E
ROM:0000095E loc_95E:                               ; CODE XREF: sub_948+4j
ROM:0000095E                 or      r9, #0B000h    ; #0B скорость преобразования+порт r9 p5.15=#0B00Fh
ROM:00000962                 mov     ADCON, r9      ; записываем скорость и порт #0B00Fh
ROM:00000966                 bset    ADST           ; включаем АЦП
ROM:00000968
ROM:00000968 loc_968:                               ; CODE XREF: sub_948:loc_968j
ROM:00000968                 jb      ADBSY, loc_968 ; время преобразоания 0=готово.Переход если бит установлен
ROM:0000096C                 jbc     word_FDD0.4, loc_97C; если бит=1 то Переход и сброс бита
ROM:00000970                 mov     r9, ADDAT      ; старш 4бит=p5.15 ост 12бит=результат.после считки результата ADBSY=1
ROM:00000974                 and     r9, #3FFh      ; в r9=12бит результат умн битно на 3FF.
ROM:00000978
ROM:00000978 loc_978:                               ; CODE XREF: sub_948+36j
ROM:00000978                 mov     [r10], r9
ROM:0000097A                 ret

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чип SAK-C167CS-LM

4DC4h 4D9Eh

по этим адресам лежит dword_4830: dd 0FFFFFFFFh, 0FFFFFFFFh, 0FFFFFFFFh, 0FFFFFFFFh, 0FFFFFFFFh

подскажите как сюда попадают данные?

пробовал по разному искать но опыто мало.

или где найти специалиста по реверсу прошивок?

бинарник прошивки прилагаю

post-97905-1500210916_thumb.png

29F200_380.zip

248.gif

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подправил листинг ида, смотрите в аттаче.

 

 

 

edit2versiya.gif

 

IDA_listing.zip

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы, у Вас ВСЁ неправильно.

 

Для начала надо б понять, на какие адреса приходится эта внешняя память. В том, что выложено, она волшебным образом накладывается на SRAM,SFR,... - в реальной жизни так не бывает.

Также у этих C166 есть различные режимы адресации. Почитайте обязательно про регистры DPP0..DPP3.

 

И сами данные - оно программатором прямо с флешки считано, или какой-то утилитой? Утилиты для чтения ECU, на мой дилетантский взгляд, могут отдельно выдавать область с настройками, и отдельно - с кодом (хотя "в железе" всё это хранится рядом). Так что вместо FF'ов в реальности могут быть данные.

 

И про IDA почитать стоит. Она не особо умная, много чего надо делать руками (или скриптами).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И сами данные - оно программатором прямо с флешки считано, или какой-то утилитой?

все с флэши 29F200, програмка чип лоадер сливает всю флэш в буте.

по адресам должны лежать данные для сравнения результатов проверки портов ацп, берутся они с тех самых настроек с адреса 8080 по FFFF

в сегменте 011 я раскрыл функции вот там есть ADCON возможно там есть указатель на данные для сравнения

 

 

seg011.gif

 

Изменено пользователем tritri

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

D0_E2.gif

 

сдесь опять вместо данных фки.

подскажите как совместить данные с флэши с памятью.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...