Obsah
Poslední změna: středa 1. října 2008
Napište program v jazyce C, který umožňuje zadat číselný údaj z klávesnice (dle 1. a 2. bodu předešlé úlohy ) dále poslat/přijat zadané číslo po CAN sběrnici.
po stisknutí klávesy ODESLAT se odešle zadané číslo ( 5 body )
přijaté číslo se zobrazí na další řádek displeje ( 5 nebo 8 bodů podle vybrané alternativy)
přijaté číslo se zobrazuje po ukončení editaci čísla ( 5 body )
přijaté číslo se zobrazuje paralelně i v průběhu editaci čísla ( 8 bodů )
číslo se bude přenášet v binární podobě, zakódované do prvních 4 datových bytů Canové zprávy notací little endian (na CANu kódování little endian, architektura m68k používá big endian)
použijte zprávy se standardním identifikátorem 0x15A
Maximálně může být úloha ohodnocena 21 body. Při hodnocení bude brán zřetel i na kvalitu implementace.
9 z 10 studentů doporučuje navštívit přednášky a přečíst si v manuálu m68k sekci (13) o CAN modulu . Popis registrů najdete zde. Definice maker jsou obsaženy v souboru can_hw.h .
CANmonitor
Je to nástroj pro sledování zpráv na sběrnici CAN. Spouští se příkazem
canmonitor
. Doporučuje se používat canmonitor pouze pro příjem zpráv.V laboratoři je nainstalována v jednom počítači (nazveme ho CANMON) PCI CAN karta a na počítači běží canblaster démon. Ostatní počítače se mohou ke sběrnici připojovat přes TCP/IP. V CANmonitoru je proto třeba nastavit IP adresu stroje CANMON:
v menu Tools->Config
vybrat složku CANmond
nastavit
host
na 147.32.87.??? (přesná adresa bude sdělena na cvičení)Save&Exit
Dále File->Connect označit Show Rough Messages.
Testování CAN komunikace
Otestovat stav CAN řadiče na desce můžete mimo vaší aplikaci (vhodné např. pokud posílání/odesílání zpráv z aplikaci nejde) následovně:
Spusťte seyon
K sériovému portu je možné se na straně PC připojit příkazem
seyon -modems /dev/ttyS0
Pak je potřeba nastavit přenosovou rychlost 19200 baud (přes tlačítko Set-Baud v Seyone)
V případě, že seyon vypíše hlášku, že nemůže získat zámek, spusťte příkaz
clear_ttylock
Abyste viděli zadávané znaky z klávesnice v seyone, napište v seyonu (nebude to vidět)
ECHO:1
Zadejte (v seyone) příkaz pro poslání/příjem zpráv
Na desce implicitně běží aplikace (pokud ovšem vaše aplikace není nahrána a běží!) , která vykonává CAN příkazy ze standardního vstupu (v tomhle případě je to sériový port) zadané uživatelem ve správném formátu
/* CAN command examples can id1 0x123 data1 0x10 0x21 0x32 0x43 send1 can id4 0x000 data4 0x11 0x22 0x33 0x44 send4 can id4 0x75b2 data4 0x34 0x43 send4 can id3 0x411 data3 0xaa 0xbb 0xcc reply3 can id2 0x411r send2 can id1 0x123 data1 0x11 0x22 0x33 0x44 send1 can ide1 0x12345678 empty1 can ide0 0x12345678 data0 0x11 0x22 0x33 0x44 send0 can p can empty14 id14 0 mask14 0 can empty15 ide15 0 mask15 0 */
V canmonitoru lze nastavit ID a MASK položky pro příjem zpráv. Dle defaultního nastavení se přijímají všechny zprávy.
K dispozici je dán kód (jako inspirace - vyhledejte v něm a vykopírujte z něho úseky) pro testování funkcí modulu TouCAN (inicializace, odesílání, příjem zpráv, vypsání stavu kontroléru) v souboru tst_can.c z aplikace simple. Doporučuje se využít funkci
can_hw_init(1000000,0)
,která inicializuje kontrolér a nastaví komunikační rychlost.Podmínka pro příjem zprávy do bufferu
Zpráva je přijmuta do message bufferu za podmínky:
(ID.buffer XOR ID.received) AND MASK = 0
Notifikace přijetí zprávy
k dispozici jsou dva způsoby:
testovaní bitu v IFLAG registry korespondující danému message bufferu
vyvolání přerušení
Všechny připomínky k předmětu, obsahu stránek, objevené chyby v ukázkových programech apod. adresujte na autory:
- pisa (at) cmp.felk.cvut.cz
- molnam1 (at) fel.cvut.cz