Hi everyone. I'm currently working on sim900 by using TIVA C.
My code is here:
#include "inc/hw_ints.h"
#include "inc/hw_gpio.h"
#include "inc/hw_types.h"
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "utils/uartstdio.h"
#include "driverlib/uart.h"
#include "driverlib/pin_map.h"
uint8_t sw1,sw2;
void SendMessage()
{
UARTprintf("AT+CMGF=1\n\r");
SysCtlDelay(SysCtlClockGet());
UARTprintf("AT+CMGS=\"+XXXXXXXXXXXX\"\n\r");
SysCtlDelay(SysCtlClockGet());
UARTprintf("SIM900 Message\n\r");
SysCtlDelay(SysCtlClockGet());
}
void MakeCall()
{
UARTprintf("ATD+XXXXXXXXXX;\n\r");
SysCtlDelay(SysCtlClockGet());
}
void ConfigureSwitch(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE + GPIO_O_CR)= 0x01;
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_4);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
}
void ConfigureUART0(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC);
UARTStdioConfig(0,115200,16000000);
}
void main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2);
ConfigureUART0();
UARTprintf("AT\n\r");
SysCtlDelay(SysCtlClockGet()/3);
UARTCharPut(UART0_BASE,26);
ConfigureSwitch();
while(1)
{
sw1=1;
sw2=1;
sw1 = GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4);
sw2 = GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_0);
if(sw1==0)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0x02);
SendMessage();
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0x00);
}
else if(sw2==0)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0x00);
SysCtlDelay(SysCtlClockGet()/1000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0x04);
SysCtlDelay(SysCtlClockGet()/1000);
MakeCall();
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0x00);
}
}
}
Appear on PuTTy:
But when I change to UART 1 in order to send string to sim900, it fails and nothing happen.
I just change the code like this:
void ConfigureUART1(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
GPIOPinConfigure(GPIO_PB0_U1RX);
GPIOPinConfigure(GPIO_PB1_U1TX);
GPIOPinTypeUART(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTClockSourceSet(UART1_BASE,UART_CLOCK_PIOSC);
UARTStdioConfig(1,115200,16000000);
}
and SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); (change from GPIOA to GPIOB)
I found that it lead to faultISR:
Please help me with this.
Thank you very much!