[syntax=c]#include "LPC214x.h"
#define UART1_BUFSIZE 200
volatile char UART1_Buffer[UART1_BUFSIZE] = {0};
volatile int UART1_Count = 0;
void UART1_IRQ(char state)
{
if(state == 1)
{
NVIC_EnableIRQ(UART1_IRQn);
LPC_UART1->IER = IER_RBR; // Enable UART1 interrupt
}
else
{
LPC_UART1->IER = 0; // Disable UART1 interrupt
NVIC_DisableIRQ(UART1_IRQn);
}
}
void senduart1(unsigned char a) //sends a byte through U1
{
U1THR=a;
while(U1LSR!=0x60);
}
void sendstring(unsigned char *p) //Sends a string of data through UART1
{
while(1)
{
if(*p=='\0') break;
senduart1(*p++);
}
}
void delaygsm() //delay function
{
int i,c=0;
for(i=0;i<4000000;i++)
{
c++;
}
}
void init_uart()
{
U1LCR=0x83; //8-N-1, enable divisors
U1DLL=0x62; //9600 baud (9615)
U1DLM=0x00;
U1LCR=0x03; //8-N-1, disable divisors
U1FCR=0x07;
}
void delayms(uint delay_milliseconds)
{
#define INTERVAL_1MS 25000
LPC_TIM0->TCR = 0x02; // reset timer
LPC_TIM0->PR = 0x00; // set prescaler to zero
LPC_TIM0->MR0 = INTERVAL_1MS * delayInMs;
LPC_TIM0->IR = 0xFF; // reset all interrrupts
LPC_TIM0->MCR = 0x04; // stop timer on match
LPC_TIM0->TCR = 0x01; // start timer
while(LPC_TIM0->TC != LPC_TIM0->MR0) // Wait until match
}
int main()
{
PINSEL0=0x00050005; //initialized U0 and U1 as UART and not GPIO
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000;
IO1DIR = 0xFFFFFFFF;
IO1SET = 0x000F0000;
delayms(100);
IO1CLR = 0x000F0000;
init_uart();
sendstring("AT\r\n");
delayms(100);
IO1SET = 0x00010000;
sendstring("AT+CMGF=1\r\n");
delayms(200);
IO1SET = 0x00040000;
sendstring("AT+CMGS=\"+91##########\"\r\n");
delayms(200);
IO1CLR = 0x000F0000;
sendstring("dips");
senduart1(0x1A);
delayms(100);
IO1SET = 0x00080000;
IO1CLR= 0x000F0000;
}
void UART1_IRQHandler(void)
{
#define IIR_RDA 0x02
uint8_t IIRValue;
char data = 0;
IIRValue = LPC_UART1->IIR;
IIRValue >>= 1; // skip pending bit in IIR
IIRValue &= 0x07; // check bit 1~3, interrupt identification
data = LPC_UART1->RBR; // Read Data
if (IIRValue == IIR_RDA) // Receive Data Available
{
UART1_Buffer[UART1_Count] = data;
UART1_Count++;
if (UART1_Count == UART1_BUFSIZE) {UART1_Count = 0;} // For Buffer Overflow
}
}
[/syntax]