Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CAN Ack Error
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
owl
Провозился пол дня с казавшейся по началу ерундовой проблемой, отменить CAN посылку, при отсутствии ACK сигнала (нет slave на шине).
Понял, что сделать это не могу!!! (Культурными средствами по крайней мере smile.gif )

Поиск в инете выдал следующее:

http://www.at91.com/samphpbb/viewtopic.php?f=15&t=5043
http://support.atmel.no/bin/customer?=&...ntry&id=254

Блин, очередной облом с процом....достало....
KRS
Так если ACK нет, значит на шине больше вообще нет устройств. Пусть себе передает пакет... как появится хотя бы одно устройство появится или ACK или ошибки до BUS OFF дойдут
Dog Pawlowa
Цитата(owl @ May 5 2009, 16:41) *
Блин, очередной облом с процом....достало....

Да все нормально. Скорее ситуация ненормальная, когда шина пустая.
Хотя старенький MCP2515 умеет передавать сообщения однократно... rolleyes.gif
Serg_el
При попытке передать пакет, когда на шине только одно устройство (некому подтвердить принятие), mcu продолжает без остановки передавать этот пакет, при этом залезая в swi прерывание. Кто-нибудь сталкивался с подобным? Как можно побороть?
aaarrr
Недавно обсуждалось.
Serg_el
Цитата(owl @ May 5 2009, 17:41) *
Провозился пол дня с казавшейся по началу ерундовой проблемой, отменить CAN посылку, при отсутствии ACK сигнала (нет slave на шине).
Понял, что сделать это не могу!!! (Культурными средствами по крайней мере smile.gif )

Поиск в инете выдал следующее:

http://www.at91.com/samphpbb/viewtopic.php?f=15&t=5043
http://support.atmel.no/bin/customer?=&...ntry&id=254

Блин, очередной облом с процом....достало....


Как решили проблему? У меня при отсутствии ACK сигнала проц продолжает посылать пакет при этом входит в swi прерывание. Подумал все просто - сейчас сброшу бит CANEN в прерывании, выйду из него и буду ставить его по таймеру, ожидая подключения еще одного устройства к шине. Но не так все просто, проц далее начинает входить в Undefined_Addr, при этом адрес возврата 0x4. Адрес возврата для swi - 0x00108A7C. Использую библиотеки IARа. Там команды SWI 0x123456!!!!!!!!

Доктор я буду жить? crying.gif


__iar_sh_stdout_close:
00108A10 E59F1098 LDR R1, [PC, #+152] ; [.text_6 (0x108AB0)] =__iar_sh_stdout_handle (0x202050)
00108A14 E92D5000 STMDB SP!, {R12,LR}
00108A18 E5910000 LDR R0, [R1, #+0]
00108A1C E3500000 CMP R0, #0x0
00108A20 0A000003 BEQ 0x108A34
00108A24 E3A00002 MOV R0, #0x2
00108A28 EF123456 SWI 0x123456
00108A2C E3A00000 MOV R0, #0x0
00108A30 E5810000 STR R0, [R1, #+0]
00108A34 E8BD4001 LDMIA SP!, {R0,LR}
00108A38 E12FFF1E BX LR
__iar_sh_stdout:
00108A3C E92D4010 STMDB SP!, {R4,LR}
00108A40 E59F4068 LDR R4, [PC, #+104] ; [.text_6 (0x108AB0)] =__iar_sh_stdout_handle (0x202050)
00108A44 E24DD010 SUB SP, SP, #0x10
00108A48 E5940000 LDR R0, [R4, #+0]
00108A4C E1A03001 MOV R3, R1
00108A50 E3500000 CMP R0, #0x0
00108A54 1A000009 BNE 0x108A80
00108A58 E28F104C ADD R1, PC, #0x4C ; 0x108AAC
00108A5C E58D1000 STR R1, [SP, #+0]
00108A60 E3A01004 MOV R1, #0x4
00108A64 E58D1004 STR R1, [SP, #+4]
00108A68 E3A01003 MOV R1, #0x3
00108A6C E58D1008 STR R1, [SP, #+8]
00108A70 E1A0100D MOV R1, SP
00108A74 E3A00001 MOV R0, #0x1
00108A78 EF123456 SWI 0x123456
00108A7C E5840000 STR R0, [R4, #+0]
00108A80 E5941000 LDR R1, [R4, #+0]
00108A84 E58D3004 STR R3, [SP, #+4]
00108A88 E58D1000 STR R1, [SP, #+0]
00108A8C E58D2008 STR R2, [SP, #+8]
00108A90 E1A0100D MOV R1, SP



Посмотрел я на свой предыдущий пост внимательно и закомментировал все отладочные подпрограммы аля TRACE... и все встало на свои места, больше никаких левых прерываний. УРА!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.