реклама на сайте
подробности

 
 
> CAN128. Попробуем разобраться.
dormouse
сообщение Feb 16 2006, 20:04
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Начал разработку несложного софта для системы из нескольких at90can128. Фактически, надо сделать несложный исходник на IAR EC++ 4.1 Посмотрел, что есть из готового, но ничего не нашёл.
Единственное - колоссального размера исходник от Atmel'a (вроде адаптированный от прошлой архитектуры).

Для начала очень желаемо суметь написать софт, который сможет принять-послать-обработать ошибку.

Насчёт более высокого уровня (DeviceNET, CANOpen e.t.c) пока не сумел разобраться - складывается ощущение, что ничего готового (ни одного готового каркаса) невозможно найти...

Есть желающие включиться в разработку из идейных или материальных побуждений?

Жду ответа.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dimorus
сообщение Jun 20 2007, 15:42
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 17-06-07
Пользователь №: 28 490



А кто-нибудь автора dormouse видел или может знает? 1111493779.gif
сорри за офтопик bb-offtopic.gif
Go to the top of the page
 
+Quote Post
Alexeus
сообщение Jan 22 2009, 13:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345



Цитата(Dimorus @ Jun 20 2007, 18:42) *
А кто-нибудь автора dormouse видел или может знает? 1111493779.gif
сорри за офтопик bb-offtopic.gif


Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть...
Кто может помочь, скиньте код. (at90can128)
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jan 23 2009, 11:02
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Alexeus @ Jan 22 2009, 16:52) *
Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть...
Кто может помочь, скиньте код. (at90can128)

Из моего проекта без к.л. обработки.
RG00 - регистр равный 0x00. RBXn - регистры из R16...R24.
Выключил автоматическую перепередачу при ошибках. При неподтверждении ACK передаю 3 раза (4 попытки).
Вопросы конечно будут ещё..
CODE

ICAN_L: ; Инициализация CAN.
; Тактовая частота 14745600. Связь 125000 (реально 126031)
.SET CBT1=0x10 ; писаемое в CANBT1 (делитель=9, частота 1.6384 МГц)
.SET CBT2=0x0A ; писаемое в CANBT2 (Tsjw=1, Tprs=6)
.SET CBT3=0x25 ; писаемое в CANBT3 (Tphs2=3, Tphs1=3, SMP=1)
; TQ=(SYN=1)+(Tprs=6)+(Tphs1=3)+(Tphs2=3)=13
; Sampling Point=((SYN=1)+(Tprs=6)+(Tphs1=3))/(TQ=13)=76.92%

;.SET CBT1=0x12 ; писаемое в CANBT1 (16 МГц) (частота 1,6 МГц)
;.SET CBT2=0x0C ; писаемое в CANBT2 (16 МГц)
;.SET CBT3=0x37 ; писаемое в CANBT3 (16 МГц)
; BRP=9 (предделитель на 10), SJW=0 (1 квант), PRS=6 (7 квантов),
; PHS2=3 (4 кванта), PHS1=3 (4 кванта), SMP=1 (3 выборки). Итого 16.

;.SET CBT1=0x0A ; писаемое в CANBT1 (12 МГц) (частота 2 МГц)
;.SET CBT2=0x0E ; писаемое в CANBT2 (12 МГц)
;.SET CBT3=0x4B ; писаемое в CANBT3 (12 МГц)
; BRP=5 (предделитель на 6), SJW=0 (1 квант), PRS=7 (8 квантов),
; PHS2=4 (5 квантов), PHS1=5 (6 квантов), SMP=1 (3 выборки). Итого 20.
sts CANGCON,RG00 ; CAN запрещён
ldi RBX0,15 ; имеется 15 MOb
ldi RBX1,0x00 ; писаем в CANPAGE
ldi XL,0x00 ; писаем в CANSTMOB
ldi XH,0x00 ; писаем в CANCDMOB
IniCAN1: ; цикл сброса всех MOb
sts CANPAGE,RBX1 ; N MOb
sts CANCDMOB,XH ; регистр контроля MOb
sts CANSTMOB,XL ; регистр статуса MOb
subi RBX1,0xF0 ; увеличим N Page MOb на след. раз
dec RBX0 ; уменьшаем сч-к
brne IniCAN1 ; циклимся
ldi RBX0,CBT1 ; настройка
sts CANBT1,RBX0 ; частоты
ldi RBX0,CBT2 ; шоб получить
sts CANBT2,RBX0 ; скорость
ldi RBX0,CBT3 ; CAN
sts CANBT3,RBX0 ; 125 кБит
; инициализируем скорость счёта CANTIM (Time Stamp)
ldi RBX0,((Fclk>>3)/16000)-1 ; шоб считалось
sts CANTCON,RBX0 ; +16 единиц за 1 мС

