Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC33)
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4519147#p4519147"]В хексе тоже самое. Стандартный хекс имеет 32-битную упаковку. Поэтому каждый четвертый байт будет нулевым.[/uquote]
а каков порядок битов в байтах и каков порядок самих байтов?
а каков порядок битов в байтах и каков порядок самих байтов?
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Порядок байт Little endian
Порядок бит Big endian
Порядок бит Big endian
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=3542816#p3542816"]PSVPAG - страница доступа к флешу
Продолжение следует.[/uquote]
пытаюсь понять что создал компилятор и пока не очень получается разобраться со следующим фрагментом кода:
не понятен участок (для какой цели)
MOV #0x9070, W1
CP0.W W1
BRA Z, loc_414
и не понятно какой блок памяти программ в какой области памяти данных после этого будет
MOV #4, W1
MOV W1, PSVPAG
Продолжение следует.[/uquote]
пытаюсь понять что создал компилятор и пока не очень получается разобраться со следующим фрагментом кода:
Код: Выделить всё
__resetPRI:
MOV #__SP_init, W15
MOV #__SPLIM_init, W1
MOV W1, SPLIM
BCLR.B CORCON, #PSV ; Program Space Visibility in Data Space disable
MOV #0x9070, W1
CP0.W W1
BRA Z, loc_414
MOV #4, W1
MOV W1, PSVPAG
BSET.B CORCON, #PSV ; Program Space Visibility in Data Space enable
loc_414:
CALL _main
BREAK
RESET
MOV #0x9070, W1
CP0.W W1
BRA Z, loc_414
и не понятно какой блок памяти программ в какой области памяти данных после этого будет
MOV #4, W1
MOV W1, PSVPAG
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Не могу сказать что это означает. Но использование регистра PSVPAG вместо DSRPAG говорит о каком то старом контроллере.
ЗЫ. Вы квадратные скобки в строке CP0.W W1 не пропустили (CP0.W [W1])? Потому что тогда это похоже на тест PSV.
ЗЫ. Вы квадратные скобки в строке CP0.W W1 не пропустили (CP0.W [W1])? Потому что тогда это похоже на тест PSV.
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520839#p4520839"]Не могу сказать что это означает. Но использование регистра PSVPAG вместо DSRPAG говорит о каком то старом контроллере.[/uquote]
контроллер PIC24FJ256GA110
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520839#p4520839"]ЗЫ. Вы квадратные скобки в строке CP0.W W1 не пропустили (CP0.W [W1])? Потому что тогда это похоже на тест PSV.[/uquote]
код операции 0001 00E0 и так его отображает дизассемблер...
контроллер PIC24FJ256GA110
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520839#p4520839"]ЗЫ. Вы квадратные скобки в строке CP0.W W1 не пропустили (CP0.W [W1])? Потому что тогда это похоже на тест PSV.[/uquote]
код операции 0001 00E0 и так его отображает дизассемблер...
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
PSVPAG=4 это доступ к флешу с адреса 0x30000, если в старшем бите адреса единица. То есть при включении PSV адрес 0x9070 будет означать доступ к флешу по адресу 0x31070. По этому адресу флеш отсутствует и по даташиту читается ноль. А если PSV отключен, то будет попытка чтения неcуществующего адреса в ОЗУ с генерацией ошибки адреса.
Но это если есть квадратные скобки.
Код инструкции CP0.W [W1] будет 0xE00011.
Вы переставили слова, поэтому у вас 0x00E00001
Но это если есть квадратные скобки.
Код инструкции CP0.W W1 будет 0xE00001.ivk87 писал(а): код операции 0001 00E0 и так его отображает дизассемблер...
Код инструкции CP0.W [W1] будет 0xE00011.
Вы переставили слова, поэтому у вас 0x00E00001
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520867#p4520867"]PSVPAG=4 это доступ к флешу с адреса 0x30000, если в старшем бите адреса единица. То есть при включении PSV адрес 0x9070 будет означать доступ к флешу по адресу 0x31070. По этому адресу флеш отсутствует и по даташиту читается ноль. А если PSV отключен, то будет попытка чтения неcуществующего адреса в ОЗУ с генерацией ошибки адреса.[/uquote]
мне из даташита показалось, что это должен быть адрес 0х20000, отображаемый на 0х8000 и т.д., но смущает упомянутое в даташите Data EA (что это в даташите не написано)
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520867#p4520867"]Но это если есть квадратные скобки.
Код инструкции CP0.W W1 будет 0xE00001.
Код инструкции CP0.W [W1] будет 0xE00011.
Вы переставили слова, поэтому у вас 0x00E00001[/uquote]
странные какие-то даташиты у Микрочипа (или у меня лыжи не едут), но в системе команд нашел только следующее (только таблица с мнемониками команд):
CP0 Ws Compare Ws with 0x0000 (1 word 1 cycle flags: C, DC, N, OV, Z) -- т.е. "без скобок" (а коды операций вообще не нашел в даташите)
мне из даташита показалось, что это должен быть адрес 0х20000, отображаемый на 0х8000 и т.д., но смущает упомянутое в даташите Data EA (что это в даташите не написано)
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520867#p4520867"]Но это если есть квадратные скобки.
Код инструкции CP0.W W1 будет 0xE00001.
Код инструкции CP0.W [W1] будет 0xE00011.
Вы переставили слова, поэтому у вас 0x00E00001[/uquote]
странные какие-то даташиты у Микрочипа (или у меня лыжи не едут), но в системе команд нашел только следующее (только таблица с мнемониками команд):
CP0 Ws Compare Ws with 0x0000 (1 word 1 cycle flags: C, DC, N, OV, Z) -- т.е. "без скобок" (а коды операций вообще не нашел в даташите)
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Есть общий Мануал по программированию для 16-битных контроллеров Микрочипа.
Там есть все.
Там есть все.
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520886#p4520886"]Есть общий Мануал по программированию для 16-битных контроллеров Микрочипа.
Там есть все.[/uquote]
подскажите, пожалуйста, как называется этот документ, т.к. поиск по PIC24F Programming manual не находит желаемое
P.S.
нашлось таки 16-bit MCU and DSC Programmer’s Reference Manual
Там есть все.[/uquote]
подскажите, пожалуйста, как называется этот документ, т.к. поиск по PIC24F Programming manual не находит желаемое
P.S.
нашлось таки 16-bit MCU and DSC Programmer’s Reference Manual
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="ivk87",url="/forum/viewtopic.php?p=4520879#p4520879"]мне из даташита показалось, что это должен быть адрес 0х20000, отображаемый на 0х8000 и т.д., но смущает упомянутое в даташите Data EA (что это в даташите не написано)[/uquote]
Вы как то странно читаете даташит:

PSV-доступ В ОБСУЖДАЕМОМ МК отображает на адрес 0x8000:
PSVPAG=1 --> 0x000000
PSVPAG=2 --> 0x010000
PSVPAG=3 --> 0x020000
PSVPAG=4 --> 0x030000
PSVPAG=5 --> 0x040000
Вы как то странно читаете даташит:
PSV-доступ В ОБСУЖДАЕМОМ МК отображает на адрес 0x8000:
PSVPAG=1 --> 0x000000
PSVPAG=2 --> 0x010000
PSVPAG=3 --> 0x020000
PSVPAG=4 --> 0x030000
PSVPAG=5 --> 0x040000
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520932#p4520932"]Вы как то странно читаете даташит:
[/uquote]
виноват, но как говорилось в фильме великого режиссера "дело новое, народ хочет разобраться", вот, и я пытаюсь разобраться быстро, но в даташите все сухо и много страниц в отличие от ваших коротких, но очень дружественных и понятных сообщений в начале темы...
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520932#p4520932"]PSV-доступ В ОБСУЖДАЕМОМ МК отображает на адрес 0x8000:
PSVPAG=3 --> 0x020000
PSVPAG=4 --> 0x030000
PSVPAG=5 --> 0x040000[/uquote]
я пытался руководствоваться рисунком из даташита

