본문 바로가기

[ARM]주기적 타이머로 LED 옮기기

반응형

//-----------------------------------------------------------------------------------------------

   

//-----------                              

//병렬 입출력 제어기(PIO) I/O 제어 레지스터

#define PIO_PER    (*(volatile unsigned int *) 0xFFFFF400) //PIO 병렬 입출력 허용 레지스터

#define PIO_PDR    (*(volatile unsigned int *) 0xFFFFF404) //PIO 병렬 입출력 금지 레지스터

#define PIO_OER    (*(volatile unsigned int *) 0xFFFFF410) //PIO 출력 허용 레지스터

#define PIO_ODR    (*(volatile unsigned int *) 0xFFFFF414) //PIO 출력 금지 레지스터

#define PIO_IFER  (*(volatile unsigned int *) 0xFFFFF420) //PIO 입력 필터 허용 레지스터

#define PIO_SODR  (*(volatile unsigned int *) 0xFFFFF430) //PIO 출력 데이터 세트 레지스터

#define PIO_CODR  (*(volatile unsigned int *) 0xFFFFF434) //PIO 출력 데이터 클리어 레지스터

#define PIO_IER    (*(volatile unsigned int *) 0xFFFFF440) //PIO 인터럽트 허용 레지스터

#define PIO_IDR    (*(volatile unsigned int *) 0xFFFFF444) //PIO 인터럽트 금지 레지스터

#define PIO_ISR    (*(volatile unsigned int *) 0xFFFFF44C) //PIO 인터럽트 상태 레지스터

#define PIO_PUDR  (*(volatile unsigned int *) 0xFFFFF460) //PIO 풀업저항 금지 레지스터

#define PIO_PUER  (*(volatile unsigned int *) 0xFFFFF464) //PIO 풀업저항 허용 레지스터

#define PIO_ASR    (*(volatile unsigned int *) 0xFFFFF470) //PIO 주변장치 A 선택 레지스터

#define PIO_BSR    (*(volatile unsigned int *) 0xFFFFF474) //PIO 주변장치 B 선택 레지스터

//-----------------------------------------------------------------------------------------------

   

//-----------

//전력관리 제어기(PMC) I/O 제어 레지스터

#define PMC_PCER  (*(volatile unsigned int *) 0xFFFFFC10)  //PMC 주변장치 클록 허용 레지스터

#define MASTERCLOCK 48000000

//-----------------------------------------------------------------------------------------------

   

//-----------                              

//인터럽트 제어기(AIC) I/O 제어 레지스터

#define AIC_SMR    ( (volatile unsigned int *) 0xFFFFF000)  //AIC 소스 모드 레지스터

#define AIC_SVR    ( (volatile unsigned int *) 0xFFFFF080)  //AIC 소스 벡터 레지스터

#define AIC_IECR  (*(volatile unsigned int *) 0xFFFFF120)  //AIC 인터럽트 허용 명령 레지스터

#define AIC_IDCR  (*(volatile unsigned int *) 0xFFFFF124)  //AIC 인터럽트 금지 명령 레지스터

#define AIC_ICCR  (*(volatile unsigned int *) 0xFFFFF128)  //AIC 인터럽트 클리어 명령 레지스터

//-----------------------------------------------------------------------------------------------

   

//-----------

//디버그 유닛(DBGU) I/O 제어 레지스터

#define DBGU_CR    (*(volatile unsigned int *) 0xFFFFF200) //DBGU 제어 레지스터

#define DBGU_MR    (*(volatile unsigned int *) 0xFFFFF204) //DBGU 모드 레지스터

#define DBGU_IER  (*(volatile unsigned int *) 0xFFFFF208) //DBGU 인터럽트 허용 레지스터

#define DBGU_IDR  (*(volatile unsigned int *) 0xFFFFF20C) //DBGU 인터럽트 금지 레지스터

#define DBGU_IMR  (*(volatile unsigned int *) 0xFFFFF210) //DBGU 인터럽트 마스크 레지스터

#define DBGU_SR    (*(volatile unsigned int *) 0xFFFFF214) //DBGU 상태 레지스터

#define DBGU_RHR  (*(volatile unsigned int *) 0xFFFFF218) //DBGU 수신홀딩 레지스터

#define DBGU_THR  (*(volatile unsigned int *) 0xFFFFF21C) //DBGU 송신홀딩레지스터