; иниц-зируем MOb N10..14 на прослушку сообщений "я ещё живой"

ldi RBX1,14<<4 ; начнём с 14 MOb
IniCAN2: ; цикл иниц-ии MOb N14..10
sts CANPAGE,RBX1 ; и писать в AT45 и слать через InIn
ldi RBX0,1<<IDE ; 29 бит адреса (пока до кучи)
sts CANCDMOB,RBX0 ; остальное пока запрещено
; адрес CAN приёма "я ещё живой"
ldi RBX0,AdSiV>>21 ; 28..21 биты
sts CANIDT1,RBX0 ; адреса приёма
ldi RBX0,low(AdSiV>>13) ; 20..13 биты
sts CANIDT2,RBX0 ; адреса приёма
ldi RBX0,low(AdSiV>>5) ; 12..5 биты
sts CANIDT3,RBX0 ; адреса приёма
ldi RBX0,low(AdSiV<<3) ; 4..0 маска,
sts CANIDT4,RBX0 ; RTRTAG, RB1TAG и RB0TAG
; маска адреса CAN приёма "я ещё живой"
ldi RBX0,AmSiV>>21 ; 28..21 биты маски
sts CANIDM1,RBX0 ; адреса приёма
ldi RBX0,low(AmSiV>>13) ; 20..13 биты маски
sts CANIDM2,RBX0 ; адреса приёма
ldi RBX0,low(AmSiV>>5) ; 12..5 биты маски
sts CANIDM3,RBX0 ; адреса приёма
ldi RBX0,low(AmSiV<<3)|(1<<RTRMSK)|(1<<IDEMSK)
sts CANIDM4,RBX0 ; 4..0 маска, RTR и IDE (2.0B)
ldi RBX0,(1<<CONMOB1)|(1<<IDE) ; у MOb
sts CANCDMOB,RBX0 ; разрешим приём (+2.0 B до кучи)
subi RBX1,1<<4 ; уменьшаем N MOb
cpi RBX1,10<<4 ; проверим на < 10го MOb
brcc IniCAN2 ; C=0 - циклимся

sts CANIE2,RG00 ; разрешим прерывание токо от
ldi RBX0,1<<IEMOB14|1<<IEMOB13|1<<IEMOB12|1<<IEMOB11|1<<IEMOB10
sts CANIE1,RBX0 ; слушаюших MOb N10..14

ldi RBX0,0x7F ; сбросим все сбрасываемые
sts CANGIT,RBX0 ; флаги прерываний от CAN

; sts L_GER,RG00 ; очистим LISTEN-накопитель ошибок

ldi RBX0,(1<<ENIT)|(1<<ENRX)|(1<<ENTX)|(1<<ENERR)|(1<<ENERG)
; ldi RBX0,(1<<ENIT)|(1<<ENERG)
; ldi RBX0,0x00
sts CANGIE,RBX0 ; прер-я по приёму и ош-кам

; ldi RBX0,(1<<TTC)|(1<<SYNTTC)|(1<<LISTEN)|(1<<ENASTB)
ldi RBX0,(1<<TTC)|(1<<SYNTTC)|(1<<ENASTB)
sts CANGCON,RBX0 ;

