Es II Lab Manual
-
Upload
jadinaresh -
Category
Documents
-
view
220 -
download
3
description
Transcript of Es II Lab Manual
EMBEDDED SYSTEMS LAB DEPT.OF ECE
EMBEDDED SYSTEMS LAB MANUAL
M.TECH 1ST YEAR –IIND SEM
PRAGNA BHARATH INSTITUTE OF TECHNOLOGY
MUDMYAL , CHEVELLA
EMBEDDED SYSTEMS LAB DEPT.OF ECE
LIST OF EXPERIMENTS: PART-A
1. Assembly programs for addition, subtraction, multiplication
2. Configuring the Port bits
3. Configuring the port bit by setting and clearing
4. Write a program to Configure P0.13 and P0.19 as Output and Setting them High
5. Write a program to Configure 1st 16 Pins of Port 0 (P0.0 to P0.15) as Output and Setting them High:
6. Write a program for toggling the port
7. Write a program for toggling the port with some delay
8. Write a program for toggling the port with delay using timer0.
9. Write a program for generation of interrupt using timers
10.Write a program for generation of PWM signal.
11.Write a program to implement buzzer interface
12.Demonstration of serial communication using RS-232
13.Write a program for interfacing LCD display unit
14.Write a program to interface keypad
EMBEDDED SYSTEMS LAB DEPT.OF ECE
1. Write an assembly program for addition, subtraction, multiplication.
ADDITION:
AREA ADD, CODE, READONLY
ENTRY
START
MOV R1,#23
MOV R2,#23
ADD R3,R2,R1
END
SUBTRACTION:
AREA ADD, CODE, READONLY
ENTRY
START
MOV R1,#23
MOV R2,#23
SUB R3,R2,R1
END
MULTIPLICATION:
AREA ADD, CODE, READONLY
ENTRY
START
MOV R1,#23
MOV R2,#23
EMBEDDED SYSTEMS LAB DEPT.OF ECE
MUL R3,R2,R1
END
2. Write a program to configure Pin 19 of Port 0 as Output and want to drive it High(Logic1)
#include <lpc214x.h>int main(void){IO0DIR |= (1<<19); // Config P0.19 as Ouput
While (1)
{
IO0SET |= (1<<19); // Make ouput High for P0.19
}
3. Write a program to configure Pin 15 High of Port-0 as output i.e P0.15 and then Low
#include <lpc214x.h>int main(void){IO0DIR |= (1<<15); // P0.15 is Output pin
While (1)
{
IO0SET |= (1<<15); // Output for P0.15 becomes High
IO0CLR |= (1<<15); // Output for P0.15 becomes Low
}
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
4. Write a program to Configure P0.13 and P0.19 as Ouput and Setting them High:
#include <lpc214x.h>int main(void){
IO0DIR |= (1<<13) | (1<<19); // Config P0.13 and P0.19 as Ouput
While (1)
{
IO0SET |= (1<<13) | (1<<19); // Make ouput High for P0.13 and P0.19
}
}
5. Write a program to Configure 1st 16 Pins of Port 0 (P0.0 to P0.15) as Ouput and Setting them High:
#include <lpc214x.h>int main(void){
IO0DIR |= 0x0000FFFF; // Config P0.0 to P0.15 as Ouput
While (1)
{IO0SET |= 0x0000FFFF; // Make ouput High for P0.0 to P0.15
}
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
6. Write a program for toggling the port
#include <lpc214x.h>int main (void){ IO0DIR = 0xFFFFFFFF; // Configure all pins on Port 0 as Output while(1) { IO0SET = 0xFFFFFFFF; // Turn on LEDs
IO0CLR = 0xFFFFFFFF; // Turn them off } }
EMBEDDED SYSTEMS LAB DEPT.OF ECE
7. Write a program for toggling the port with some delay
include <lpc214x.h>
void delay(void);
int main(void){ IO0DIR = 0xFFFFFFFF; // Configure all pins on Port 0 as Output while(1) { IO0SET = 0xFFFFFFFF; // Turn on LEDs delay(); IO0CLR = 0xFFFFFFFF; // Turn them off delay(); } return 0; // normally this wont execute}
void delay(void){ int i,j; for(i=0; i<4000000; i++) // { for(j=0;j<10000;j++); }}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
8. Write a program for toggling the port with delay using timer0.
Include <lpc214x.h>void delay(void);int main(void){ IO0DIR = 0xFFFFFFFF; // Configure all pins on Port 0 as Output while(1) { IO0SET = 0xFFFFFFFF; // Turn on LEDs delay(); IO0CLR = 0xFFFFFFFF; // Turn them off delay(); } return 0; // normally this wont execute}
void delayMS(unsigned int milliseconds) //Using Timer0
{
T0TCR = 0x02; //Reset Timer
T0TCR = 0x01; //Enable timer
while(T0TC < milliseconds); //wait until timer counter reaches the desired delay
T0TCR = 0x00; //Disable timer
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
9. Write a program for generation of interrupt using timers
#include <lpc214x.h>#define MR0I (1<<0) //Interrupt When TC matches MR0#define MR0R (1<<1) //Reset TC when TC matches MR0
#define DELAY_MS 500 //0.5 Second(s) Delay#define PRESCALE 60000 //60000 PCLK clock cycles to increment TC by 1
void initClocks(void);void initTimer0(void);__irq void T0ISR(void);void initClocks(void);
int main(void){ initClocks(); //Initialize CPU and Peripheral Clocks @ 60Mhz initTimer0(); //Initialize Timer0 IO0DIR = 0xFFFFFFFF; //Configure all pins on Port 0 as Output IO0PIN = 0x0; T0TCR = 0x01; //Enable timer
while(1); //Infinite Idle Loop
}
void initTimer0(void){ /*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/ //----------Configure Timer0-------------
T0CTCR = 0x0; T0PR = PRESCALE-1; //(Value in Decimal!) - Increment T0TC at every 60000 clock cycles //Count begins from zero hence subtracting 1 //60000 clock cycles @60Mhz = 1 mS
T0MR0 = DELAY_MS-1; //(Value in Decimal!) Zero Indexed Count - hence subtracting 1 T0MCR = MR0I | MR0R; //Set bit0 & bit1 to High which is to : Interrupt & Reset TC on MR0
EMBEDDED SYSTEMS LAB DEPT.OF ECE
//----------Setup Timer0 Interrupt-------------
VICVectAddr4 = (unsigned )T0ISR; //Pointer Interrupt Function (ISR)
VICVectCntl4 = 0x20 | 4; //0x20 (i.e bit5 = 1) -> to enable Vectored IRQ slot //0x4 (bit[4:0]) -> this the source number - here its timer0 which has VIC channel mask # as 4 //You can get the VIC Channel number from Lpc214x manual R2 - pg 58 / sec 5.5 VICIntEnable = 0x10; //Enable timer0 int T0TCR = 0x02; //Reset Timer}
__irq void T0ISR(void){ long int regVal; regVal = T0IR; //Read current IR value IO0PIN = ~IO0PIN; //Toggle all pins in Port 0 T0IR = regVal; //Write back to IR to clear Interrupt Flag
VICVectAddr = 0x0; //This is to signal end of interrupt execution
}
void initClocks(void)
{
// This function is used to config PPL0 and setup both
// CPU and Peripheral clock @ 60Mhz
// You can find its definition in the attached files or case #2 source
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
10.Write a program for generation of PWM signal.
#include <lpc214x.h>
#define PLOCK 0x00000400#define PWMPRESCALE 60 //60 PCLK cycles to increment TC by 1 i.e 1 Micro-second
void init_PWM(void);void init_Clocks(void);
int main(void){ init_Clocks(); //Initialize CPU and Peripheral Clocks @ 60Mhz init_PWM(); //Initialize PWM
//IO0DIR = 0x1; This is not needed! //Also by default all pins are configured as Inputs after MCU Reset. while(1) { if( !((IO0PIN) & (1<<1)) ) // Check P0.1 { PWMMR1 = 1000; PWMLER = (1<<1); //Update Latch Enable bit for PWMMR1 } else if( !((IO0PIN) & (1<<2)) ) // Check P0.2 { PWMMR1 = 1250; PWMLER = (1<<1); } else if( !((IO0PIN) & (1<<3)) ) // Check P0.3 { PWMMR1 = 1500; PWMLER = (1<<1); } else if( !((IO0PIN) & (1<<4)) ) // Check P0.4 { PWMMR1 = 1750; PWMLER = (1<<1); } } //return 0; //normally this wont execute ever}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
void init_PWM(void){ /*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/ /*This is a per the Setup & Init Sequence given in the tutorial*/
PINSEL0 = (1<<1); // Select PWM1 output for Pin0.0 PWMPCR = 0x0; //Select Single Edge PWM - by default its single Edged so this line can be removed PWMPR = PWMPRESCALE-1; // 1 micro-second resolution PWMMR0 = 20000; // 20ms = 20k us - period duration PWMMR1 = 1000; // 1ms - pulse duration i.e width PWMMCR = (1<<1); // Reset PWMTC on PWMMR0 match PWMLER = (1<<1) | (1<<0); // update MR0 and MR1 PWMPCR = (1<<9); // enable PWM output PWMTCR = (1<<1) ; //Reset PWM TC & PR PWMTCR = (1<<0) | (1<<3); // enable counters and PWM Mode
//PWM Generation goes active now!! //Now you can get the PWM output at Pin P0.0!
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
11.Write a program to implement buzzer interface
#include<lpc21xx.h>
int main(void)
{
unsigned int i;
IO0DIR = 0Xffffffff;
IO1DIR=0Xffffffff;
while(1)
{
for (i=0;i<10000;i=i+100)
{
IO0SET = 0X00000080;
IO1SET = 0X00ff0000;
delay(i*10);
IO0CLR = 0X00000080;
IO1CLR = 0X00ff0000;
delay(i*10);
}
for (i=10000;i>0;i=i-100)
{
IO0SET = 0X00000080;
IO1SET = 0X00ff0000;
delay(i*10);
IO0CLR = 0X00000080;
IO1CLR = 0X00ff0000;
EMBEDDED SYSTEMS LAB DEPT.OF ECE
delay(i*10);
}
}
}
void delay(unsigned long cnt)
{
unsigned long temp,val;
for(temp=0;temp<cnt;temp++)
for (val=0;val<10;val++);
}
NOTE:
1. Make P0.7 to operate as GPIO pin using PINSEL.
2. Configure PO.7 as output pin using IO0DIR.
3. Provide signals on P0.7 to control buzzing sound from buzzer.
EMBEDDED SYSTEMS LAB DEPT.OF ECE
12.Demonstration of serial communication using RS-232
#include <LPC21xx.H> /* LPC21xx definitions*/
//#include "serial.h"
int main(void)
{
int j=0;
init_serial (); // initialise serial port with 9600bps
SendChar ('A'); // transmit char A
SendChar ('\n'); // transmit new line character
SendString("Ellenki"); // transmit string Ellenki
SendChar ('\n'); // transmit new line character
SendDigit(236); // transmit digit 236
}
void init_serial (void)
{ /*Initialize Serial Interface */
PINSEL0 = PINSEL0 | 0X00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0X83; /*8 bits, no Parity, 1 Stop bit */
U0DLL = 0XC3;
U0DLM = 0X00; /* 9600bps baud rate */
U0LCR = 0X03; /* DLAB = 0 */
}
int GetChar (void)
{ /* Read character from Serial Port */
while (!(U0LSR & 0x01));
return (U0RBR);
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
char SendChar (char SDat)
{ /* Write character to Serial Port */
while (!(U0LSR & 0x20));
return (U0THR = SDat);
}
void SendString(char *lcd_string)
{
while (*lcd_string)
{
SendChar(*lcd_string++);
}
}
void SendDigit(unsigned int dat)
{
unsigned int temp,i=0, buf[10];
while(dat>=10)
{
buf[i]=dat%10;
dat=dat/10;
i++;
}
buf[i]=dat;
for(temp=0;temp<=i;temp++)
{
SendChar(buf[i-temp]+'0');
}
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
13.Write a program for interfacing LCD display unit
#include <LPC21xx.h>
#include "lcd4bit.h"
int main(void) {
init_lcd();
while(1)
{
lcd_command(0x01);
lcd_command(0x80);
printlcd("Welcome To");
lcd_command(0xC0);
printlcd("ELLENKI");
Delay(50000000);
lcd_command(0x01);
lcd_command(0x80);
printlcd("LCD Interface ");
lcd_command(0xC0);
printlcd("with LPC 2148");
Delay(50000000);
lcd_command(0x01);
lcd_command(0x80);
printlcd("Developed By:");
lcd_command(0xC0);
printlcd("ELLENKI STUDENTS");
Delay(50000000);
}
EMBEDDED SYSTEMS LAB DEPT.OF ECE
}
void init_lcd(void)
{
IO1DIR |= 0x00FE0000;
Delay(200000) ;
Delay(100000);
write_command(0x30 << 16);
Delay(100000);
write_command(0x20 << 16);
lcd_command(0x01); /* clear display */
lcd_command(0x06); /* auto address inc */
lcd_command(0x0c); /* cursor off */
lcd_command(0x80); /* first location */
}
void Delay(unsigned long b)
{
while (--b!=0);
}
void write_command(int cmd)
{
IO1CLR |= 0x00f00000; // Clear Data pins
IO1CLR |= 0x00040000; // RW = 0
IO1CLR |= 0X00020000; // RS= 0,
IO1SET |= 0x00f00000 & cmd; //Set Data pins
IO1SET |= 0X00080000; // Enable = 1
Delay(30000); // Provide Delay
IO1CLR |= 0x00080000; // Set Enable=0
EMBEDDED SYSTEMS LAB DEPT.OF ECE
}void write_data(int dat){IO1CLR |= 0x00f00000; // Clear Data pins4-D7IO1CLR |= 0x00040000; // RW= 0IO1SET |= 0X00020000; //RS= 1IO1SET |= 0x00f00000 & dat; // Set Data pinsIO1SET |= 0X00080000; // Enable = 1
Delay(30000); //Provide Delay
IO1CLR |= 0x00080000; //Set Enable=0
}
void lcd_data(char dat)
{
write_data(dat << 16);
write_data(dat << 20);
}
void lcd_command(char cmd)
{
write_command(cmd << 16);
write_command(cmd << 20);
}
void printlcd(char *CPtr)
{
while(*CPtr != '\0')
{
lcd_data(*CPtr);
CPtr++;
Delay(20000); } }
EMBEDDED SYSTEMS LAB DEPT.OF ECE
14.Write a program to interface keypad and lcd
#include<lpc21xx.h>
#include "lcd4bit.h"
#define CLR 0x0003C000
Unsigned char check (int);
void delay(int);
int main(void)
{
init_lcd();
lcd_command(0x01);
lcd_command(0x80);
printlcd("4x4 KEYPAD");
lcd_command(0xC0);
printlcd("with LPC 2148");
delay(2000);
lcd_command(0x01);
lcd_command(0x80);
printlcd("Developed By:");
lcd_command(0xC0);
printlcd("Shekar ");
delay(2000);
lcd_command(0x01);
lcd_command(0x80);
printlcd("Enter Value");
lcd_command(0xC0);
IO0DIR = 0X0003C000;
while(1)
EMBEDDED SYSTEMS LAB DEPT.OF ECE
{
IO0CLR = CLR;
IO0SET = O1;
delay(10);
if(check(I1))
{
lcd_data('0');
}
if(check(I2))
{
lcd_data('1');
}
if(check(I3))
{
lcd_data('2');
}
if(check(I4))
{
lcd_data('3');
}
IO0CLR = CLR;
IO0SET = O2;
if(check(I1))
{
lcd_data('4');
}
if(check(I2))
EMBEDDED SYSTEMS LAB DEPT.OF ECE
{
lcd_data('5');
}
if(check(I3))
{
lcd_data('6');
}
if(check(I4))
{
lcd_data('7');
}
IO0CLR = CLR;
IO0SET = O3;
if(check(I1))
{
lcd_data('8');
}
if(check(I2))
{
lcd_data('9');
}
if(check(I3))
{
lcd_data('A');
}
if(check(I4))
EMBEDDED SYSTEMS LAB DEPT.OF ECE
{
lcd_data('B');
}
IO0CLR = CLR;
IO0SET = O4;
if(check(I1))
{
lcd_data('C');
}
if(check(I2))
{
lcd_data('D');
}
if(check(I3))
{
lcd_data('E');
}
if(check(I4))
{
lcd_data('F');
}
}
}
char check(int val) /* scanning a a key */
{
while((IO0PIN & 0X00003C00)==val)
{
EMBEDDED SYSTEMS LAB DEPT.OF ECE
delay(50);
if((IO0PIN & 0X00003C00)== 0X00003C00)return(1);
}
return(0) ;
}
void delay(int n) /* generates one milisecond delay */
{
int i,j;
for (i=1; i<=n; i++)
for(j=0; j<=40000; j++);
}
void write_command(int cmd)
{
IO1CLR |= 0x00f00000; /* Clear D4-D7 */
IO1CLR |= 0x00040000; /* Read/Write = 0 */
IO1CLR |= 0X00020000; /* Register Select = 0,Command */
IO1SET |= 0x00f00000 & cmd; /* Set D4-D7 */
IO1SET |= 0X00080000; /* Enable = 1 */
Delay(30000);
IO1CLR |= 0x00080000; /* set E to low */
}
void write_data(int dat)
{
IO1CLR |= 0x00f00000; /* Clear D4-D7 */
IO1CLR |= 0x00040000; /* Read/Write = 0 */
IO1SET |= 0X00020000; /* Register Select = 1,Data */
EMBEDDED SYSTEMS LAB DEPT.OF ECE
IO1SET |= 0x00f00000 & dat; /* Set D4-D7 */
IO1SET |= 0X00080000; /* Enable = 1 */
Delay(30000); //delay ~2ms
IO1CLR |= 0x00080000; /* Set E to low */
}
void lcd_data(char dat)
{
write_data(dat << 16);
write_data(dat << 20);
}
void lcd_command(char cmd)
{
write_command(cmd << 16);
write_command(cmd << 20);
}
void printlcd(char *CPtr)
{
while(*CPtr != '\0')
{
lcd_data(*CPtr);
CPtr++;
Delay(20000);
}
}
void init_lcd(void)
{
IO1DIR |= 0x00FE0000;
EMBEDDED SYSTEMS LAB DEPT.OF ECE
Delay(200000) ;
write_command(0x28 << 16);
Delay(100000);
lcd_command(0x01); /* clear display */
lcd_command(0x06); /* auto address inc */
lcd_command(0x0c); /* cursor off */
lcd_command(0x80); /* first location */
}