|
Обработка "своих" команд |
|
|
|
Mar 12 2012, 11:13
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-01-12
Пользователь №: 69 858

|
Если исходников нету, то придется всё с "0" делать.... ибо дизассемблирование - дело не благодарное и заморочливое....
|
|
|
|
|
Mar 21 2012, 04:55
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(d7d1cd @ Mar 20 2012, 18:10)  сохранил в файле по порядку значения всех байтов из микроконтроллера начиная с адреса 0х0000 до адреса 0xFFFF. Программная флешь начинается с 0x1100. Насчет того, откуда прыгать - решайте сами. Но в случае, если обмен идет через UART, логично было бы начать с него. В случае, если обраьотка производится непосредственно в прерывании, вам останется только вставить свою затычку. А если асинхронно поллингом в мэйне, то будете иметь адрес буфера обмена, и потом уже в основной программе надо искать обращение к этому буферу.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Mar 21 2012, 15:03
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата Программная флешь начинается с 0x1100. Насчет того, откуда прыгать - решайте сами. Но в случае, если обмен идет через UART, логично было бы начать с него. В случае, если обраьотка производится непосредственно в прерывании, вам останется только вставить свою затычку. А если асинхронно поллингом в мэйне, то будете иметь адрес буфера обмена, и потом уже в основной программе надо искать обращение к этому буферу. Дизассемблить прошивку получилось. Подскажите, как узнать адрес обработчика прерывания UART?
|
|
|
|
|
Mar 22 2012, 08:30
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-01-12
Пользователь №: 69 858

|
Пользуюсь IARом ... Открываем файл "msp430x14x.h" и в самом конце видим : Код /************************************************************ * Interrupt Vectors (offset from 0xFFE0) ************************************************************/
#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */ #define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */ #define USART1RX_VECTOR (3 * 2u) /* 0xFFE6 USART 1 Receive */ #define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */ #define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */ #define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ #define ADC12_VECTOR (7 * 2u) /* 0xFFEE ADC */ #define USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */ #define USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */ #define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ #define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */ #define TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */ #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ #define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] *//
Сообщение отредактировал hash20 - Mar 22 2012, 08:31
|
|
|
|
|
Mar 22 2012, 18:10
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(d7d1cd @ Mar 22 2012, 20:46)  По этому адресу находится слово 0х0012. Скорее всего не 0x0012, а 0x1200  У MSP430 порядок расположения байтов в памяти little-endian.
|
|
|
|
|
Mar 26 2012, 14:59
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-01-12
Пользователь №: 69 858

|
А ещё например в режиме SPI: при системе контроллер(мастер) - устройство(слэйв) врят-ли вы когда нибудь дождетесь прерывания по приему  )) поэтому для того чо-бы считать байт даных со слейва мы опраляем на него 0xff или 0x00 (обычно в даташите на слэйв устройство этот момент описывают) и соответвственно при прерывнии по TX в RXBUF будем наблюдать считанный из слэйва байт.
|
|
|
|
|
Mar 27 2012, 02:39
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(hash20 @ Mar 26 2012, 18:59)  А ещё например в режиме SPI: при системе контроллер(мастер) - устройство(слэйв) врят-ли вы когда нибудь дождетесь прерывания по приему  )) поэтому для того чо-бы считать байт даных со слейва мы опраляем на него 0xff или 0x00 (обычно в даташите на слэйв устройство этот момент описывают) и соответвственно при прерывнии по TX в RXBUF будем наблюдать считанный из слэйва байт. А что значит 0x00 или 0xff? Это адрес запрашиваемого в слейве байта?
|
|
|
|
|
Mar 28 2012, 10:27
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-01-12
Пользователь №: 69 858

|
Цитата(d7d1cd @ Mar 27 2012, 06:39)  А что значит 0x00 или 0xff? Это адрес запрашиваемого в слейве байта? Записью байта в TXBUF ты запускаеш сдвиговый регистр, и выдачу 8-ми синхроимпульсов так вот слэйву будет похер какие данные ему приходят (!есть правда и хитрожопые SPI девайсы!) если он хочет что-либо выдать, ему нужны эти эти самые 8 синхроимпульсов блягодаря которым он запихнет в твой RXBUF свой байт! А адрес слейву перед этим выдается... Таким образом при работе с 2-мя слэйвами вполне реально организовать одновременно вычитку одного слейва и запись другого !!! Главное эхо в настройках SPI модуля не включать  )))
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|