AT91SAM7S256

2013.05.24_while문 반복중에도 DBGU_인터럽트걸기!

성엽이 2013. 5. 24. 14:35

▶while문 반복중에도 DBGU_인터럽트걸기!

#include "DBGU.h"

#include "AIC.h"

void DBGU_Init_INT(void *vp_Handler)
{  
  DBGU_CR = ((1<<RSTTX) | (1<<RSTRX));    // RSTRX: Reset Receiver,
                                          // RSTTX: Reset Transmitter
  DBGU_BRGR = DBGU_CD;                    // Baud Rate Generator Reg 에 CD 값 저장

  DBGU_MR = (0<<CHMODE) | (0<<PAR);       // MODE 설정, parity type(짝수), normal mode
  
  PIO_PDR = ((1<<PA9)|(1<<PA10));         // PA9, PA10 리셋,Disable Reg
  PIO_ASR = ((1<< DRXD)|(1<<DTXD));       // Debug Unit 으로 송수신을 설정

// 2. 시작 : DBGU 인터럽트 비활성화 -------------
// DBGU 인터럽트 비활성화(DBGU_IDR 설정)
// 인터럽트 상태 정보 초기화(DBGU_SR 읽기)
  DBGU_IDR = (1<<RXRDY) | (1<<TXRDY) | (1<<ENDRX) | (1<<ENDTX) 
      | (1<<OVRE) | (1<<FRAME) | (1<<PARE) | (1<<TXEMPTY) 
      | (1<<TXBUFE) | (1<<RXBUFF) | (1<<COMMTX) | (1<<COMMRX);
  DBGU_SR;   // 읽어서 상태를 다 0 으로 만듬.

// 인터럽트 비활성화(AIC_IDCR, SYSC) P33 , SYSC 주변장치 번호 1번

  AIC_IDCR = 1<< SYSC;    // Setting SYSC and ADC bits in the clock set/clear registers of the PMC has no effect. The System Controller

                          // is continuously clocked.


// SYSC 인터럽트 핸들러 등록(AIC_SVR[SYSC], Timer_Handler)
  AIC_SVR[SYSC] = (volatile unsigned int )vp_Handler;  
// SYSC 인터럽트 모드 설정(AIC_SMR[SYSC], AIC_SRCTYPE_INT_HIGH_LEVEL, PRIOR_LOWEST)
  AIC_SMR[SYSC] = ((0<<PRIOR) | (3<<SRCTYPE));

// SYSC 인터럽트 클리어(AIC_ICCR, SYSC)
  AIC_ICCR = 1<<SYSC;
// DBGU 송신 인터럽트 활성화(DBGU_IER, RXRDY)
  DBGU_IER = 1<<RXRDY;
/

// DBGU 인터럽트 활성화(AIC_IECR, SYSC)
  AIC_IECR = 1<<SYSC;
// DBGU 송수신 활성화
  DBGU_CR = ((1<<RXEN) | (1<<TXEN));

   return;
}