본문 바로가기

컴퓨터/Cortex-M3(STM32F103)

myCortex(LM3S8962)에서 광전자도트매트릭스 테스트 프로그램


#include "inc/lm3s8962.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "DriverLib/debug.h"
#include "DriverLib/gpio.h"
#include "DriverLib/sysctl.h"

typedef unsigned char u8;
typedef volatile unsigned int vu32;

/*
#define A3_ON          GPIOB->ODR |= GPIO_Pin_6
#define A3_OFF   GPIOB->ODR &= ~GPIO_Pin_6
#define A2_ON  GPIOB->ODR |= GPIO_Pin_7
#define A2_OFF          GPIOB->ODR &= ~GPIO_Pin_7
#define A1_ON          GPIOD->ODR |= GPIO_Pin_2
#define A1_OFF          GPIOD->ODR &= ~GPIO_Pin_2
#define A0_ON           GPIOB->ODR |= GPIO_Pin_5
#define A0_OFF          GPIOB->ODR &= ~GPIO_Pin_5
#define red_off  GPIOA->ODR |= GPIO_Pin_12
#define red_on          GPIOA->ODR &= ~GPIO_Pin_12
#define green_off  GPIOC->ODR |= GPIO_Pin_10
#define green_on  GPIOC->ODR &= ~GPIO_Pin_10
#define clock_on GPIOA->ODR |= GPIO_Pin_10
#define clock_off GPIOA->ODR &= ~GPIO_Pin_10
#define latch_on GPIOA->ODR |= GPIO_Pin_11
#define latch_off GPIOA->ODR &= ~GPIO_Pin_11
#define pin3_off GPIOA->ODR &= ~GPIO_Pin_8
#define pin2_off GPIOA->ODR &= ~GPIO_Pin_9
#define pin1_off GPIOC->ODR &= ~GPIO_Pin_8
*/

#define A3_ON  GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_1, GPIO_PIN_1)
#define A3_OFF   GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_1, 0)
#define A2_ON  GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_PIN_0)
#define A2_OFF      GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_0, 0)
#define A1_ON      GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_6) 
#define A1_OFF      GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 0) 
#define A0_ON       GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_7)  
#define A0_OFF      GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, 0)
#define red_off  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4)  
#define red_on      GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, 0)
#define green_off  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_PIN_5)
#define green_on  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, 0)
#define clock_on GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_1, GPIO_PIN_1)
#define clock_off GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_1, 0)
#define latch_on GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_0, GPIO_PIN_0)
#define latch_off GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_0, 0)
#define pin3_off GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0)
#define pin2_off GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2, 0)
//#define pin1_off GPIOC->ODR &= ~GPIO_Pin_8

void port_init(void){

 
 //pin1_off;
 pin2_off;
 pin3_off;
   red_off;
   green_off;
   clock_off;
 latch_off;
 A0_OFF;
 A1_OFF;
 A2_OFF;
 A3_OFF;
}

void dot(u8 red1, u8 green1)
{
 u8 k,j;
 vu32 i;
 for(k=0;k<16;k++) {
  i=20;
  for(j=0;j<96;j++) {
   if(red1) red_on;
   else red_off;
   if(green1) green_on;
   else green_off;
   clock_on;
   clock_off;
  }
  if(k & 1) A0_ON; else A0_OFF;
  if(k & 2) A1_ON; else A1_OFF;
  if(k & 4) A2_ON; else A2_OFF;
  if(k & 8) A3_ON; else A3_OFF;
  latch_on;
  latch_off;
  do {
   clock_on;
   clock_off;
  }while(i--);
 }
}

void main()
{
 SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
 
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);

 GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
 GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
 GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE,GPIO_PIN_0 | GPIO_PIN_1);

 
 port_init();
 do {
  for(vu32 k=0;k<100;k++) dot(1,0);
  for(vu32 k=0;k<100;k++) dot(0,1);
  for(vu32 k=0;k<100;k++) dot(1,1);

 }while(1);
}