![]() |
|
|
Продукция MICROCHIP Технические вопросы по всей продукции Microchip |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Здравствуйте.
Пишу на ASM для PIC24EP512GP806 в MPLAB IDE 8.92 + XC16 1.31. Никак не получается запустить модуль CAN. Ранее это без проблем удавалось на PIC24HJ128GP502. ![]() Вот минимизированный исходник, который должен вызывать появление импульсов на выводах CAN MCU: Код:
.INCLUDE "P24EP512GP806.inc" .GLOBAL __reset .BSS .DATA .TEXT __reset: setm PMD1 bclr PMD1,#C1MD ; включение модуля CAN ; подключение CAN к RP102 и RP98 mov #0x0046,W0 ; разблокирование PPS mov WREG,OSCCON mov #0x0057,W0 mov WREG,OSCCON bclr OSCCON,#IOLOCK mov #0x0066,W0 ; C1RX - RP102 port F6 pin 35 mov WREG,RPINR26 mov #0x000E,W0 ; C1TX - RP98 port F2 pin 34 mov WREG,RPOR8 mov #0x0046,W0 ; блокирование PPS mov WREG,OSCCON mov #0x0057,W0 mov WREG,OSCCON bset OSCCON,#IOLOCK clr C1CTRL1 ; перевод C1 в нормальный режим loop: bset C1TR01CON,#TXREQ0 ; запуск передачи bra loop .end Будьте добры - подскажите почему не работает CAN? Что я упустил? Кто-нибудь реализовывал CAN на PIC24EP? Заранее благодарен, Алексей. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,685
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Марк
На ногах по умолчанию CAN вообще никуда не подключен. - да. забыл. просто на другие ноги. если на другом МК работало, то самый простой вариант попробовать сменить ремап. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]() Цитата:
В конфиге есть бит, который определяет количество доступов к PPS. В одном положении доступ может быть только один раз, а в другом - не ограниченное количество раз. А разблокировку, как я понимаю, нужно делать всегда. Иначе запись в регистры PPS заблокирована. |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Пробовал подключать к другим выводам - так же стабильно высокие уровни.
Такое впечатление будто модуль CAN не тактируется. Бит #TXREQ0 устанавливается, но автоматически не сбрасывается. ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Нет, по дефолту ничего не блокировано. Я вообще ни в одном своем устройстве ремап не лочу.
Мало того, в дебаге останавливаете исполнение, вручную правите регистры ремапа и продолжаете с новой комбинацией. Можете попробовать с какм нибудь аутпут компэйром. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,685
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
alex_zas
Проверьте в отладке адреса - есть вероятность, что всё-таки не по тем адресам пишете. Ну или накатите последнюю версию компилятора и проверьте в ней. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Бит блокировки изменения PPS по дефолту действительно сброшен.
Марк - спасибо за разъяснение. Цитата:
Есть одно подозрение - в проекте на PIC24HJ128GP502 (где CAN работает) MCU тактируется от кварца HS. А в проекте на PIC24EP512GP806 (где CAN не работает) MCU тактируется от FRC. Может проблема находится в этой плоскости. |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Код:
loop: bset C1TR01CON,#TXREQ0 ; запуск передачи bra loop Еще один вопрос про частоты . У Вас осциллятор и рейт CAN остались прежними? |
![]() |
![]() |
![]() |
#13 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Марк, Вы правы, с точки зрения правильности управления выводом в CAN это нарушение. Правильно установить бит TXREQ0, дождаться его сброса и только после этого вновь устанавливать. И рейт CAN тоже нужно программировать. Осциллятор другой и естественно рейт тоже другой. Но всё это для проверки работоспособности модуля CAN на мой взгляд значения не имеет.
Я вообще начинал работу с CAN портируя программный модуль со всеми настройками и функционалом (CAN, DMA, таймеры, буферы). Но модуль CAN никак не работал. Потом стал минимизировать рабочий код CAN и проверять его на нерабочем проекте, чтобы потом выложить на форум. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Прошу прощения за длительное молчание - немного приболел. Разобрался с CAN-ом. Оказывается есть различие в реализации модуля CAN в сериях PIC24HJ и PIC24EP.
В регистре C1TR01CON есть бит TXREQ0. При установке этого бита запускается механизм передачи сообщения из буфера. В этом же регистре есть бит TXEN0, который определяет режим использования буфера (0 - приём, 1 - передача). Так вот в PIC24HJ передача сообщения из буфера осуществляется внезависимости от состояния бита TXEN0. Достаточно установить бит TXREQ0. В PIC24EP для передачи сообщения из буфера должен быть установлен бит TXEN0 и затем установлен бит TXREQ0. В проекте на PIC24HJ бит TXEN0 я устанавливал но неправильно (при установленном бите WIN в регистре C1CTRL1, фактически писал не в тот регистр). Но из-за того что в PIC24HJ установка бита TXEN0 не обязательна этой ошибки я не заметил. В проекте PIC24EP установка бита TXEN0 обязательна, естественно передача не начиналась. После перемещения установки бита TXEN0 после сброса бита WIN всё заработало. Спасибо всем за участие. |
![]() |
![]() |
![]() |
Метки |
ecan, pic24ep |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
STM32: Не могу запустить бутлоадер на плате, помогите | hfmscan | Микроконтроллеры других производителей | 17 | 13.01.2017 08:49 |
Помогите запустить проект в MPLAB | Egorrr | Вопросы начинающих | 23 | 10.09.2015 12:58 |
Помогите запустить АЦП PIC18f26k22 | retro55 | Продукция MICROCHIP | 35 | 13.02.2013 09:46 |
Помогите запустить 12F629 | john2103 | Вопросы начинающих | 30 | 07.11.2011 21:09 |
Помогите запустить Timer1 с внешним кварцем | Lexus | Продукция MICROCHIP | 7 | 12.05.2011 21:24 |