// KCO 2010.6.5
// main.c
#include "stm32f10x.h"

#define ON_LED1     (GPIOB->BRR = GPIO_Pin_5)
#define OFF_LED1    (GPIOB->BSRR = GPIO_Pin_5)
#define T_LED1      (GPIOB->ODR ^= GPIO_Pin_5)

#define ON_LED2     (GPIOB->BRR = GPIO_Pin_6)
#define OFF_LED2    (GPIOB->BSRR = GPIO_Pin_6)
#define T_LED2      (GPIOB->ODR ^= GPIO_Pin_6)

#define ON_LED3     (GPIOB->BRR = GPIO_Pin_7)
#define OFF_LED3    (GPIOB->BSRR = GPIO_Pin_7)
#define T_LED3      (GPIOB->ODR ^= GPIO_Pin_7)

#define ON_LED4     (GPIOB->BRR = GPIO_Pin_8)
#define OFF_LED4    (GPIOB->BSRR = GPIO_Pin_8)
#define T_LED4      (GPIOB->ODR ^= GPIO_Pin_8)

#define ON_LED5     (GPIOB->BRR = GPIO_Pin_9)
#define OFF_LED5    (GPIOB->BSRR = GPIO_Pin_9)
#define T_LED5      (GPIOB->ODR ^= GPIO_Pin_9)

#define ON_LED6     (GPIOC->BRR = GPIO_Pin_13)
#define OFF_LED6    (GPIOC->BSRR = GPIO_Pin_13)
#define T_LED6      (GPIOC->ODR ^= GPIO_Pin_13)

#define ON_LED7     (GPIOC->BRR = GPIO_Pin_14)
#define OFF_LED7    (GPIOC->BSRR = GPIO_Pin_14)
#define T_LED7      (GPIOC->ODR ^= GPIO_Pin_14)

#define ON_LED8     (GPIOC->BRR = GPIO_Pin_15)
#define OFF_LED8    (GPIOC->BSRR = GPIO_Pin_15)
#define T_LED8      (GPIOC->ODR ^= GPIO_Pin_15)

int mcnt=0;

void delay_us(u32 nCount){
int i,tmp;
  for(; nCount != 0; nCount--){
    for(i=0;i<11;i++) tmp += i;
  }
}
void delay_ms(u32 nCount){
  for(; nCount != 0; nCount--) delay_us(1000);
}

int main(void){
GPIO_InitTypeDef GPIO_InitStructure;

    /* Setup STM32 system (clock, PLL and Flash configuration) */
    SystemInit();
    
    /* Set the Vector Table base location at 0x08000000 */
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    //*********************** GPIO Init *****************************
    // Enable GPIO clock and release reset
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_GPIOB |
                         RCC_APB2Periph_GPIOC,
                         ENABLE);
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_GPIOB |
                         RCC_APB2Periph_GPIOC,
                         DISABLE);
    // GPIO init.
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | 
       GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | 
       GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    OFF_LED1;    OFF_LED2;   OFF_LED3;   OFF_LED4;
    OFF_LED5;    OFF_LED6;   OFF_LED7;   OFF_LED8;
    
    while(1){
      ON_LED1;      delay_ms(100);      OFF_LED1;      delay_ms(100);
      ON_LED2;      delay_ms(100);      OFF_LED2;      delay_ms(100);
      ON_LED3;      delay_ms(100);      OFF_LED3;      delay_ms(100);
      ON_LED4;      delay_ms(100);      OFF_LED4;      delay_ms(100);
      ON_LED5;      delay_ms(100);      OFF_LED5;      delay_ms(100);
      ON_LED6;      delay_ms(100);      OFF_LED6;      delay_ms(100);
      ON_LED7;      delay_ms(100);      OFF_LED7;      delay_ms(100);
      ON_LED8;      delay_ms(100);      OFF_LED8;      delay_ms(100);
    }
}
