/* This file is part of CanFestival, a library implementing CanOpen Stack. ____ _ _ _ / ___| / \ | \ | | ___ _ __ ___ _ __ | | / _ \ | \| |/ _ \| '_ \ / _ \ '_ \ | |___ / ___ \| |\ | (_) | |_) | __/ | | | \____/_/ \_\_| \_|\___/| .__/ \___|_| |_| |_| ____ _ / ___|__ _ _ __ __ _ __| | __ _ | | / _` | '_ \ / _` |/ _` |/ _` | | |__| (_| | | | | (_| | (_| | (_| | \____\__,_|_| |_|\__,_|\__,_|\__,_| canfestival@canopencanada.ca /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ See COPYING file for copyrights details. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MARKETING or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ CanFestival driver for the Philips ARM7 model LPC2138 , with a Philips SJA1000 CAN controler, and running on the eCOS operating system. Driver Features: Full CANfestival-3 support including: DS-150/205: CAN Power Management Layer specification (sleep/wake-up) DS-201: CAN low level layer DS-301: CANopen Application layer and Communication Profile (basic CANopen specification) DS-303-1: LED diagnostic usage (led.c) DS-305: Layer Setting Service (lss.c) to set the baudrateand node ID in a PnP fashion. NVRAM: Non Volatil Ram (nvram.c) Full support for internal Philips IAT programming FLASH mode To use this driver, you need to proceed to do all these steps. NB: We choose to leave this driver in .o object code to keep the capability to make on-the-fly redefinition of some parameters for all examples. Step 1 ----------- Have a developpement workstation. To build everything, we chose to use an old AMD K6/2-300Mhz running with FreeBSD-5.2-RELEASE freely available at http://www.freebsd.org/. To install freebsd, download the two floppy images from ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/5.2-RELEASE/floppies and copy them to a simple floppy disk by typeing: dd if=./image.dd of=/dev/fd0 dd if=./image2.dd of=/dev/fd0 and proceed to boot on them. You can use Linux or Windows also or any other O/S where you can use GCC. on FreeBSD, you need to configure the serial port by editing the /etc/rc/serial config file by adding this entry: lpc2000 () { # Philips LPC2000 serial port configuration for 57600 bauds connection. ci=$1; shift co=$1; shift for i in $* do # Lock clocal on, hupcl off. # XON-XOFF printer stty < /dev/ttyi${ci}${i} clocal -hupcl ixon -imaxbel -ixany -ixoff -crtscts 57600 stty < /dev/ttyl${ci}${i} clocal hupcl stty < /dev/cuai${co}${i} clocal -hupcl ixon -imaxbel -ixany -ixoff -crtscts 57600 stty < /dev/cual${co}${i} clocal hupcl done } ############### lpc2000 d a 0 1 # to configure COM1 and COM2, mean, /dev/cuaa0 and /dev/cuaa1 ############### Step 2 ----------- Find an upload tool to be able to flash the LPC2138. We found the lpc2isp at the address: http://guest.engelschall.com/~martin/lpc21xx/isp/index.html You can use this upload script to call it with proper arguments. #!/bin/sh lpc21isp -term -control build/terminal.hex /dev/cuaa1 57600 14746 Step 3 ----------- Proceed to build a GCC cross compiler to be able to produce ARM7TDMI compatible binary. Go to the port directory of your FreeBSD cd /usr/ports/devel/arm-elf-binutils gmake install cd /usr/ports/devel/arm-elf-gcc295 gmake install And add the installation binary PATH to your environment variables. cd /etc vi profile export PATH=$PATH:/usr/local/armelf/bin Step 4 ----------- Build an eCOS tree for the LPC2138. Download eCOS from http://www.ecoscentric.com and proceed to compile the configtool program. cd /usr/ports/devel/ecos-tools/ gmake install untar our special package for eCOS named eCOS-OLIMEX-p2138.tgz in the eCOS three on your files system. Start now your configtool for eCOS: configtool Choose the right target For our purpose, we choose to use an OLIMEX P2138 target board. This target is not in the list, we created it from a derivative of the OLIMEX P2106. We simply selected an other processor in the pulldown menu of the configtool. The LPC2138. Adjust some memory capacity, and that's it. When all you need is properly selected in the configtool, you click on Save_As and you suggest a name like My2138. After, you click on Generate Build Tree. cd My2138_build gmake depend gmake gmake install And now you have you own eCOS tree for your project in My2138_install Step 5 ----------- Prepare the hardware board for this project. We chose to use an http://www.olimex.com/ board, the P2138. Any other LPC2138 evaluation could made the job. On the P2138 board, we have a little area that we can use to solder the SJA1000 controler. See can_controler.gif to know how to solder all wires. Warning: If you want to use different GPIO (General Purpose Input Output) pin to fit with your own project, you can choose a different one, but you need to be sure to properly define then in the lpc2138_pinout.h Step 6 ----------- Put the CANfestival-3.tar.gz stuff in My2138_install/src/CANfestival-3 cd My2138_install/src/CANfestival-3 ./configure target=ecos-lpc2138-sja1000 gmake cd My2138_install/lib ln -s My2138_install/src/CANfestival-3/src/libcanfestival.a cd My2138_install/src ln -s My2138_install/src/CANfestival-3/driver/ecos-lpc2138-sja1000 Step 7 ----------- Now you are ready to build our demo. cd My2138_install/src/CANfestival-3/examples/DS-406Master_ecos gmake cd My2138_install/src/CANfestival-3/examples/TerminalSlave_ecos gmake Step 8 ----------- To test, upload both .hex file to both targets with lpc21isp and see the DS-406 absolut rotary encoder transmiting his absolute value to the terminal. For more info about this project, see http://www.oremeq.qc.ca/ Step 9 ----------- For your own project, you can copy all the examples files in your own directory and modify them. What is important to understand is: driver/ecos_lpc2138_sja1000: build_baudrate.c is a commande line tool to generate the proper timing file for your sja1000 regarding your sja1000 clk. see the Makefile for adjustment. canOpenDriver.c is the only link between the libcanfestival and the hardware. f_can_send f_can_receive interrupts nvram_save/load baudrate eCOS-OLIMEX-p2138.tgz eCOS package for the OLIMEX p2138 evaluation board you have to untar that files in your eCOS three. sja1000.c containe only function for initialization or configuration of the CAN controler. All this stuff is _not_ use by the libcanfestival. You have to call them from your main() to enable CAN with your needed configuration. hardware init lpc2138.c All the basic stuff to run the LPC2138 iat_flash user programmable internal flash of the lpc2138 lpc2138_pinout.h Is your LPC2138 pinout definition. Modify this file if you want to redefine your pinout affectation. time_slicer.c eCOS implementation of the CANfestival scheduler. settimer alarm applicfg.h is your configuration file for the libcanfestival lpc2138_pinout.h define all your GPIO to fit macros. objdictedit: Objdictedit will produce the dictionary. Generate your dictionnary. (Or use an already made YourFile.od with the tool: objdictgen.py The job is to implement all functions define in the YourFIle.c in your own project files. Enjoye!!!! Canopen Canada core team canfestival@canopencanada.ca