/***********************************************************************************************
* Company: Microsemi Corporation
*
* File: main.c
* File history:
*      Revision: 1.0 Date: November 8, 2012
*
* Description:
*
*	Program to blink the LED's on the SmartFusion2 Validation Board. It also prints the status
*	messages on the Serial Console. This is intended for creating the sample application image  
*	to use in the Code Shadowing Demo's
*	
*
* Author: Corporate Applications Engineering
*
************************************************************************************************/

#include "drivers/mss_gpio/mss_gpio.h"
#include "drivers/mss_uart/mss_uart.h"
#include "CMSIS/m2sxxx.h"

void delay(int n);

/*-------------------------------------------------------------------------*//**
 * main() function.
 */
int main()
{
    uint32_t count,MDDR_status=0;
    iprintf("Welcome to SmartFusion2\n\r");

    /*
     * Initialize MSS GPIOs.
     */
    MSS_GPIO_init();
    /*
     * Configure MSS GPIOs.
   */
    MSS_GPIO_config( MSS_GPIO_0 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_1 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_2 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_3 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_4 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_8 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_9 , MSS_GPIO_OUTPUT_MODE );
    MSS_GPIO_config( MSS_GPIO_10 , MSS_GPIO_OUTPUT_MODE );
    /*
     * Set initial delay used to blink the LED.
     */
    count=0;
    iprintf("LED pattern counter is started\n\r");
    while(1)
    {
      iprintf("count value = %d,stored at 0x%08x address\n\r",count,&count);
      count++;
      MSS_GPIO_set_output(MSS_GPIO_0, 0);
      MSS_GPIO_set_output(MSS_GPIO_1, 0);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_0, 1);
      MSS_GPIO_set_output(MSS_GPIO_1, 1);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_2, 0);
      MSS_GPIO_set_output(MSS_GPIO_3, 0);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_2, 1);
      MSS_GPIO_set_output(MSS_GPIO_3, 1);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_4, 0);
      MSS_GPIO_set_output(MSS_GPIO_8, 0);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_4, 1);
      MSS_GPIO_set_output(MSS_GPIO_8, 1);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_9, 0);
      MSS_GPIO_set_output(MSS_GPIO_10, 0);
      delay(200000);
      MSS_GPIO_set_output(MSS_GPIO_9, 1);
      MSS_GPIO_set_output(MSS_GPIO_10, 1);
    }

    return 0;
}
void delay(int n)
{
  while(n>0)
    n--;
}