#define DBGU_BRGR  (*(volatile unsigned int *) 0xFFFFF220) //DBGU 보레이트 발생 레지스터

#define DBGU_CIDR  (*(volatile unsigned int *) 0xFFFFF240) //DBGU  ID레지스터

#define DBGU_EXID  (*(volatile unsigned int *) 0xFFFFF244) //DBGU  ID 확장 레지스터

#define DBGU_FNR  (*(volatile unsigned int *) 0xFFFFF248) //DBGU 강제 NTRST레지스터

//-----------------------------------------------------------------------------------------------

   

//-----------

//타이머 카운터(TC) I/O 제어 레지스터

#define TC0_CCR    (*(volatile unsigned int *) 0xFFFA0000) //TC0 채널 제어 레지스터

#define TC0_CMR    (*(volatile unsigned int *) 0xFFFA0004) //TC0 채널 모드 레지스터

#define TC0_CV    (*(volatile unsigned int *) 0xFFFA0010) //TC0 카운터  레지스터

#define TC0_RA    (*(volatile unsigned int *) 0xFFFA0014) //TC0 레지스터 A

#define TC0_RB    (*(volatile unsigned int *) 0xFFFA0018) //TC0 레지스터 B

#define TC0_RC    (*(volatile unsigned int *) 0xFFFA001C) //TC0 레지스터 C

#define TC0_SR    (*(volatile unsigned int *) 0xFFFA0020) //TC0 상태 레지스터

#define TC0_IER    (*(volatile unsigned int *) 0xFFFA0024) //TC0 인터럽트 허용 레지스터

#define TC0_IDR    (*(volatile unsigned int *) 0xFFFA0028) //TC0 인터럽트 금지 레지스터

#define TC0_IMR    (*(volatile unsigned int *) 0xFFFA002C) //TC0 인터럽트 마스크 레지스터

#define TC_BCR    (*(volatile unsigned int *) 0xFFFA00C0) //TC 블록 제어 레지스터

#define TC_BMR    (*(volatile unsigned int *) 0xFFFA00C4) //TC 블록 모드 레지스터

//-----------------------------------------------------------------------------------------------

   

//-----------

//주기적인 시간간격 타이머(PIT) I/O 제어 레지스터

#define PIT_MR    (*(volatile unsigned int *) 0xFFFFFD30) //PIT 모드 레지스터

#define PIT_SR    (*(volatile unsigned int *) 0xFFFFFD34) //PIT 상태 레지스터

#define PIT_PIVR  (*(volatile unsigned int *) 0xFFFFFD38) //PIT 카운터값 레지스터

#define PIT_PIIR  (*(volatile unsigned int *) 0xFFFFFD3C) //PIT 이미지 레지스터

   

   

static int p = 0;

   

void shift_LED()

{

  int clear;

  clear = PIT_PIVR;  //PIVR 값을 읽어서 초기화

    

  p++;

   

  if(p==3)

  {

    PIO_CODR = 1 << 3

    PIO_SODR = 1 << 0;

  }

   

  else if(p == 6)

  {

    PIO_CODR = 1 << 0;

    PIO_SODR = 1 << 1;    

  }

   

  else if(p == 9)

  {

      

    PIO_CODR = 1 << 1;

    PIO_SODR = 1 << 2;

  }

    

   

  else if(p == 12)

  {

      

    PIO_CODR = 1 << 0;

    PIO_SODR = 1 << 3;

    p = 0;

  }

    

    

}

   

   

int main(void)

{

  PMC_PCER = 1<<2;

  AIC_SVR[1= (unsigned int) shift_LED;  //PIT AIC_IECR의 b1즉 SYS에 있기 때문에 x에 1을 

   

//넣어준다.  

  AIC_SMR[1= 1;

  AIC_IECR = 1<<1//SYS include PIT.

  PIT_MR = 0x7A120| 1<<24| 1<<25;//F4240

   

  PIO_OER = 0xF;

  PIO_PER = 0xF;

   

   

  while(1)

  {

      

  }

    

  return 0;

}

반응형

'About 프로그래밍!!! > ARM' 카테고리의 다른 글

[ARM] 캐릭터 LCD에 글자쓰기  (0) 2010.07.09
[ARM]주기적 타이머로 통신하기  (0) 2010.07.07
[ARM]주기적인 시간간격 타이머(PIT)  (0) 2010.07.06
[ARM]파형발생 WAVSEL  (0) 2010.07.05
[ARM] 카운터  (0) 2010.07.05
-->