본문 바로가기
관리자 기고

DBGU 인터럽트 참고

by 와이즈캣 2013. 5. 24.
728x90
반응형

http://chilles.tistory.com/22


001.//---------- 입출력 IO설정
002.#define PIO_PER  (*(volatile unsigned int *) 0xFFFFF400) //병렬 입출력 제어 레지스터 병렬 입출력 포트로 사용한다.
003.#define PIO_PDR (*(volatile unsigned int *) 0xFFFFF404)
004.#define PIO_OER  (*(volatile unsigned int *) 0xFFFFF410) //출력 방향 설정
005.#define PIO_SODR (*(volatile unsigned int *) 0xFFFFF430) //출력
006.#define PIO_CODR (*(volatile unsigned int *) 0xFFFFF434) //출력 하지 않음
007.#define PIO_ISR (*(volatile unsigned int *) 0xFFFFF44C)  //인터럽트 스테이터스 레지스터
008.#define PIO_ASR (*(volatile unsigned int *) 0xFFFFF470)
009.#define PIO_BSR (*(volatile unsigned int *) 0xFFFFF474)
010. 
011.//----------- 인터럽트 IO설정
012.#define AIC_IDCR (*(volatile unsigned int *) 0xFFFFF124)
013.#define AIC_SVR  ((volatile unsigned int *) 0xFFFFF080)
014.#define AIC_SMR  ((volatile unsigned int *) 0xFFFFF000)
015.#define AIC_ISR  ((volatile unsigned int *) 0xFFFFF108)
016.#define AIC_ICCR (*(volatile unsigned int *) 0xFFFFF128)
017.#define AIC_IECR (*(volatile unsigned int *) 0xFFFFF120)
018. 
019.//---------- DBGU IO설정
020.#define DBGU_CR (*(volatile unsigned int *) 0xFFFFF200)
021.#define DBGU_MR (*(volatile unsigned int *) 0xFFFFF204)
022.#define DBGU_IER (*(volatile unsigned int *) 0xFFFFF208)
023.#define DBGU_CSR (*(volatile unsigned int *) 0xFFFFF214)
024.#define DBGU_RHR (*(volatile unsigned int *) 0xFFFFF218)
025.#define DBGU_THR (*(volatile unsigned int *) 0xFFFFF21C)
026.#define DBGU_BRGR (*(volatile unsigned int *) 0xFFFFF220)
027. 
028.//---------- 전력 제어 설정
029.#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10)
030. 
031.#define MASTERCLOCK 48000000
032. 
033.void DBGU_TX_char(unsigned int data);
034. 
035.void Delayms(unsigned int ms) //딜레이 함수..
036.{
037.volatile unsigned int count, countmax = (MASTERCLOCK / 10000) * ms;
038. 
039.for(count = 0; count < countmax; count++);
040.}
041. 
042.void DBGU_RX_ISR(void)              /* DBGU interrupt service routine */
043.{
044.static int flag = 0;
045. 
046.flag ^= 1;
047. 
048.if(flag)
049.{
050.PIO_SODR = 0x000000FF;
051.DBGU_TX_char('1');
052.}
053.else
054.{
055.PIO_CODR = 0x000000FF;
056.DBGU_TX_char('2');
057.}
058.DBGU_TX_char(DBGU_RHR);
059.}
060. 
061.void DBGU_TX_char(unsigned int data)        /* transmit a character by DBGU */
062.{
063.while(!(DBGU_CSR & 0x0002));      // wait until TXRDY=1
064.DBGU_THR = data;          // transmit a character
065.}
066. 
067.int main(void)
068.{
069.PMC_PCER = 1 << 2;
070.PIO_OER = 0x000000FF;
071.PIO_CODR = 0x000000FF;
072. 
073.// 주변장치A DTXD와 DRXD를 사용
074.PIO_ASR = (unsigned int)1 << 10 | (unsigned int)1 << 9;
075.// 주변장치B 사용 불가
076.PIO_BSR = 0;
077.// PA9,PA10을 병렬I/O포트로 사용하는것을 금지(주변장치로 사용O)
078.PIO_PDR = ((unsigned int)1 << 10 | (unsigned int)1 << 9) | 0;
079. 
080.// 패리티 사용X
081.DBGU_MR = 0x00000800;           // normal mode, no parity
082.// 보레이트 발생 레지스터
083.DBGU_BRGR = 26;         // MCK/16/26 = 115200 bps
084. 
085.// 0x150 = 101010000
086.// RSTSTA=1, TXEN=1, RXEN=1
087.// DBGU_SR 레지스터의 PARE,FRAME,OVRE 에러비트를 RESET, 송신부/수신부 동작 허용
088.DBGU_CR = 0x00000150;           // TX, RX enable
089. 
090.// RXRDY = 1 (RX레디 인터럽트허용)
091.DBGU_IER = (unsigned int)1 << 0;
092. 
093.// 주변장치1(System Controller)의 인터럽트 금지
094.AIC_IDCR = (unsigned int)1 << 1;
095.// 인터럽트 서비스 루틴의 Addr을 저장
096.AIC_SVR[1] = (unsigned int)DBGU_RX_ISR;
097.// SRCtype과 우선순위 설정
098.AIC_SMR[1] = 1 | 7;
099.// SYS의 에지 검출기 클리어
100.AIC_ICCR = (unsigned int)1 << 1;
101.// SYS의 인터럽트 허용(AIC_IDCR과 반대)
102.AIC_IECR = (unsigned int)1 << 1;
103.while(1);
104.}


728x90