sts FlOpO,RG00 ; шоб не зависнуть
sts FlCpO,RG00 ; после переиниц-ии
ret
;***
C6CRO: ; Пошлём сообщение, управляющее CAN РЕЛЕ (передача Выходов).
; Но в начале запретим низкоприоритетную передачу Выходов.
ldi RBX0,7<<4 ; выберем MOb
sts CANPAGE,RBX0 ; N7 (+ MSG с 0)
lds RBX0,CANCDMOB ; прочтём, шоб запретить токо передачу
andi RBX0,low(~((1<<CONMOB1)|(1<<CONMOB0))) ; (шоб если она
sts CANCDMOB,RBX0 ; уже пошла, то былаб такой-же)
ldi RBX0,6<<4 ; выберем MOb
sts CANPAGE,RBX0 ; N6 (+ MSG с 0)
ldi RBX0,1<<IDE ; 29 бит адреса (пока до кучи)
sts CANCDMOB,RBX0 ; остальное пока запрещено
; адрес CAN передачи срочного управления CAN РЕЛЕ (Выходов)
lds RBX1,N8OpO ; N8 передачи Выходов
lds XL,N16OpO ; м.б. N16
lds XH,N16OpO+1 ; с.б. N16
add XL,XL ; сдвинем
rol XH ; всё
rol RBX1 ; это
rol RBX0 ; на 3 бита
add XL,XL
rol XH
rol RBX1
rol RBX0
add XL,XL
rol XH
rol RBX1
rol RBX0
andi RBX0,0x07 ; тут 3 ст. бита N8
ori RBX0,(Ad6CAN>>21)&0xF8 ; 5 ст. бит адреса
sts CANIDT1,RBX0 ; 28..21 биты адреса передачи
sts CANIDT2,RBX1 ; 20..13 биты адреса передачи
sts CANIDT3,XH ; 12..5 биты адреса передачи
sts CANIDT4,XL ; 4..0 биты с RTR=RB1=RB0=0
; маска адреса CAN передачи CAN РЕЛЕ (Выходов)
ldi RBX0,Am6CAN>>21 ; 28..21 биты маски
sts CANIDM1,RBX0 ; адреса передачи
ldi RBX0,low(Am6CAN>>13) ; 20..13 биты маски
sts CANIDM2,RBX0 ; адреса передачи
ldi RBX0,low(Am6CAN>>5) ; 12..5 биты маски
sts CANIDM3,RBX0 ; адреса передачи
ldi RBX0,low(Am6CAN<<3)|(1<<RTRMSK)|(1<<IDEMSK)
sts CANIDM4,RBX0 ; 4..0 маска, RTR и IDE (2.0B)
ldi RBX0,(1<<IDE)|(LgMOb6&0x0F) ; у соотв-го MOb
sts CANCDMOB,RBX0 ; запретим всё (+2.0 B до кучи)
lds RBX0,DtOpO ; м.б. данных
sts CANMSG,RBX0 ; в передачу
lds RBX0,DtOpO+1 ; с.б. данных
sts CANMSG,RBX0 ; в передачу
ldi RBX0,0x03 ; разрешим 3 неполучения
sts MO6Cn,RBX0 ; ACK (min м.б. 4 попытки)
sts MO6St,RG00 ; статус передачи =0
sts CANSTMOB,RG00 ; очистим ош-ки и прерывания
ldi RBX0,(1<<CONMOB0)|(1<<IDE)|(LgMOb6&0x0F) ; у MOb N6
sts CANCDMOB,RBX0 ; разрешим передачу + 2.0B
lds RBX0,CANIE2 ; там разр-ние прерываний от MOb N0..7
andi RBX0,low(~(1<<IEMOB7)) ; запретим от MOb N7
ori RBX0,(1<<IEMOB6) ; разрешим от MOb N6
sts CANIE2,RBX0 ; назад изменённую маску
lds RBX0,CANGIE ; прочтём шоб доп-но
ori RBX0,(1<<ENIT)|(1<<ENTX); разрешить прер-е
sts CANGIE,RBX0 ; по передаче (до кучи)
ret ; возврат
;***