и у меня получилось так... если я опять из-за недостатка знаний по этому микроконтроллеру напутал (#4 сдвинул вправо на один разряд, т.к. в получении адреса не участвует 15-й бит), то поправьте, пожалуйста
виноват, но как говорилось в фильме великого режиссера "дело новое, народ хочет разобраться", вот, и я пытаюсь разобраться быстро, но в даташите все сухо и много страниц в отличие от ваших коротких, но очень дружественных и понятных сообщений в начале темы...
[uquote="КРАМ",url="/forum/viewtopic.php?p=4520932#p4520932"]PSV-доступ В ОБСУЖДАЕМОМ МК отображает на адрес 0x8000:
PSVPAG=3 --> 0x020000
PSVPAG=4 --> 0x030000
PSVPAG=5 --> 0x040000[/uquote]
я пытался руководствоваться рисунком из даташита
и у меня получилось так... если я опять из-за недостатка знаний по этому микроконтроллеру напутал (#4 сдвинул вправо на один разряд, т.к. в получении адреса не участвует 15-й бит), то поправьте, пожалуйста
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Возможно я ошибся. В даташите есть пример отображения PSVPAG=2 на адрес 0х10000.
Действительно, инкремент в этом регистре дает шаг 0х8000.
Просто я давно не считаю оффсет руками. Для этого есть макрос с аргументом в виде метки в коде флеша.
Кроме того, в новых МК имеется доступ и к старшему байту флеша через PSV.
И там другие величины.
Действительно, инкремент в этом регистре дает шаг 0х8000.
Просто я давно не считаю оффсет руками. Для этого есть макрос с аргументом в виде метки в коде флеша.
Кроме того, в новых МК имеется доступ и к старшему байту флеша через PSV.
И там другие величины.
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4521179#p4521179"]В даташите есть пример отображения PSVPAG=2 на адрес 0х10000.
Действительно, инкремент в этом регистре дает шаг 0х8000.
Просто я давно не считаю оффсет руками. Для этого есть макрос с аргументом в виде метки в коде флеша.
Кроме того, в новых МК имеется доступ и к старшему байту флеша через PSV.
И там другие величины.[/uquote]
благодарю за вашу помощь в разбирательстве с PSV (с отображением удалось разобраться, а сгенерированный компилятором код пока не ясен, но больше пока к нему возвращаться не буду -- может потом понятнее станет по мере изучения архитектуры)...
Подскажите, пожалуйста, по приемам использования табличных переходов
Действительно, инкремент в этом регистре дает шаг 0х8000.
Просто я давно не считаю оффсет руками. Для этого есть макрос с аргументом в виде метки в коде флеша.
Кроме того, в новых МК имеется доступ и к старшему байту флеша через PSV.
И там другие величины.[/uquote]
благодарю за вашу помощь в разбирательстве с PSV (с отображением удалось разобраться, а сгенерированный компилятором код пока не ясен, но больше пока к нему возвращаться не буду -- может потом понятнее станет по мере изучения архитектуры)...
Подскажите, пожалуйста, по приемам использования табличных переходов
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Есть несколько вариантов.
Приведите пример вашей задачи.
Я, например, пользуюсь таблицами вызываемых функций. Скажем, имеется машина состояний и каждому состоянию соответствует некий набор функций суперлупа.
Сама инструкция с косвенным вызовом выглядит как call Wn или rcall Wn.
В регистре должен быть адрес вызываемой функции-подпрограммы.
Таким образом, сама таблица из которой получают адреса должна содержать макросы handle с аргументами в виде имени-метки подпрограммы.
Вот и все. Обращение к таблице производится через PSV доступ как обычно.
Где то выше по теме я это все показывал.
Приведите пример вашей задачи.
Я, например, пользуюсь таблицами вызываемых функций. Скажем, имеется машина состояний и каждому состоянию соответствует некий набор функций суперлупа.
Сама инструкция с косвенным вызовом выглядит как call Wn или rcall Wn.
В регистре должен быть адрес вызываемой функции-подпрограммы.
Таким образом, сама таблица из которой получают адреса должна содержать макросы handle с аргументами в виде имени-метки подпрограммы.
Вот и все. Обращение к таблице производится через PSV доступ как обычно.
Где то выше по теме я это все показывал.
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4521239#p4521239"]Есть несколько вариантов.
Приведите пример вашей задачи.[/uquote]
например, есть следующая таблица переходов:
и хотелось бы понять как можно выполнить переход к нужной подпрограмме в зависимости от вычисленного значения от 0 до 10-ти
Приведите пример вашей задачи.[/uquote]
например, есть следующая таблица переходов:
Код: Выделить всё
TBLJMP:
GOTO tbljmp_sub0
GOTO tbljmp_sub1
GOTO tbljmp_sub2
GOTO tbljmp_sub3
GOTO tbljmp_sub4
GOTO tbljmp_sub5
GOTO tbljmp_sub6
GOTO tbljmp_sub7
GOTO tbljmp_sub8
GOTO tbljmp_sub9
GOTO tbljmp_sub10
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="ivk87",url="/forum/viewtopic.php?p=4521244#p4521244"]хотелось бы понять как можно выполнить переход к нужной подпрограмме в зависимости от вычисленного значения от 0 до 10-ти[/uquote]
Только так переход К ПОДПРОГРАММЕ не делается.
Так делается ветвление.
Подпрограмма должна вызываться инструкцией call, а завершаться инструкцией return
Код: Выделить всё
; расчет перехода по значению switch
mov #psvpage(TabSwitch), W0
mov #psvoffset(TabSwitch), W1
mov W0, PSVPAG
mov switch, W0
sl W0, W0
mov [W1+W0], W1
goto W1 ; переход на Func_N
...............
; функции Func_N
Func_0:
...............
Func_1:
...............
Func_2:
...............
Func_3:
...............
Func_4:
...............
Func_5:
...............
Func_6:
...............
Func_7:
...............
Func_8:
...............
Func_9:
...............
Func_10:
...............
; таблица указателей на Func_N
TabSwitch:
.pword handle (Func_0)
.pword handle (Func_1)
.pword handle (Func_2)
.pword handle (Func_3)
.pword handle (Func_4)
.pword handle (Func_5)
.pword handle (Func_6)
.pword handle (Func_7)
.pword handle (Func_8)
.pword handle (Func_9)
.pword handle (Func_10)
Так делается ветвление.
Подпрограмма должна вызываться инструкцией call, а завершаться инструкцией return
Код: Выделить всё
; расчет указателя по значению switch
mov #psvpage(TabPtrFunc), W0
mov #psvoffset(TabPtrFunc), W1
mov W0, PSVPAG
mov switch, W0
sl W0, W0
mov [W1+W0], W1
call W1 ; вызов Func_N
...............
; функции Func_N
Func_0:
...............
return
Func_1:
...............
return
Func_2:
...............
return
Func_3:
...............
return
Func_4:
...............
return
Func_5:
...............
return
Func_6:
...............
return
Func_7:
...............
return
Func_8:
...............
return
Func_9:
...............
return
Func_10:
...............
return
; таблица указателей на Func_N
TabPtrFunc:
.pword handle (Func_0)
.pword handle (Func_1)
.pword handle (Func_2)
.pword handle (Func_3)
.pword handle (Func_4)
.pword handle (Func_5)
.pword handle (Func_6)
.pword handle (Func_7)
.pword handle (Func_8)
.pword handle (Func_9)
.pword handle (Func_10)
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
подскажите, пожалуйста, как лучше (и желательно указать "почему") задать в конфигурации тип и параметры тактового генератора (например, можно в конфигурации задать начальный запуск от встроенного RC, а потом в программе переключиться на внешний XT/HS с кварцем 8МГц или сразу задать запуск от внешнего с кварцем 8МГц и т.п.)?
Заранее благодарю за ответы
Заранее благодарю за ответы
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Если начальная конфигурация с кварцем устраивает и не предполагается перестройка частоты, то можно и без RC обойтись. Но я предпочитаю иметь начальный запуск с RC и дефолтными настройками домена осциллятора. И лишь при инициализации сначала разгоняется кварц с PLL и по их готовности производится переключение.
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536056#p4536056"]предпочитаю иметь начальный запуск с RC и дефолтными настройками домена осциллятора. И лишь при инициализации сначала разгоняется кварц с PLL и по их готовности производится переключение.[/uquote]
благодарю за подсказку, подсознательно тоже к этому склонялся, но Вы меня убедили окончательно...
Теперь бы еще с начальными параметрами WatchDog хотелось бы разобраться -- подскажите, пожалуйста, как лучше подобрать эти значения Config Words
благодарю за подсказку, подсознательно тоже к этому склонялся, но Вы меня убедили окончательно...
Теперь бы еще с начальными параметрами WatchDog хотелось бы разобраться -- подскажите, пожалуйста, как лучше подобрать эти значения Config Words
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Тем, кто боится перейти с 8 на 16 разрядов (PIC24/dsPIC3
Вопрос не очень понятен. Вачдог далеко не всегда вообще нужен. Затыкать им дыры в косяках кода - чрезвычайно плохое решение. Поэтому выбор времени вачдога определяется той задачей, которую вачдог решает.
Пример. У меня есть такое изделие - пульт-программатор другого изделия. В этом пульте есть функция авторизации с контролем времени. То есть администратор заводит в пульт активацию на, например, 744 часа (это месяц) и через месяц пульт становится тыквой до следующей активации. Это нужно для контроля за пультами, которые позволяют производить сервисные работы на целевом устройстве. То есть если пульт уйдет на сторону, то через некоторое время он перестанет работать.
Так вот, время в этом пульте считает контроллер запитанный от литиевой таблетки. Кварц 32768 висит снаружи. Если попытаться остановить кварц (закоротить его или оторвать), то контроллер вачдогом будет сброшен и активация будет утеряна через максимум 16 секунд. Вачдог заряжен именно на такое время.
Пример. У меня есть такое изделие - пульт-программатор другого изделия. В этом пульте есть функция авторизации с контролем времени. То есть администратор заводит в пульт активацию на, например, 744 часа (это месяц) и через месяц пульт становится тыквой до следующей активации. Это нужно для контроля за пультами, которые позволяют производить сервисные работы на целевом устройстве. То есть если пульт уйдет на сторону, то через некоторое время он перестанет работать.
Так вот, время в этом пульте считает контроллер запитанный от литиевой таблетки. Кварц 32768 висит снаружи. Если попытаться остановить кварц (закоротить его или оторвать), то контроллер вачдогом будет сброшен и активация будет утеряна через максимум 16 секунд. Вачдог заряжен именно на такое время.


