Documente Academic
Documente Profesional
Documente Cultură
Prepared BY
DEPARTMENT OF ECE
CONTENTS
Introduction to EMBEDDED SYSTEMS
EMBEDDED SYSTEMS LAB SYLLABUS
.....................1
EXPERIMENT NO.1
.....................2
EXPERIMENT NO.2
. . . . . . . . . . . . . . . . . . . . . 18
EXPERIMENT NO.3
. . . . . . . . . . . . . . . . . . . . . 28
EXPERIMENT NO.4
. . . . . . . . . . . . . . . . . . . . . 39
EXPERIMENT NO.5
. . . . . . . . . . . . . . . . . . . . . 43
EXPERIMENT NO.6
. . . . . . . . . . . . . . . . . . . . . 61
APPENDIX A
. . . . . . . . . . . . . . . . . . . . . 65
APPENDIX B
. . . . . . . . . . . . . . . . . . . . . 72
APPENDIX C
. . . . . . . . . . . . . . . . . . . . . 75
DEPARTMENT OF ECE
ii
baskarmtech@gmail.com
WHAT IS
AN
EMBEDDED
SYSTEM?
DEPARTMENT OF ECE
iii
baskarmtech@gmail.com
EMBEDDED SYSTEM
An Embedded System is a special-purpose computer system designed to
perform one or a few dedicated functions. In contrast, a general-purpose
computer, such as a personal computer, can do many different tasks
depending on programming. . It is usually embedded as part of a
complete device including hardware and mechanical parts. Embedded
systems control many of the common devices in use today.
The main difference between an embedded controller and a PC is that the embedded controller
is dedicated to one specific task or set of tasks. A PC is designed to run many different types of
programs and to connect too many different external devices. An Embedded controller has a
single program which includes the computing power and the hardware to perform that dedicated
task. An Embedded Controller is reasonably priced compared to that of a PC .A PC has a
relatively expensive generalized central processing unit (CPU) at its heart with many other
external devices (memory, disk drives, video controllers, network interface circuits, etc.).
An embedded system has a low-cost microcontroller unit (MCU) for its intelligence, with many
peripheral circuits on the same chip, and with relatively few external devices. Often, an embedded
system is an invisible part, or sub-module of another product, such as a cordless drill, refrigerator or
garage door opener. The controller in these products performs a small function in the entire device.
The controller adds low-cost intelligence to some of the critical sub-systems in these devices.
Embedded systems are not always separate devices. Most often they are physically built-in
(Embedded) to the devices they control. It is a combination of both HARDWARE and SOFTWARE.
DEPARTMENT OF ECE
EXAMPLE
Washing Machines, CD-player, and Cooker
PCs, Laser Printers, Fax Machines, Intelligent Telephones
Mobile, Data transmission
Elevators, Conveyors
Medical, Military, Security system, Robotics
iv
baskarmtech@gmail.com
HISTORY OF PROCESSOR
The first microprocessor for example, the Intel 4004, was designed for
calculators and other small systems but it required more of external memory and
support chips. It was a simple calculator which could only add and subtract
numbers, 4 bits (a nibble) at a time. 4040 chip was very successful that it was
soon followed by Intels 8-bit 8008 microprocessor. It was a simple
microprocessor
with
limited
resources,
poorly
implemented
interrupt
mechanisms, and multiplexed address and data busses. The first very powerful
8-bit microprocessor appeared in early 1974 as the Intel 8080 chip. This microprocessor had
separate address and data busses with 64 Kbyte of address space which was enormous in
1975 standards. 8080 microprocessor was the first microprocessor used in homes as a
personal computer named Altair.
Motorola introduced the 8-bit 6800 chip which had a different architecture to that of the 8080 but has
also been very popular. In 1976, Zilog introduced the Z80 microprocessor which was very much
advanced than the 8080. The instruction set of Z80 was downward compatible with the 8080 and this
made Z80 to be one of the most successful microprocessors of that time. Z80 was used in many
microprocessor-based applications, including home computers and games consoles. In 1976,
Motorola created a microprocessor chip called 6801 which replaced a 6800 chip plus some of the
chips required to make a complete computer system. This was a major step in the evolution of the
microcontrollers which are basically computers consisting of only one chip. In later years, we see
many other micro-controller chips in the market, such as Intel 8048, 8049, 8051, Motorola 6809,
A Microcontroller is a single chip computer .Micro suggests that the device is small and controller
suggests that the device can be used in control applications. Another term used for
microcontrollers is embedded controller, since most of the microcontrollers are built into (or
embedded in) the devices they control. A microprocessor differs from a microcontroller in many
DEPARTMENT OF ECE
baskarmtech@gmail.com
ways. The main difference is that a microprocessor requires several other components for its
operation, such as program memory and data memory, I/O devices, and external clock circuit.
A microcontroller on the other hand has the entire support chips incorporated inside the
same chip. All microcontrollers operate on a set of instructions (or the user program) stored
in their memory. A microcontroller fetches the instructions from its program memory one by
one, decodes these instructions, and then carries out the required operations.
A smaller computer
On-chip RAM, ROM, I/O ports...
Example :Motorolas 6811, Intels 8051, Slogs Z8 and PIC 16X
RAM
ROM
CPU
TIM E R
S IN G L E C H IP
IO P O R T S
vi
baskarmtech@gmail.com
requiring few other external devices. This single device can then be embedded into other
electronic and mechanical devices for low-cost digital control.
Since PIC is a RISC microcontroller, it has a reduced set of instructions, more precisely 35
instructions. (Ex. Intel's and Motorola's microcontrollers have over hundred instructions) All
of these instructions are executed in one cycle except for jump and branch instructions.
HARVARD ARCHITECTURE
DEPARTMENT OF ECE
vii
8, 14, 16
baskarmtech@gmail.com
VON-NEUMANN ARCHITECTURE
MEMORY
CPU
(DATA
PROGRAM)
MEMORY UNIT
PROGRAM MEMORY (FLASH)
The Program memory is used to store a written program. Since memory made in FLASH
technology can be programmed and cleared more than once, it makes this microcontroller
suitable for device development. Program memory is the space where your PIC BASIC program
resides. Those sizes 0.5k, 1k, 2k , 4k, and 8kare the program memory sizes for the majority
of the PIC devices. Program memory in a PIC is actually 14 bits wide even though PICs are
considered 8-bit microcontrollers. The 8-bit terminology comes from the data memory buss,
which is 8 bits wide. A 14-bit-wide memory is commonly referred as bytes even though a byte by
definition is 8 bits wide. Microchip names the 14-bit-wide addresses as Words even though a
word is 16 bits long. On a 0.5k PIC, the memory moves from 0000h to 01ffh (0 to 511 decimal,
14-bit wide words). A 1k part is 0000h to 03ffh, and a 2k part is 0000h to 07ffh.
DEPARTMENT OF ECE
viii
baskarmtech@gmail.com
RAM
RAM (Random Access Memory) is the Data memory used by programs during execution. RAM
stores all inter-results or temporary data during run-time. Data memory is where all your variables are
stored. The data memory is 8 bits wide, and so the PICs are considered 8-bit microcontrollers.
PROGRAM MEMORY
MEMORY
DATA MEMORY
DEPARTMENT OF ECE
ix
baskarmtech@gmail.com
1.
Open source software such as Linux flavors will be used. Ability to use industry standard tools
for Verification and validation.
Using Linux Operating System (VI Editor) developing some set of programs in high
level language (C).
2.
High level language programming (c, c++ & Java) and porting it on a processor.
I/O Porting using the external peripheral devices in ARM9 Processor (LED Display, SEVEN
SEGMENT Display, KEYPAD).
3.
4.
5.
6.
T.M.Baskar baskarmtech@gmail.com
EXPERIMENT 1:
Open source software such as Linux flavors will be used. Ability to use
industry standard tools for Verification and validation.
AIM: To Port a compressed Embedded Linux kernel image (Linux 2.6 Kernel) to
the RAM of ARM9 Processor and network the Linux-bootable ARM9 Single Board
Computer to PC through Ethernet to display a message.
TYPE OF PROTOBOARD USED: EXPLORER ARM-9
DEVELOPMENT BOARD
Select
workspace
&
Click OK
T.M.Baskar baskarmtech@gmail.com
Then clickProject
New
T.M.Baskar baskarmtech@gmail.com
In the Project Name field, type name of the project asdisplay. Do not use
spacesor special characters in the project name.
T.M.Baskar baskarmtech@gmail.com
Select the Build options as SDRAM, Download options as ISP Utility, Debug as
MONITOR.
You can also change the location of project. For that, uncheck use
default location and then browse your location.
Enter the
various fields
&
Click NEXT
Below screen will appear, Debug and Release configurations would be checked.
Select the type of project that you want to build. By default Project Type is
Executable (Gnu)
T.M.Baskar baskarmtech@gmail.com
Uncheck
debug mode
& click
FINISH
Debug-Project can be debugged on target board using serial JTAG and Ethernet
Release-Project is run on Target board without debugging
Uncheck the debug and click FINISH
The project is created and opened in the IDE. You should see the
following components:
To create a new file, CLICK FILE > NEW > SOURCE FILE
Browse the source folder location & enter source filename display.c
T.M.Baskar baskarmtech@gmail.com
Select new
Source File
The
Enter your
Project
Code here
T.M.Baskar baskarmtech@gmail.com
You can double click the display.c tab in the Editor view to expand the view.
/**************************************************************
Display.c
***************************************************************/
#include<stdio.h>
int main()
{
int i = 0; for(;i<5;i++)
{
printf("\n%d HDL SOLUTIONS...",i);
}
return 0;
}
********************************************************************
Save thedisplay.cby choosingFile > Save.
You will notice an asterisk in front of the file name on the tab in the Editor view
(Workspace). The asterisk indicates that the file has changed, but has not been
saved. So, save the file for every modification in the program.
To compile project you need to select Release mode.
Debug mode: This creates an executable hex file which you, after downloading
on the target board, are able to debug.
Release mode: This creates an executable hex file which you can download
on the target board, but you wont be able to debug.
To build project in Release mode---Right click on the DISPLAY project and point to Active Build Configuration
and select Release as shown in the below screen
If there are any errors in the project Build Console view will display the error
messages and from Build Output view you can check the location of errors in your
code. When you build the project, the display.hex is generated
T.M.Baskar baskarmtech@gmail.com
Select the
Release mode
& Build your
Project
T.M.Baskar baskarmtech@gmail.com
Open Triton IDE; from TOOLS menu, click Hyper terminal and set the Baud
rate as 38400
10
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
12
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
enter
Minimize the run mode and open the HyperTerminal window
Type ./display.out then enter, you will see the output message on hyper terminal
window
14
T.M.Baskar baskarmtech@gmail.com
15
T.M.Baskar baskarmtech@gmail.com
16
T.M.Baskar baskarmtech@gmail.com
RESULT:
We create the open source software in C/C++ and implement to the ARM9 Linux Boot Shell with
simple printing our message in Linux kernel. We are able to create source codes for Mutex,
Semaphore, Fork, Pipes, Message Send & Receiving and Socket Server Programming, etc.,. (Refer:
Appendix A)
17
T.M.Baskar baskarmtech@gmail.com
EXPERIMENT 2:
High level language programming (C, C++) and porting it on a processor.
Aim: To implement the I/O Porting using the external peripheral devices in ARM7
Processor (UART, STEPPER MOTOR, Graphical LCD Display, LED Display,
SEVEN SEGMENT Display, KEYPAD, ADC/DAC, SD/MMC, I2C, SPI, I2S,
CAN, LIN, USB, PCI, Ethernet).
TYPE OF PROTOBOARD USED: Spirit-II / Voyager II ARM-7 Protoboard
HOW TO START WITH TRITON IDE
Double click on the icon-Triton on your Desktop
Select the workspace in which you can create all your
projects as shown in the figure below. Click OK.
Triton IDE C/C++ Environment opens as shown in below figure in which you can
create new project, open existing one etc.
Select
workspace
&
Click OK
T.M.Baskar baskarmtech@gmail.com
Then clickProject
New
Select
New
C project
In the Project Name field, type name of the project asLED. Do not use spaces
orspecial characters in the project name.
Select the Target as per the board you have. i.e.ARM7
Select the Variant from the variant list. i.e.LPC2148
Select Operating System as per your requirement. Here we should select
NONE as the operating system
Select the Port from Port field. i.e.COM1
Select the Baud Rate from dropdown list.i.e.38400
Select the Build options as ROM, Download options as ISP Utility, Debug as
MONITOR. You can also change the location of project. For that, uncheck use
default location and then browse your location.
Check Create Project Using Template. then click NEXT
19
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
Enter the
various fields
&Click NEXT
21
T.M.Baskar baskarmtech@gmail.com
Uncheck
debug
mode &
Enter your
Project
Code here
To build project in Release mode---Right click on the LED project and point to Active Build Configuration
22
T.M.Baskar baskarmtech@gmail.com
Select the
Release mode
& Build your
Project
Open the build console view to check for any errors as shown in the
23
T.M.Baskar baskarmtech@gmail.com
belowfigure.
24
T.M.Baskar baskarmtech@gmail.com
Here LED.hex file is created which is to be downloaded on target board and run the
program. Right click on the LED.hex file generated and click Download as shown
below.
25
T.M.Baskar baskarmtech@gmail.com
Connect the hardware kit with the serial connector and power supply provided. Switch
on the hardware kit. Put the switch in ISP mode for the program to be downloaded.
Right click on the LED.hex file and download the executable file on to the board.
Once, the program is downloaded, shift the mode from ISP to RUN and reset the
board to verify the output.
T.M.Baskar baskarmtech@gmail.com
NAME OF
INTERFACES
LED-input
Switch-output
8 LEDs on by
DIP switch
BUZZER
PIN
CONFIGURATION
LED (P0.15 to P0.22)
Switch (P0.2 to P0.6)
& (P0.8 to P0.10)
Buzzer (P0.7)
Buzzer-output
RELAY
Relay (P1.26)
Relay-output
Connect JP8 to
ON /OFF buzzer
Connect CN14 (3
pin connector )to
ON relay
OUTPUT
STATUS
SETTINGS &
DESCRIPTIONS
RESULT:
We create and implement the simple I/O Porting with LEDs using the GPIO ports in
ARM7 Processor. We are able to create and I/O porting of the peripherals likes LED &
DIP- SWITCH, BUZZER, and RELAY.
27
T.M.Baskar baskarmtech@gmail.com
EXPERIMENT 3:
Create FSM of a typical application and implement on an FPGA.
AIM: To create the Finite State Machine for Traffic Light Controller and
implement using Xilinx Spartan 3 (XC3S400) FPGA. Traffic Light controller is
implemented on FPGA and verified using Traffic Light Interface Module. There are
simple rules for traffic lights on one node, and complex ways of regulating a whole
infrastructure of them. It is necessary to adjust general algorithms.Spartan-3 - IM
includes a TRAFFIC LIGHT Interface Module. This module is interfaced to the
Trainer using 60 pin FRC cable.
DESIGN DESCRIPTION:Initially all Red Lights will be ON (South, West, North, East, Pedestrian)
Green Lights will be ON , Right, Left & Straight paths are free for Traffic.
Yellow Phase will be ON, respective left & pedestrian paths are free for
traffic. Same flow is repeated for all four paths. (South, west, north, east).
Flowchart:-
28
T.M.Baskar baskarmtech@gmail.com
Algorithm is implemented in VERILOG with a 13 state Finite State Machine. Refer Fig
Abbreviation used:
South
West
RS Right South
RW Right West
LS Left South
LW Left West
SS Straight South
SW South West
YS Yellow South
YW Yellow West
29
T.M.Baskar baskarmtech@gmail.com
East
RN Right North
RE Right East
LN Left North
LE Left East
SN Straight North
SE Straight East
YN - Yellow North
YE Yellow East
30
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
32
T.M.Baskar baskarmtech@gmail.com
WORK
SPACE
SOURCE
WINDOW
TRANSCRIPT
PROCESS
WINDOW
Create a new ISE project which will target the FPGA device on the
Spartan-3 IM demo board.
To create a new project:
1. Select File > New Project... The New
Project Wizard appears. 2. Type tutorial in the
Project Name field.
3 Enter or browse to a location (directory path) for the new
project. A tutorial subdirectory is created automatically.
Verify that HDL is selected from the Top-Level Source Type list.
Click Next to move to the device properties page.
Enter the Project Name and Location , then click NEXT
33
T.M.Baskar baskarmtech@gmail.com
Speed Grade: -4
Top-Level Source Type: HDL
Synthesis Tool: XST (VERILOG/Verilog)
Simulator: ISE Simulator (VERILOG/Verilog)
Preferred Language: Verilog (or VERILOG)
Verify that Enable Enhanced Design Summary is selected. Leave the default values in the
remaining fields. Clicknextto proceed to the Create New Source window in
the New ProjectWizard. At the end of the next section, your new project will
be complete.
34
T.M.Baskar baskarmtech@gmail.com
35
T.M.Baskar baskarmtech@gmail.com
Declare the ports for the counter design by filling in the port
information as shown below:
7. Click next,
36
T.M.Baskar baskarmtech@gmail.com
7. Click next, and then Finish in the New Source Wizard - Summary dialog
box to complete the new source file template.
8.
Click Next, then Next, then Finish.
The source file containing the entity/architecture pair displays the Workspace,
and the counter displays in the Source tab, as shown below:Click on the
symbol of FPGA device ,then right click to select New source Write the
VERILOG code in VERILOG editor
37
T.M.Baskar baskarmtech@gmail.com
constraint file specifies the FPGA pins used for accessing the
design.
Step 2: To create new UCF file. Right click on the device name and select NEW SOURCE
Select
IMPLEMENTATION CONSTRAINT FILE in NEW SOURCE WIZARD and
give suitable name for the Project. Click NEXT for the DEFINE MODULE
Window.
Step 3: Click on the UCF File (Traffic_Light.ucf) and Select the Edit Constraints
(Text).
Write the constraint file as shown in figure below. For implementing your
design, from
the source window select Generate Programming File from the process
menu
Step 4: Procedure for downloading using iMPACT Boundary Scan Mode
Right click on Configure Device (iMPACT) -> and Say RUN or Double
click on Configure Device (iMPACT) .
Right click in workspace and select Initialize chain .The device is seen.
Right click on the device and select Program .
RESULT:
We had done the Finite State Machine for Traffic Light Controller and
implement using Xilinx Spartan 3 (XC3S400) FPGA.
38
T.M.Baskar baskarmtech@gmail.com
EXPERIMENT 4:
Application development, download partition between FPGA and ARM
on Performance characteristics.
AIM: To create and analyze performance between ARM and FPGA
Processor application using a simple 4-bit counter program.
TYPE OF PROTOBOARD USED: Herculis ARM-FPGA Fusion Board
PROCEDURE:
1.
Create and Generate the Hex file for 4 bit Counter C / C++ program
with Triton IDE.
/************************************************************
ARM_Counter.c
************************************************************/
#define
ALL
0x00FF0000 #define
ALL
0x00FF0000
#include<LPC21xx.h>
void delay (unsigned
int); int main(void)
{
*IODIR0=0x0000200
0;
*IODIR1=0x00FF00
00;
*IOCLR1=0x00FF00
00;
*IOSET1=0x00FF00
00;
*IOCLR0=0x000020
00;
//*IOSET0=0x000020
00;
while(1)
{
*IOSET1=0x00010000; //1 delay(400000); *IOCLR1=0x00FF0000;
delay(150000); *IOSET1=0x00040000; //2 delay(400000);
*IOCLR1=0x00FF0000; delay(150000); *IOSET1=0x00050000; //3
delay(400000); *IOCLR1=0x00FF0000; delay(150000);
*IOSET1=0x00020000; //4 delay(400000);*IOCLR1=0x00FF0000;
delay(150000); *IOSET1=0x00060000; //5 delay(400000);
*IOCLR1=0x00FF0000; delay(150000); *IOSET1=0x00030000; //6
delay(400000); *IOCLR1=0x00FF0000; delay(150000);
*IOSET1=0x00070000; //7 delay(400000); *IOCLR1=0x00FF0000;
delay(150000); *IOSET1=0x00080000; //8 delay(400000);
*IOCLR1=0x00FF0000; delay(150000); *IOSET1=0x00090000; //9
39
T.M.Baskar baskarmtech@gmail.com
2.
FPGA_Counter.vhd
************************************************************/
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use
IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fpga_counter is
Port ( RESET : in
STD_LOGIC;
CLK_4M : in
STD_LOGIC;
COUNTER : out STD_LOGIC_VECTOR (4 downto
0)); end fpga_counter;
architecture Behavioral of fpga_counter is
SIGNAL CLKDIV : STD_LOGIC_VECTOR(30 DOWNTO 0);
SIGNAL CNTR : STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL en0,en1,en2,en3 : STD_LOGIC;
begin
40
T.M.Baskar baskarmtech@gmail.com
41
T.M.Baskar baskarmtech@gmail.com
RESULT:
We create and analyze performance between ARM and FPGA Processor
with 4-bit counter application by Xilinx ISE and Triton. Then, verify the
speed and performance of Counter on ARM+FPGA Fusion Board. We able
to create applications like UART and RTC based application on Fusion
Board similarly.
42
T.M.Baskar baskarmtech@gmail.com
EXPERIMENT 5:
Application development & Hardware and Software Partitioning.
AIM: To Partition the FPGA using SOC concept and implement a simple 4bit Counter program with a Embedded Core
TYPE OF PROTOBOARD USED: Herculis ARM-FPGA Fusion Board
Introduction
This lab guides you through the process of using Xilinx Platform
Studio (XPS) to create a simple processor system. An MHS file and
design netlists will be created.
Objectives
After completing this lab, you will be able to:
Create an XPS project by using Base System Builder (BSB)
Create a Counter hardware design by using Xilinx IPs available in the
Embedded Design Kit
Procedure
This lab comprises three primary steps: You will create a project using
Base System Builder, analyze the project created, and generate the
processor system netlists. Below each general instruction for a given
procedure, you will find accompanying step-by-step directions and
illustrated figures providing more detail for performing the general
instruction. If you feel confident about a specific instruction, feel free to
43
T.M.Baskar baskarmtech@gmail.com
Step 1
Xilinx Platform
Do not select Platform Studio SDK; this opens the Software Development Kit IDE.
2.
44
T.M.Baskar baskarmtech@gmail.com
Figure 1-3. Create New Project Using Base System Builder Wizard Dialog Box
Figure 1-4. Select I would like to create a system for custom board
T.M.Baskar baskarmtech@gmail.com
46
T.M.Baskar baskarmtech@gmail.com
47
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
49
T.M.Baskar baskarmtech@gmail.com
Step 2
Under the Project tab, study the created project files and view the
project in block diagram view.
Figure 2-1.
Under the XPS Project tab, click on Generate and view Block
Diagram to open a block diagram view Observe the various
components that are used in the design
50
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
________________________________________________
________________________________________________
Notice that you can change the parameters (such as base
address, address range, or C_BAUDRATE) here to reflect the
design specifications.
Close the block diagram view without saving any changes
The block diagram viewer is useful for viewing the overall system
and bus connectivity. For more detail, you will utilize other tools.
Step 3
Accessories
Programs
Windows Explorer
wrappers
and
Step 4
52
T.M.Baskar baskarmtech@gmail.com
Step 5
Writing C code
Step 6
53
T.M.Baskar baskarmtech@gmail.com
FPGA_Counter.vhd
************************************************************/
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use
IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fpga_counter is
Port ( RESET : in STD_LOGIC;
CLK_4M : in STD_LOGIC;
COUNTER : out STD_LOGIC_VECTOR (8 downto 0));
end fpga_counter;
architecture Behavioral of fpga_counter is
SIGNAL CLKDIV : STD_LOGIC_VECTOR(30 DOWNTO 0);
SIGNAL CNTR : STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL en0,en1,en2,en3 : STD_LOGIC;
54
T.M.Baskar baskarmtech@gmail.com
Programs
Xilinx ISE
40.Impact project dialog box will open. Select create a new project
(.ipf) option and click on OK. This will open Welcome to iMPACT
dialog box.
56
T.M.Baskar baskarmtech@gmail.com
In the Assign New Configuration File, select the download.bit file from
implementation directory of your ISE project. Click on Open. The
download.bit file will be assigned to the FPGA. Right click on the
device and Click on Program to configure the FPGA with
download.bit file. Download the download.bit file in to
ARM+FPGA Fusion Board. Now check the FPGA Counter output
in LD1 to LD4 for software-hardware partitioned output ie., through
embedded core of FPGA and LD5 to LD8 for direct FPGA output.
Base System Builder can be used in XPS to create a project. Several files
including an MHS file representing the processor system and a PBD file
representing the schematic vieware created. After the system has been
defined, the netlist of the processor system can be created.
Answers
Right-click the top LEDS block, configure IP and go through the
57
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
T.M.Baskar baskarmtech@gmail.com
Completed .c File
#include
"xparameters.h"
#include "xutil.h"
#include "xio.h"
#include "xgpio_l.h"
main ()
{long count = 0, i; while(1){XGpio_mSetDataReg(XPAR_LEDS_BASEADDR, 1,
count); count = count + 1;
for(i=0; i<10000000; i++);
}}
RESULT:
We create an embedded core through software partitioning of the actual hardware and
implement a simple 4-bit counter application by Xilinx EDK Tool. Then verify the speed
and performance of Partition on FPGA processor. In these Xilinx EDK, performs many
kind of processing in Partitioning.
60
T.M.Baskar baskarmtech@gmail.com
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXPERIMENT 6:
Implementation of a wireless communication protocol on an
embedded system
AIM: To implement wireless communication protocol (like. ZigBee /
Bluetooth / RF) on an Embedded System.
PROCEDURE FOR ZIGBEE
Aim: To Interface a ZigBee module with ARM7
TYPE OF PROTOBOARD USED:
Spirit-II/Voyager-II ARM-7 Protoboard 2 Nos
Zigbee Transceiver Pair
- 1 Pair
Theory of Operation: Zigbee is a specification for a suite of high level
communication protocols using small, low powered digital radios based on
IEEE 802.15.4-2003 standard and are used extensively for Wireless Home
Area Networks (WHANs), such as wireless light switches with lamps,
electrical meters with in-home displays etc. ZigBee is targeted towards at
RF applications that require a low data rate, long battery life and secure
networking.
Procedure and Observation:
Open Triton IDE.
Select a workspace and create a new Project ZIGBEE_LPC2148
Write in the program for ZIGBEE_LPC2148 as provided in the
Documentation CD and ignore step 3 or else click File menu -> Add Project
->Existing Project into Workspace and click next.
If importing project browse the Documentation CD and
select ZIGBEE_LPC2148 and also check option Copy projects into
workspace and click finish.
Save the file, build the Project in Release Mode and generate hex file
(ZIGBEE_LPC2148.hex)
Download the hex file to ARM7 Board.
Disconnect ARM7 UART1 from the PCs COM port.
Connect the ZigBee module to ARM7 board using the provided male
to male serial cable.
Attach USB A to B cable between PCs USB port and the USB
connector on ARM7 Processor add-on board.
10.Repeat steps 6, 7, 8 and 9 for another ARM7 board.Slide RUN/ISP
switch into Run mode and press momentarily.Once the initialization is
over type anything into one hyper terminal and that will be visible in the
other hyper terminal.
61
T.M.Baskar baskarmtech@gmail.com
RESULT:
We interfaced two ZigBee modules to two separate ARM7 protoboards
and established communication between them. These ZigBee modules can
be configured in various Network Topologies and are a drop-in replacement
wireless application such as Home Automation and Wireless Sensor
Networks. (Refer Appendix C)
B) PROCEDURE FOR BLUETOOTH
Aim: To Interface a Bluetooth connected to ARM7 with a Computer
TYPE OF PROTOBOARD USED:
Spirit-II/Voyager-II ARM-7 Protoboard 1 No.
Bluetooth Interface Module with dongle - 1 No.
Theory of Operation: Conceived by Ericsson in 1994 as a wireless
replacement to RS232 bluetooth today is a wireless technology for
exchanging data over short distances (using short wavelength radio
transmissions) and creating PANs (Personal Area Networks) with high
levels of security. Utilizing the frequency hopping spread spectrum the
modulation details of which are as under
Basic data rate
1Mbit/s
GFSK (Gaussian Frequency Shift
Keying)
Extended Rate
2 Mbit/s
/4 DPSK (Differential Phase Shift
Keying)
Extended Rate
3 Mbit/s 8 DPSK (Differential Phase Shift Keying)
Procedure and Observation:
Open Triton IDE.
Select a workspace and create a new Project Bluetooth_LPC2148
1.
Write in the program for Bluetooth_LPC2148 as provided in the
Documentation CD and ignore step 3 or else click File menu -> Add Project
->Existing Project into Workspace and click next.
2.
If importing project browse the Documentation CD and
select .Bluetooth_LPC2148 and also check option Copy projects into
workspace and click finish. Save the file, build the Project in Release Mode
and generate hex file (Bluetooth_LPC2148.hex) Download the hex file to
ARM7 Board and Disconnect ARM7 UART1 from the PCs COM port.
3.
Connect the Bluetooth module to ARM7 board using the provided
male to male serial cable. Attach USB A to B cable between PCs USB port
and the USB connector on ARM7 Processor add-on board. Slide RUN/ISP
switch into Run mode and press momentarily and Power on the bluetooth
addon board.If Computer finds a new device and asks for drivers browse
and upload the drivers for this cable provided in the Documentation CD.
4.
Check the virtual COM port number on device manager.Open a
62
T.M.Baskar baskarmtech@gmail.com
Hyper terminal with the found COM port number and select baud rate as
115200.
5.
Connect the provided USB Bluetooth Dongle to any of the
Computers free USB port.Wait for the automatic installation of the
bluetooth software.Double click the bluetooth icon visible in the system tray
and use the software for searching and connecting to the bluetooth module.
6.
If asked for a passkey the default passkey is 8888.When connected
open the device manager to again see the assigned outgoing COM port
number.Open hyper terminal for the COM port and type anything. This will
be visible on another HT.
RESULT:
File transfer between a PC and ARM7 Protoboard through Bluetooth
Interface is studied.
C) PROCEDURE FOR RF MODULE
1.
2.
3.
4.
5.
6.
T.M.Baskar baskarmtech@gmail.com
64
T.M.Baskar baskarmtech@gmail.com
Appendix A
DEPARTMENT OF ECE
65
baskarmtech@gmail.com
}
else{ brea
k;
}
}
}
pthread_mutex_unlock(&mutex);
printf("waiting for thrd to finish...\n"); res =
pthread_join(thrd,&thread_res); if(res != 0){
printf("thread join failed\n");
exit(EXIT_FAILURE);
}
printf("Thread joined\n");
pthread_mutex_destroy(&mutex);
exit(EXIT_SUCCESS);
}
void *thread_func(void *arg)
{
sleep(1); pthread_mutex_lock(&mutex);
while(strncmp("end",warea,3) != 0){
printf("No. of characters = %d \n",strlen(warea) - 1); warea[0] = '\0';
pthread_mutex_unlock(&mutex);
sleep(1); pthread_mutex_lock(&mutex);
while(warea[0] == '\0') {
pthread_mutex_unlock(&mutex);
sleep(1); pthread_mutex_lock(&mutex);
}
}
time_to_exit = 1;
warea[0] = '\0';
pthread_mutex_unlock(&mutex);
pthread_exit(0);
}
/***************************************************************
Semaphore.c
***************************************************************/
#include <stdio.h> #include
<unistd.h> #include
<stdlib.h> #include
<string.h> #include
<pthread.h> #include
<semaphore.h>
void *thread_func(void *arg); sem_t
sem;
#define WORK_SIZE 50 char
warea[WORK_SIZE];
int main()
{
int res;
pthread_t thrd;
void *thread_res;
DEPARTMENT OF ECE
66
baskarmtech@gmail.com
DEPARTMENT OF ECE
67
baskarmtech@gmail.com
DEPARTMENT OF ECE
68
baskarmtech@gmail.com
DEPARTMENT OF ECE
69
baskarmtech@gmail.com
DEPARTMENT OF ECE
70
baskarmtech@gmail.com
DEPARTMENT OF ECE
71
baskarmtech@gmail.com
Appendix B
/***************************************************************
LED_main.c
***************************************************************/
#define ALL 0x007f8000
#define ALL 0x007f8000
#include<LPC21xx.h>
void delay (unsigned int);
int main(void)
{
*IODIR0=ALL;
*IOCLR0=ALL;
while(1)
{
*IOSET0= ALL;
delay(150000);
*IOCLR0=ALL;
delay(150000);
/
/
/
/
}return 0;
}
void delay(unsigned int count)
{
while(count!=0)
count--;
}
/***********************************************************************
DIP_SWITCH.c
************************************************************************/
#include <lpc21xx.h>
int main(void)
{
*IODIR0=*IODIR0 | 0X000000F7C;
*IOSET0 = 0X000000F7C;
int i;
whil
e(1)
{
*IODIR0 =*IODIR0 | 0x007f8000; //Set Direction of LED
*IOCLR0 = 0x007f8000; //Clear all LED's
*IOSET0 = ((*IOPIN0 & 0X000000F7C) << 12);
for(i=0;i<200000;i++);
for(i=0;i<20000;i++);
}
return 0;
}
*IOSET0 = 0X000000F7C;
DEPARTMENT OF ECE
72
baskarmtech@gmail.com
DEPARTMENT OF ECE
73
baskarmtech@gmail.com
}
return 0;
}
DEPARTMENT OF ECE
74
baskarmtech@gmail.com
Appendix C
A) ZIGBEE
#include <string.h>
// memcpy
#include "type.h"
#include "target.h"
#include "usbdebug.h"
#define LPC214x
#ifdef LPC214x
#include "lpc214x.h"
#endif
#ifdef LPC23xx
#include "lpc23xx.h"
#endif
#include "armVIC.h"
#include "uart.h"
#include "usbapi.h"
#include "serial_fifo.h"
#define MODE_ZIGBEE
#if defined(MODE_BLUETOOTH)
#define UART_BAUD_RATE
115200
#elif defined(MODE_ZIGBEE) || defined(MODE_WIFI)
#define UART_BAUD_RATE
9600
#endif
#define INT_IN_EP
0x81
#define BULK_OUT_EP
0x05
#define BULK_IN_EP
0x82
#define MAX_PACKET_SIZE
64
#define LE_WORD(x)
((x)&0xFF),((x)>>8)
// CDC definitions
#define CS_INTERFACE
0x24
#define CS_ENDPOINT
0x25
#define
SET_LINE_CODING
0x20
#define
GET_LINE_CODING
0x21
#define
SET_CONTROL_LINE_STATE
0x22
#define
INT_VECT_NUM 0
#define IRQ_MASK 0x00000080
// data structure for GET_LINE_CODING / SET_LINE_CODING class requests
typedef struct {
U32
dwDTERate;
U8
bCharFormat;
U8
bParityType;
U8
bDataBits;
} TLineCoding;
static TLineCoding LineCoding = {115200, 0, 0, 8};
static U8 abBulkBuf[64];
DEPARTMENT OF ECE
75
baskarmtech@gmail.com
76
baskarmtech@gmail.com
77
baskarmtech@gmail.com
DEPARTMENT OF ECE
78
baskarmtech@gmail.com
79
baskarmtech@gmail.com
80
baskarmtech@gmail.com
81
baskarmtech@gmail.com
82
baskarmtech@gmail.com
83
baskarmtech@gmail.com
84
baskarmtech@gmail.com
//
//
//
//
return 0;
} /**
End of file.
*/
DEPARTMENT OF ECE
85
baskarmtech@gmail.com
B) BLUETOOTH
#include <string.h>
// memcpy
#include "type.h"
#include "target.h"
#include "usbdebug.h"
#define LPC214x
#ifdef LPC214x
#include "lpc214x.h"
#endif
#ifdef LPC23xx
#include "lpc23xx.h"
#endif
#include "armVIC.h"
#include "uart.h"
#include "usbapi.h"
#include "serial_fifo.h"
#define MODE_ZIGBEE
#if defined(MODE_BLUETOOTH)
#define UART_BAUD_RATE
115200
#elif defined(MODE_ZIGBEE) || defined(MODE_WIFI)
#define UART_BAUD_RATE
9600
#endif
#define INT_IN_EP
0x81
#define BULK_OUT_EP
0x05
#define BULK_IN_EP
0x82
#define MAX_PACKET_SIZE
64
#define LE_WORD(x)
((x)&0xFF),((x)>>8)
// CDC definitions
#define CS_INTERFACE
0x24
#define CS_ENDPOINT
0x25
#define
SET_LINE_CODING
0x20
#define
GET_LINE_CODING
0x21
#define
SET_CONTROL_LINE_STATE
0x22
#define
INT_VECT_NUM 0
#define IRQ_MASK 0x00000080
// data structure for GET_LINE_CODING / SET_LINE_CODING class requests
typedef struct {
U32
dwDTERate;
U8
bCharFormat;
U8
bParityType;
U8
bDataBits;
} TLineCoding;
static TLineCoding LineCoding = {115200, 0, 0, 8};
static U8 abBulkBuf[64];
DEPARTMENT OF ECE
86
baskarmtech@gmail.com
87
baskarmtech@gmail.com
88
baskarmtech@gmail.com
89
baskarmtech@gmail.com
/**
Sends the next packet in chain of packets to the host
@param [in] bEP
@param [in] bEPStatus
*/
static void SendNextBulkIn(U8 bEP, BOOL fFirstPacket)
{
int iLen;
// this transfer is done
fBulkInBusy = FALSE;
// first packet?
if (fFirstPacket) {
fChainDone = FALSE;
}
// last packet?
if (fChainDone) {
return;
}
// get up to MAX_PACKET_SIZE bytes from transmit FIFO into
intermediate buffer
for (iLen = 0; iLen < MAX_PACKET_SIZE; iLen++) {
if (!fifo_get(&txfifo, &abBulkBuf[iLen])) {
break;
}
}
// send over USB
USBHwEPWrite(bEP, abBulkBuf, iLen);
fBulkInBusy = TRUE;
// was this a short packet?
if (iLen < MAX_PACKET_SIZE) {
fChainDone = TRUE;
}
}
/**
Local function to handle outgoing bulk data
@param [in] bEP
@param [in] bEPStatus
*/
static void BulkIn(U8 bEP, U8 bEPStatus)
{
SendNextBulkIn(bEP, FALSE);
}
/**
DEPARTMENT OF ECE
90
baskarmtech@gmail.com
91
baskarmtech@gmail.com
92
baskarmtech@gmail.com
93
baskarmtech@gmail.com
94
baskarmtech@gmail.com
95
baskarmtech@gmail.com
//
//
//
//
switch(uart_ch)
{
case 8: // Backspace
vcp_buff.rx.data_ptr--;
break;
case '\n': // new Line
vcp_buff.rx.data[vcp_buff.rx.data_ptr++] = uart_ch;
vcp_buff.rx.data[vcp_buff.rx.data_ptr++] = '\r';
vcp_buff.rx.data[vcp_buff.rx.data_ptr] = 0;
VCOM_putstring("\n\rGot response=[",16);
VCOM_putstring(vcp_buff.rx.data,vcp_buff.rx.data_ptr);
VCOM_putstring("]\r\n",3);
// Clearing the buffers
vcp_buff.rx.data_ptr = 0;
vcp_buff.rx.data[vcp_buff.rx.data_ptr] = 0;
break;
case '\r': // Carriage return
vcp_buff.rx.data[vcp_buff.rx.data_ptr++] = uart_ch;
vcp_buff.rx.data[vcp_buff.rx.data_ptr++] = '\n';
vcp_buff.rx.data[vcp_buff.rx.data_ptr] = 0;
VCOM_putstring("\n\rGot response=[",16);
VCOM_putstring(vcp_buff.rx.data,vcp_buff.rx.data_ptr);
VCOM_putstring("]\r\n",3);
// Clearing the buffers
vcp_buff.rx.data_ptr = 0;
vcp_buff.rx.data[vcp_buff.rx.data_ptr] = 0;
DEPARTMENT OF ECE
96
baskarmtech@gmail.com
C) RF MODULE
/***********************************************************************
*
nordic_rf24l01p_LPC2148_main.c
***********************************************************************
*/
#include "./system/core.h"
#include "./spi/spi.h"
#include "./tools/print.h"
#include "./tools/delays.h"
#include "./time/time.h"
#include "./time/timer.h"
#include "./time/rtc.h"
#include "./uart/uart.h"
#include "./led/led.h"
#include "./tools/debug.h"
#include "./nordic/nrf24l01.h"
#define NRF24l01_MODE_TX
#define NRF24l01_MODE_RX
0
1
DEPARTMENT OF ECE
97
baskarmtech@gmail.com
hardware_init();
printf("Hardware Init complete...\n\r");
nrf24l01_hardware_init();
printf("Nordic Init complete...\n\r");
int i=0;
unsigned char regData[35];
//
#if 1
while(1)
{
nrf24l01_get_all_registers(®Data[0]);
for(i=0;i<35;i++)
{
printf("nrf24L01+[%d] = [0x%x]\n\r",i,regData[i]);
delay_ms(10);
}
delay_sec(10);
}
#endif
#if (NRF24l01_MODE_TX)
printf("Nordic in Tx Mode...\n\r");
while(1)
{
#if 0
txDataCounter=0;
while(txDataCounter<sizeof(txData))
{
data = (unsigned char)txData[txDataCounter];
DEPARTMENT OF ECE
98
baskarmtech@gmail.com
}
#else
printf("Type characters to send: ");
while(1)
{
if(uart0_getc(&txUserData,1000)!=true)
{
delay_ms(10);
continue;
}
nrf24l01_write_tx_payload((unsigned char
*)&txUserData, 1, true); //transmit received char over RF
while(!(nrf24l01_irq_pin_active()));
if(nrf24l01_irq_tx_ds_active())
{
nrf24l01_irq_clear_all(); //clear all
interrupts in the 24L01
printf(".");
txUserDataCounter++;
}
else if(nrf24l01_irq_max_rt_active())
{
nrf24l01_flush_tx();
nrf24l01_flush_rx();
nrf24l01_irq_clear_all();
printf("X");
}
uart0_putc(txUserData);
}
#endif
printf("\n\rTransmitted data [%d]\n\r",counter++);
delay_sec(1);
}
#elif (NRF24l01_MODE_RX)
printf("Nordic in RX mode ...\n\r");
unsigned char status;
while(1)
{
while(!(nrf24l01_irq_pin_active() &&
nrf24l01_irq_rx_dr_active()));
status = nrf24l01_read_rx_payload(&data,1); // Read the
packet into data
if(status == 64)
{
printf("%c",data);
if(data == '.')
{
printf("\r\n Read Byte:");
}
}
DEPARTMENT OF ECE
99
baskarmtech@gmail.com
delay_ms(100);
}
#endif
while(1);
return 0;
void nrf24l01_hardware_init()
{
// Configure SPI pins on PINSEL
// Configure CSN(P0.20) CE(P0.21) and IRQ(PO.15) pin as fast GPIO
as output only
//
IODIR0 |= (( 1 << 20 ) | ( 1 << 21 )); // Setting up CSN and CE
//
// Setting up IRQ
// Setting up IRQ
up IRQ
// Setting
while(1)
{
nrf24l01_clear_ce();
nrf24l01_set_ce();
nrf24l01_clear_csn();
nrf24l01_set_csn();
//
//
//
//
//
//
DEPARTMENT OF ECE
100
baskarmtech@gmail.com
printf("-");
}
}
#if (NRF24l01_MODE_RX)
nrf24l01_initialize_debug(true, 1 , true);
#elif (NRF24l01_MODE_TX)
nrf24l01_initialize_debug(false, 1 , true);
#endif
void hardware_init()
{
target_init();
irq_vic_init();
uart0_init(115200,8,'N',1);
timer_init(SYSTEM_TIMER,Fpclk/1000 -1 );
timer_enable(SYSTEM_TIMER);
#ifdef __WRITE_START_RTC__
time.seconds = 0;
time.minutes = 22;
time.hours = 12;
time.day_of_month = 21;
time.day_of_week = 3;
time.day_of_year = 233;
time.month = 7;
time.year = 2010;
rtc_init();
rtc_set_time(&time);
#else
rtc_init();
#endif
//
//
//
//
//
}
initLED();
while(1)
{
circleLED();
}
DEPARTMENT OF ECE
101
baskarmtech@gmail.com