Кодировка не совпадает - пришлось перекодировать в DOS-866, а файл прикрепить что-то не удаётся. Какие-то проблемы с прикреплением файлов.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dormouse   CAN128. Попробуем разобраться.   Feb 16 2006, 20:04
- - era   Типа совет. Когда работал с CAN-ом слепил приблуд...   Feb 16 2006, 21:31
- - Aleks17   По-моему проще разобраться и своё сгородить. На С ...   Feb 17 2006, 03:39
- - spf   Цитата(dormouse @ Feb 17 2006, 01:04) Для...   Feb 17 2006, 04:24
- - dormouse   Найденные в продаже устройства: 1. Славна $70...   Feb 17 2006, 11:07
- - KRS   При начале работы я использовал CAN примерно так: ...   Feb 17 2006, 14:42
|- - ruslannd   Цитата(KRS @ Feb 17 2006, 18:42) При нача...   Apr 4 2006, 10:13
|- - ruslannd   Цитата(KRS @ Feb 17 2006, 18:42) При нача...   Apr 4 2006, 11:43
||- - KRS   Цитата(ruslannd @ Apr 4 2006, 15:43) Цита...   Apr 4 2006, 14:28
||- - ruslannd   Цитата(KRS @ Apr 4 2006, 18:28) Цитата(ru...   Apr 5 2006, 14:48
|- - J0hnNick   Цитата(KRS @ Feb 17 2006, 18:42) При нача...   Jun 15 2007, 10:21
|- - d'Bill   Дык их то и надо написАть ручками   Jun 18 2007, 19:34
- - dormouse   Пока изучаю, ещё не компилировал. После обдумывани...   Feb 22 2006, 12:54
|- - spf   Цитата(dormouse @ Feb 22 2006, 17:54) Пок...   Feb 26 2006, 05:18
- - Седой   Уважаемый dormouse, Вы пишите: ЦитатаPS Ответа от ...   Feb 24 2006, 07:51
- - dormouse   Письмо я направил на NPP@SLAVNA.RU, 17 Фев 2006 16...   Feb 24 2006, 11:00
- - dormouse   Отлично. Почти собрал этот исходник. Осталось толь...   Feb 26 2006, 06:06
|- - Andy Mozzhevilov   Цитата(dormouse @ Feb 26 2006, 11:06) До ...   Feb 26 2006, 10:02
|- - ipc   Цитата(dormouse @ Feb 26 2006, 10:06) Про...   Apr 4 2006, 11:14
- - John   Посмотрите еще здесь - Описание CAN на русском яз...   Mar 1 2006, 03:15
- - dormouse   Позволю добавить от себя ;-) Я разобрался с работо...   Apr 4 2006, 21:00
|- - ipc   Цитата(dormouse @ Apr 5 2006, 01:00) Позв...   Apr 5 2006, 05:11
|- - zltigo   Цитата(dormouse @ Apr 5 2006, 00:00) PS О...   Apr 12 2006, 19:07
- - kanzler   Привет всем! Идейные соображения по поводу CAN...   Apr 5 2006, 05:28
|- - ipc   Цитата(kanzler @ Apr 5 2006, 09:28) Приве...   Apr 5 2006, 05:39
- - dormouse   Совершенно верное суждение насчёт протоколов высок...   Apr 5 2006, 07:00
|- - ipc   Цитата(dormouse @ Apr 5 2006, 11:00) Сове...   Apr 5 2006, 07:22
- - dormouse   Тогда можно попросить указать цены на вами закупле...   Apr 5 2006, 07:51
- - ipc   Плата IXXAT USBtoCAN(2 канала с опторазвязкой) ~25...   Apr 5 2006, 08:03
- - dormouse   Цена действительно оказалась более чем приемлемой....   Apr 5 2006, 08:16
|- - ipc   Цитата(dormouse @ Apr 5 2006, 12:16) Цена...   Apr 5 2006, 08:55
- - dormouse   Atmel сделала шаг вперёд к gcc и CAN. Конкретно: т...   Apr 12 2006, 18:24
- - Седой   ЦитатаЧуть-чуть портят впечатление кривенькие с ко...   Apr 17 2006, 13:05
- - zuuuuk   Меня очень интерисует эта тема. т. к. я сейчас тол...   Jun 8 2007, 16:24
|- - spf   Цитата(zuuuuk @ Jun 8 2007, 22:24) Меня о...   Jun 8 2007, 16:34
- - Dimorus   я не могу понять как этот Can ваще работает млиин ...   Jun 19 2007, 15:19
- - SasaVitebsk   По моему на асме ничего не было. Если только билио...   Jan 22 2009, 18:10
- - ARV   я же выкладывал нормальную библиотеку для работы с...   Jan 22 2009, 18:20
|- - Alexeus   Цитата(ARV @ Jan 22 2009, 21:20) я же вык...   Jan 23 2009, 12:12
|- - ARV   Цитата(Alexeus @ Jan 23 2009, 15:12) Спас...   Jan 24 2009, 16:45
|- - Alexeus   Это, конечно, похоже больше в тематику- обучалка, ...   Jan 26 2009, 07:36
- - SasaVitebsk   А там нечего писать. Инициализацию - заимствовать....   Jan 23 2009, 19:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 17:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016