Например TDA7294

Форум РадиоКот • Просмотр темы - Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC33)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 23:31:17

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 90 ]    , 2, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вт мар 29, 2022 09:02:37 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
:) Я с этим вопросом три недели промучился полтора года назад.
1. Конфигурацию в АСМ проекте лучше делать отдельным С-файлом. Во первых, читабельнее. Во вторых, исчезнут варнинги. В третьих, генерация этого файла легко делается в окне Configuration bits - там есть кнопка.
2. Применение AIVT делает использование Loadables-проекта для загрузчика кривым. Поэтому лучше загрузчик и основной код размещать в едином проекте, выделяя их в отдельные секции.
3. Для генерации AIVT в общем случае нужно правильно рассчитать лимитер адреса бут-сегмента кода в конфиге. Ну и включить бут сегмент и альтернативную таблицу:
Код:
// FSEC
........
#pragma config BSEN = ON
........
#pragma config AIVTDIS = ON

// FBSLIM
#pragma config BSLIM = 0x1FFA
........

В данном примере размер Boot-сегмента будет 5 страниц стирания (длина одной - 0x800) - то есть IVT и Boot-код займут адреса 0x00000...0x01FFE, а AIVT разместится с адреса 0x02000. Основной код будет с адреса 0x02800.
В этой ситуации, как вы понимаете, IVT работает в загрузчике, а AIVT обслуживает основной код.
Лимитер расчитывается как 0x1FFF минус количество страниц бут-сегмента (0x1FFF-0x5=0x1FFA)
Компоновка кода выглядит при этом так:

Код:
.include "p33CH512MP208.inc"
........
    .section bufNear, near
........
    .section bufX, address (0x2000)
........
    .section bufY, address (0x7000)
........
    .section bufY_EDS, address (0x8000)
........
.section *, code, boot

.global __reset
.global __OscillatorFail
.global __AddressError
.global __HardTrapError
.global __StackError
.global __MathError
.global __OscillatorFail
.global __SoftTrapError
.global __T1Interrupt
........
__reset:
   mov         #__SP_init, W15
   mov         #__SPLIM_init, W0
   mov         W0, SPLIM
   nop
   bra         MainBoot
........
........
........
.section *, code

.global __reset
.global __AltAddressError
.global __AltHardTrapError
.global __AltStackError
.global __AltMathError
.global __AltDMACError
.global __AltSoftTrapError
.global __AltT1Interrupt
........
Application:
   bra         Main
........
........
 .end


ЗЫ. В догон.
Код старта, стопа и загрузки Slave-ядра размещайте сразу после
Application:
bra Main
то есть до остального кода основной программы. Иначе возникают странности с длиной имиджа слейв-кода и слейв ядро потом не стартует.
У меня в проекте используется три перезагружаемых имиджа слейва и после сборки кода карта памяти выглядит так:
Код:
section                    address   length (PC units)   length (bytes) (dec)
-------                    -------   ----------   ----------
AM-EAS-CH-v0-1.s.scn1        0x800              0x108a          0x18cf  (6351)
.aivt._AltAddressError      0x2006                 0x2             0x3  (3)
.aivt._AltHardTrapError     0x2008                 0x2             0x3  (3)
.aivt._AltStackError        0x200a                 0x2             0x3  (3)
.aivt._AltMathError         0x200c                 0x2             0x3  (3)
.aivt._AltSoftTrapError     0x2010                 0x2             0x3  (3)
.aivt._AltT1Interrupt       0x2016                 0x2             0x3  (3)
.aivt._AltDMA1Interrupt     0x2024                 0x2             0x3  (3)
.aivt._AltU1RXInterrupt     0x202a                 0x2             0x3  (3)
.aivt._AltINT1Interrupt     0x2032                 0x2             0x3  (3)
.aivt._AltDMA2Interrupt     0x2038                 0x2             0x3  (3)
.aivt._AltINT2Interrupt     0x203c                 0x2             0x3  (3)
.aivt._AltDMA3Interrupt     0x203e                 0x2             0x3  (3)
.aivt._AltCCP2Interrupt     0x2042                 0x2             0x3  (3)
.aivt._AltU2RXInterrupt     0x204a                 0x2             0x3  (3)
.aivt._AltU2TXInterrupt     0x204c                 0x2             0x3  (3)
.aivt._AltCCP3Interrupt     0x205a                 0x2             0x3  (3)
.aivt._AltPTG0Interrupt     0x20b8                 0x2             0x3  (3)
.aivt._AltPTG1Interrupt     0x20ba                 0x2             0x3  (3)
.aivt._AltPTG2Interrupt     0x20bc                 0x2             0x3  (3)
.aivt._AltPTG3Interrupt     0x20be                 0x2             0x3  (3)
.aivt._AltMSIS1Interrupt    0x2116                 0x2             0x3  (3)
.aivt._AltMSIAInterrupt     0x2118                 0x2             0x3  (3)
.aivt._AltMSIBInterrupt     0x211a                 0x2             0x3  (3)
.aivt._AltMSICInterrupt     0x211c                 0x2             0x3  (3)
.aivt._AltMSIDInterrupt     0x211e                 0x2             0x3  (3)
.aivt._AltCCP8Interrupt     0x2144                 0x2             0x3  (3)
.text                       0x2800                 0x2             0x3  (3)
AM-EAS-CH-v0-1.s.scn2       0x2802              0x283e          0x3c5d  (15453)
SLAV_image                  0x5040              0x104a          0x186f  (6255)
SLAV_TUNE_image             0x608a               0x772           0xb2b  (2859)
SLAV_SYNC_image             0x67fc               0x6b2           0xa0b  (2571)

Первым идет бут, потом альтернативная таблица, потом основной код и далее три имиджа.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вт мар 29, 2022 12:50:38 
Родился

Зарегистрирован: Пт мар 25, 2022 10:14:04
Сообщений: 2
Рейтинг сообщения: 0
КРАМ, спасибо огромное, чтобы я без Вас делал, хотел уже ломать подкидную доску и уходить из большого спорта.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Ср дек 13, 2023 01:22:10 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
Уважаемый КРАМ,

подскажите, пожалуйста, возможно ли запустить отладку PIC24F с помощью Pickit3 при отсутствии исходника (есть только hex-файл)?

Заранее благодарю за ответ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Ср дек 13, 2023 08:23:47 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Исходник требуется.
Хотя бы ASM.
Получить его можно из хекса с помощью дизассемблера.
Нужно понимать, что дебаг во всех ПИКах происходит через управление битом отладки в конфиге и иногда с перемещением кода и данных, когда в конкретном чипе задействуются ресурсы памяти самого чипа.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Ср дек 13, 2023 15:09:28 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
Исходник требуется.
Хотя бы ASM.
Получить его можно из хекса с помощью дизассемблера.

любым или каким-то конкретным дизассемблером? в каком виде должен быть этот исходник (он обязательно должен ассемблироваться или нужен только для отображения)?
Нужно понимать, что дебаг во всех ПИКах происходит через управление битом отладки в конфиге и иногда с перемещением кода и данных, когда в конкретном чипе задействуются ресурсы памяти самого чипа.

правильно ли я понял, что так, как у АРМ-ов можно отладчиком подключиться к микроконтроллеру и шагать/останавливать с ПИК24 не получится? существует ли для ПИК24 gdb или какое-то подобие?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Ср дек 13, 2023 17:28:47 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
любым или каким-то конкретным дизассемблером?

Что значит "любым"? Дизассемблер должен быть под 16-разрядную платформу Микрочипа (PIC24/dsPIC33).
в каком виде должен быть этот исходник

В виде исходника на ассемблере ASM16 (который является частью пакета XC16).
как у АРМ-ов можно отладчиком подключиться к микроконтроллеру и шагать/останавливать с ПИК24 не получится? существует ли для ПИК24 gdb или какое-то подобие?

Отладчик через ICSP-интерфейс не совместим с JTAG. Но часть 16-разрядных МК Микрочипа имеют и JTAG. Однако я никогда его не использовал.
ICSP-отладчик позволяет шагать по коду, останавливаться на брейкпойнтах или по требованию и т.д. Наблюдать значения регистров и переменных во время исполнения в этом отладчике невозможно. Только после останова. Выход из этого отладчика потребует для штатной работы кода перепрошить МК. В отличии от JTAG, где после выхода код запускается в обычном режиме.
Возможно есть какой то режим работы дебага, при котором исходник не требуется, но штатный вход в отладку в MPLABX транслирует исходник, перепрошивает МК и только после этого входит в дебаг.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Сб дек 16, 2023 03:26:13 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
В виде исходника на ассемблере ASM16 (который является частью пакета XC16).

помимо XC16, частью которого является ассемблер ASM16 встречаю упоминание MPLAB C30 и ASM30 -- последние актуальны или нет?
Отладчик через ICSP-интерфейс не совместим с JTAG. Но часть 16-разрядных МК Микрочипа имеют и JTAG. Однако я никогда его не использовал.
ICSP-отладчик позволяет шагать по коду, останавливаться на брейкпойнтах или по требованию и т.д. Наблюдать значения регистров и переменных во время исполнения в этом отладчике невозможно. Только после останова. Выход из этого отладчика потребует для штатной работы кода перепрошить МК. В отличии от JTAG, где после выхода код запускается в обычном режиме.

правильно ли я понимаю, что для отладки по JTAG не годится Pickit3 и потребуется ICD3 ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Сб дек 16, 2023 07:11:03 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Нет, не правильно. Для отладки по JTAG нужен минимум PICkit4.
Ну и необходимо, чтобы сам чип имел такую возможность не исключенную в эррате, довольно много 16-битных МК Микрочипа имеют такое исключение.
По поводу С30/ASM30/MPLAB 8. Я не помню, чтобы в восьмерке поддерживались инструменты JTAG.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 16:37:08 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
9. Локальный стек (фрейм) позволяет при входе в вызов (call или прерывание) открывать указатели на локальные переменные. Эти указатели размещены сразу за вершиной стека. Указатель локального стека размещен в W14. При входе в вызов локальный стек объявляется командой lnk #N . При выходе из вызова локальный стек закрывается командой ulnk . Это Си ориентированный механизм определения локальных переменных.

можете ли для лучшего понимания привести реальный пример такого использования с вашими комментариями (с учетом предыдущего п.8 )?

Заранее благодарю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 18:35:50 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Код:
__reset:
   mov      #__SP_init, W15
   mov      #__SPLIM_init, W0
   mov      W0, SPLIM
   nop
   call      MainInit
   blah-blah-blah....


MainInit:
   lnk      #4
   mov      #15936, W0
   mov      W0, [W14]   ; первая локальная переменная равна 15936
   clr      [W14+2]         ; вторая локальная переменная равна 0
   blah-blah-blah....


   ulnk
   return

Предположим, что указатель стека изначально инициализирован значением 0x1000 (это определяется линкером), то есть W15=0x1000 (#__SP_init это #0x1000).
Тогда при вызове MainInit указатель стека получит значение W15=0x1004, а в ОЗУ по адресу 0x1000:0x1002 будет адрес возврата из MainInit.
После выполнения инструкции lnk #4 указатель стека станет равен W15=0x1008, а указатель локального стека W14=0x1004.
Таким образом, открылся фрейм на две локальных 16-битных переменных в стеке к которым можно получить доступ через указатель [W14] и [W14+2], то есть по адресам 0x1004 и 0x1006.
Перед выходом из MainInit фрейм закрывается инструкцией ulnk и W15 получает значение 0x1004 как было перед инструкцией lnk #4, а после возврата в основное тело программы W15=0x1000.


Последний раз редактировалось КРАМ Вс дек 17, 2023 18:47:48, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 18:43:56 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
пытаюсь разобраться с подпрограммой программной задержки и пока не совсем понял как правильно вычислить в мксек длительность одного цикла (применительно к исполнению инструкций, приведенных в даташите) в зависимости от частоты кварца основного генератора (например, 6МГц) -- подскажите, пожалуйста, применительно к PIC24FJ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 18:53:45 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
как правильно вычислить в мксек длительность одного цикла

Длительность одного машинного цикла в любом МК 16-битной платформы Микрочипа равна двум периодам частоты осциллятора. То есть если у вас частота равна 6МГц, то длительность одноцикловой инструкции (например nop или mov W0, W1) составит 0,333(3) мкс.
Но если включен PLL, то частота осциллятора не равна частоте кварца.
Максимальная частота осциллятора для PIC24FJ составляет 32МГц, что соответствует производительности 16MIPS или циклу 62,5 нс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 19:13:05 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
Длительность одного машинного цикла в любом МК 16-битной платформы Микрочипа равна двум периодам частоты осциллятора.
Но если включен PLL, то частота осциллятора не равна частоте кварца.
Максимальная частота осциллятора для PIC24FJ составляет 32МГц

насколько я понял из даташита для ПИК24 умножитель только 4, т.е. при максимальной частоте 32МГц получается кварц должен быть на 8МГц хотя по даташиту допускается 10МГц (в моем случае получается при 6МГц-ом кварце частота будет 24МГц и ее нужно разделить на 2 для получения одного цикла исполнения инструкций)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 19:23:35 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
насколько я понял из даташита для ПИК24

Для начала назовите конкретную модель МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 19:25:25 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
Для начала назовите конкретную модель МК.

24FJ256GA110


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 19:28:32 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Частота кварца при выборе типа осциллятора HS составляет 10...32МГц.
Читайте даташит.
То есть вы можете и без PLL получить максимальную частоту тактирования. Естественно, что и с PLL вы не можете ее превысить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Вс дек 17, 2023 22:50:10 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
...инсталлировать ПОСЛЕ установки среды текущую версию компилятора XC16 (1.36). При инсталляции заявляем о желании free версии...

подскажите, пожалуйста, по каким критериям Вы выбрали ХС16 при наличии нескольких альтернативных компиляторов Си? можно ли где-то найти описание всех библиотечных функций компилятора?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Пн дек 18, 2023 04:39:58 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
А я и не использую Си компилятор на этой платформе. ХС16 мне нужен лишь для того, чтобы использовать ASM16.
На Си я пишу только для ARM и есть один серийный проект для PIC18Q43 на ХС8.
Поскольку 16-битные Микрочипы имеют очень приятную архитектуру и систему команд, а я не программист, а радиоинженер, то нахожу бессмысленным и неэффективным использовать в проектах с этими МК Си-компилятор. Ну а библиотеки я не использую вообще. Даже на ARM.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Пн дек 18, 2023 21:43:11 
Первый раз сказал Мяу!

Зарегистрирован: Ср дек 13, 2023 01:03:04
Сообщений: 21
Рейтинг сообщения: 0
подскажите, пожалуйста, структуру выходного файла: после ассемблирования получается hex-файл. Конвертирую его в bin и вместо ожидаемых 24-битных слов наблюдаю 32-битные с одним 00-м байтом -- так и должно быть? например, пытаюсь понять порядок следования байтов и битов для анализа Конфигурационных слов (CW1, CW2, CW3):
0 1 2 3 4 5 6 7 8 9 A B C D E F
000557А0: 00 00 FF 00 FF FF FF 00 7E F2 FF 00 F9 3E FF 00


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
СообщениеДобавлено: Пн дек 18, 2023 21:58:26 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23937
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
В хексе тоже самое. Стандартный хекс имеет 32-битную упаковку. Поэтому каждый четвертый байт будет нулевым.
Вы вообще в курсе относительно формата хекса?
Вы знаете какие строки являются адресным смещением, а какие собственно код?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 90 ]    , 2, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y