Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 08.07.2020, 15:27   #1
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 137
Вес репутации: 185/16
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Здравствуйте.
Пытаюсь писать на ASM чтение с ECAN. Источником сообщений на шине CAN использую плату "SAE J1939 ECU Simulator Board". Формат сообщений - J1939. В области данных сообщения передаю следующие 8 байт
"0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88".
В приёмном буфере в DMA RAM получаю 14 байт
"0xF3 0x04 0x0E 0x00 0x08 0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88"
(это при PDU=61443, SA=128, DA=255, P=1, LEN=8). Значения красных байтов изменяются при изменении идентификатора сообщения (PDU).
Я ожидал что в буфер попадут только 8 чёрных байтов.
Будьте добры - подскажите так и должно быть, или я неправильно настроил ECAN или DMA?
Заранее благодарен, Алексей.

Последний раз редактировалось alex_zas; 08.07.2020 в 15:29. Причина: Забыл про метки...
alex_zas вне форума   Ответить с цитированием
Старый 08.07.2020, 16:45   #2
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,611
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Здравствуйте.
Пытаюсь писать на ASM чтение с ECAN. Источником сообщений на шине CAN использую плату "SAE J1939 ECU Simulator Board". Формат сообщений - J1939. В области данных сообщения передаю следующие 8 байт
"0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88".
В приёмном буфере в DMA RAM получаю 14 байт
"0xF3 0x04 0x0E 0x00 0x08 0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88"
(это при PDU=61443, SA=128, DA=255, P=1, LEN=8). Значения красных байтов изменяются при изменении идентификатора сообщения (PDU).
Я ожидал что в буфер попадут только 8 чёрных байтов.
Будьте добры - подскажите так и должно быть, или я неправильно настроил ECAN или DMA?
Заранее благодарен, Алексей.
DMA - указан не тот буфер.
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 08.07.2020, 22:04   #3
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 137
Вес репутации: 185/16
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
DMA - указан не тот буфер.
В регистр DMAxSTA записано неправильное значение - об этом речь?
Делаю так:
Код:
.section	*,bss,dma
buf:	.space	256
Код:
	mov	#dmaoffset (buf),W0
	mov	W0,DMA0STA
В чём ошибка?
alex_zas вне форума   Ответить с цитированием
Старый 09.07.2020, 11:04   #4
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,611
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
В регистр DMAxSTA записано неправильное значение - об этом речь?
Делаю так:
Код:
.section	*,bss,dma
buf:	.space	256
Код:
	mov	#dmaoffset (buf),W0
	mov	W0,DMA0STA
В чём ошибка?
Проникся
Совершенно безошибочно выполнен копипаст по DS70353C и AN1249. Для того, чтобы получить ожидаемый результат надо привязать DMA на другой флаг - "received buffer interrupt (CiINTF<1>)", и выполнять трансфер "память память".
То что реализовано - (ИМХО) гонит RAWdata мимо фильтров. Микрософт, похоже, пал - документация совершенно в стиле СТМ
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 10.07.2020, 01:45   #5
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 137
Вес репутации: 185/16
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
надо привязать DMA на другой флаг - "received buffer interrupt (CiINTF<1>)"
Иначе говоря в регистр DMAxREQ вместо 0x0022 записать другое значение - какое?
Цитата:
и выполнять трансфер "память память"
Это как?
Цитата:
гонит RAWdata мимо фильтров
Так фильтрация у меня работает.
alex_zas вне форума   Ответить с цитированием
Старый 10.07.2020, 08:49   #6
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,389
Вес репутации: 4234/124
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
выполнять трансфер "память память".
В этом контроллере нет режима ДМА "память-память". При выделенной в ОЗУ для ДМА двухпортовой памяти такой режим не имеет смысла.
Марк на форуме   Ответить с цитированием
Старый 10.07.2020, 09:53   #7
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,611
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Иначе говоря в регистр DMAxREQ вместо 0x0022 записать другое значение - какое?

Это как?

Так фильтрация у меня работает.
Так я... а хрен его знает , в этом контроллере может и никак. Типа за нас подумали - всё равно нужно вычитывать заголовок, чтобы узнать актуальную длину.
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 10.07.2020, 21:23   #8
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,611
Вес репутации: 3789/98
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от Марк Посмотреть сообщение
В этом контроллере нет режима ДМА "память-память". При выделенной в ОЗУ для ДМА двухпортовой памяти такой режим не имеет смысла.
Прошу пардону, занят был дюже... если не затруднит, приведи типичный (выигрышный по производительности) пример использования двухпортовой, никогда с такой не работал. Память - память (вокруг UART) юзал в хвост и в гриву.. DMA собирает пакет, по таймауту (второй канал мем - мем, пока идет вызов парсера) копирует его в пром. буфер, чтобы можно было продолжать прием, Парсер (опять мем - мем) копирует его в расходный для каждого вызова "decrypt", запускаемый сразу после запуска трасферта. Дешифровщик, пока идет трасферт готовит ключи конкретного логического канала... выигрыш по сравнению с просто копированием до 30%. Сама постановка задачи (ИМХО) вполне идиотская, но Заказчик хотел чтобы в физ. канале кроме "каши" ничего не было
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 11.07.2020, 14:21   #9
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,389
Вес репутации: 4234/124
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC24HJ128GP502 - ECAN+J1939 - лишние байты...

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
приведи типичный (выигрышный по производительности) пример использования двухпортовой, никогда с такой не работал.
1. UART Rx->DMA DPRAM (реквест от буфера Rx)
2. DMA DPRAM->UART Tx (реквест от буфера Tx или от таймера, если нужен зазор между байтами)
3. ADC->DMA DPRAM (реквест от буфера ADC)
4. SPI->DMA DPRAM (реквест от сигнала синхронизации)
У меня так работает внешний 16-разрядный АЦП (AD7988-5). Один Output Compare формирует запуск конверсии и запуск фиктивной передачи SPI (отдельный канал ДМА), а второй Output Compare реквестит другой канал ДМА по завершении приема.
Ну и так далее...
DMA DPRAM - это двухпортовая память в которой один порт подключен к шине адреса/данных ядра, а другой - к шине адреса/данных ДМА контроллера. Транзакции могут идти только между буферными регистрами периферии (из списка доступных) и DMA DPRAM. Вариантов только два: от периферии в DMA DPRAM или от DMA DPRAM к периферии. Это определяется битом DIR регистра DMAxCON. Начальный адрес в ОЗУ в ДМА контроллере задается как СМЕЩЕНИЕ относительно начала DMA DPRAM.
Марк на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 20:56.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot