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

 
 
> AT90CAN128 CAN Buffer
pavel-pervomaysk
сообщение Dec 13 2011, 17:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Всем привет, кто работал с кан модулем пните в нужную сторону плиз.
Доку на русском читаю, понять толком не могу.
CODE
.cseg

RESET: //
// STACK INIT
ldi tmp, low(ramend) //
out SPL,tmp //
ldi tmp,high(ramend) //
out SPH,tmp //




// CAN
ldi tmp,0b00000010 //
sts CANGCON,tmp // Can General Control Register
ldi tmp,0b00000000 //
sts CANGSTA,tmp // Can General Status Register
ldi tmp,0b00000000 //
sts CANGIT,tmp // Can General Interrupt Register
ldi tmp,0b00000000 //
sts CANGIE,tmp // Can General Interrupt Enable Register
ldi tmp,0b00000000 //
sts CANEN2,tmp // Can Enable MOb Register
ldi tmp,0b11111111 //
sts CANEN1,tmp // Can Enable MOb Register
ldi tmp,0b11111111 //
sts CANIE2,tmp // Can Enable Interrupt MOb Register
ldi tmp,0b00000000 //
sts CANIE1,tmp // Can Enable Interrupt MOb Register
ldi tmp,0b00000000 //
sts CANSIT2,tmp // Can Status Interrupt MOb Register
ldi tmp,0b00000000 //
sts CANSIT1,tmp // Can Status Interrupt MOb Register

// CAN 8 bit 250 Kbps 16 MHz
ldi tmp,0x0E //
sts CANBT1,tmp // Can Bit Timming Register
ldi tmp,0x04 //
sts CANBT2,tmp // Can Bit Timming Register
ldi tmp,0x13 //
sts CANBT3,tmp // Can Bit Timming Register

ldi tmp,0b00000000 //
sts CANTCON,tmp // Can Timer Control Register
ldi tmp,0b00000000 //
sts CANTIML,tmp // Can Bit Timer RegisterL
ldi tmp,0b00000000 //
sts CANTIMH,tmp // Can Bit Timer RegisterH
ldi tmp,0b00000000 //
sts CANTTCL,tmp // Can TCC Timer RegisterL
ldi tmp,0b00000000 //
sts CANTTCH,tmp // Can TCC Timer RegisterH
ldi tmp,0b00000000 //
sts CANTEC,tmp // Can Transmit Error Counter Register
ldi tmp,0b00000000 //
sts CANREC,tmp // Can Receive Error Counter Register
ldi tmp,0b00000000 //
sts CANHPMOB,tmp // Can Highest Priority MOb Register

// MOBNB0 ... MOBNB3 номер Mob 0 ... 14
// AINC - 0 автоинкремент индекса 1 нет автоинкремента индекса
// INDX0 ... INDX2 местоположение байта данных CAN в FIFO для определенного Mob
ldi tmp,(0<<MOBNB3)|(0<<MOBNB2)|(0<<MOBNB1)|(0<<MOBNB0)|(0<<AINC)|(0<<INDX2)|(0<<INDX1)|(0<<INDX0)
sts CANPAGE,tmp // Can Page MOb Register

// Регистр состояния объектов сообщения CAN
ldi tmp,0b00000000 //
sts CANSTMOB,tmp // Can MOb Status Register

// CANCDMOB инициализация
// CANMOB1:0 конфигурация объекта сообщения
// 0 0 - запрет 0 1 - разрешение передачи 1 0 - разрешение приема 1 1 - разрешение приема буфера кадра
// RPLV - ответ допустим
// 0 - ответ не готов
// 1 - ответ готов и допустим
// IDE расширение идентификатора
// 0 - CAN 2.0A (длинна идентификаторов 11 бит)
// 1 - CAN 2.0B (длинна идентификаторов 29 бит)
// DLC 0...3 количество байт в сообщении 0...8
ldi tmp,(0<<CONMOB1)|(1<<CONMOB0)|(1<<RPLV)|(0<<IDE)|(1<<DLC3)|(0<<DLC2)|(0<<DLC1)|(0<<DLC0) //
sts CANCDMOB,tmp // Can MOb Control and DLC Register

// Регистры тэга идентификатора CAN
// Если CABNMOB bit IDE равен 1
// ID = 29 bit CANIDT1 (7..0) CANIDT2 (7..0) CANIDT3 (7..0) CANIDT4 (7..3) направление ID <- 28 ...0
// Если CABNMOB bit IDE равен 0
// ID = 11 bit CANIDT1 (7..0) CANIDT2 (7..5) CANIDT3 =0 CANIDT4 &0x05 направление ID <- 10 ...0
ldi xl,low (0x100) // 0 ... 0x7FF
ldi xh,high(0x100) // 0 ... 0x7FF
mov tmp,xl //
swap tmp //
lsl tmp //
andi tmp,0xE0 //
lsr xh
ror xl
lsr xh
ror xl
lsr xh
ror xl
sts CANIDT1,xl // Can Identifier Tag Register1
sts CANIDT2,tmp // Can Identifier Tag Register2
ldi tmp,0x00 //
sts CANIDT3,tmp // Can Identifier Tag Register3
ldi tmp,0x00 //
sts CANIDT4,tmp // Can Identifier Tag Register4

// Регистры маски идентификатора CAN
ldi tmp,0xFE //
sts CANIDM1,tmp // Can Identifier Mask Register1
ldi tmp,0xE0 //
sts CANIDM2,tmp // Can Identifier Mask Register2
ldi tmp,0x00 //
sts CANIDM3,tmp // Can Identifier Mask Register3
ldi tmp,0x00 //
sts CANIDM4,tmp // Can Identifier Mask Register4

// статус временной ометки CAN 0 ... 65535
ldi tmp,0b00000000 //
sts CANSTML,tmp // Can Time Stamp RegisterL
ldi tmp,0b00000000 //
sts CANSTMH,tmp // Can Time Stamp RegisterH

// Регистр данных сообщения CAN
ldi tmp,0x85 //
sts CANMSG,tmp // Can Data Message Register



Получаю такие посылки :

START:0
ID:100
SRR:0
IDE:0
CTRL:08 [Dsize=8]
DATA:85 F9 FF 99 FE 73 DD 6D
CRC:0060 OK
CRCDEL:1
ACK:3
END:7F

Первый байт 0х85 у нас идет с регистра CANMSG

Где он берет остальные 7 байт ? F9 FF 99 FE 73 DD 6D
Как туда загнать данные перед отправкой ?
В пространстве до 0х100 я их не нашел ...

INDX0 ... INDX2 местоположение байта данных CAN в FIFO для определенного Mob : вот это не понятно тоже ...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Павлик   AT90CAN128 CAN Buffer   Dec 13 2011, 17:57
- - Палыч   Цитата(Павлик @ Dec 13 2011, 21:57) Как т...   Dec 13 2011, 19:35
- - KRS   А зачем вы на асме пишите?   Dec 13 2011, 19:51
- - Павлик   Индексы я ставлю в ноль, автоинкремент включаю, да...   Dec 14 2011, 15:02
|- - Палыч   Цитата(Павлик @ Dec 14 2011, 19:02) Индек...   Dec 14 2011, 16:02
- - ILYAUL   Вы можете вместо ldi tmp,0b00000000 сделать напр...   Dec 14 2011, 16:15
|- - Павлик   Попробую, спасибо за подсказку. Гы, не смешно есл...   Dec 14 2011, 17:07
- - Павлик   Попробовал по советам, получилось кое что, но не м...   Dec 14 2011, 19:43
|- - Палыч   Цитата(Павлик @ Dec 14 2011, 23:43) Или я...   Dec 15 2011, 05:10
- - Павлик   Вопрос решился, подсказали мне мою ошибку.   Dec 18 2011, 15:13
|- - bumborashik   Цитата(Павлик @ Dec 18 2011, 18:13) Вопро...   Dec 21 2011, 05:24
- - Павлик   Когда полностью будет готово, отпишусь с коментами...   Dec 21 2011, 18:22
- - Павлик   Возникла еще одна проблема, не могу вставить задер...   Dec 22 2011, 16:23
- - Павлик   Разобрался и с прерываниями и с заполнением. Стран...   Feb 23 2015, 10:52


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

 


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


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