==================================Outline====================================
ARM UART Interrupt
----------------------------------------------------------------------------
수신 인터럽트를 만들어서 데이터 통신을 해보자.
구현하고자하는 내용은 키보드에 ‘m' 또는 ’M'을 입력하였을 때 ARM에서 메뉴를 표시하게 하고 그 이 외의 값을 입력했을 때는 잘못 입력되었음을 출력하는 것이다.
기존에 있던 DBGU_Init 함수를 복사하여 DBGU_Init_ISR을 만들고 난 후 DBGU_Init_Polling으로 이름을 바꾼 후 코딩을 하자.
DBGU_Init_ISR에서 인터럽트를 사용하기 위한 코드를 추가해야 한다.
송수신을 활성화 시키는 코드를 가장 밑으로 내리고 그 바로 위에 코딩을 해보자.
void DBGU_Init_ISR() //initiating RX with interrupt
{
*AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; //Turn off other function in PIOA
*AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; //DBGU Debug Transmit Data & DBGU Debug Receive Data
//*AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX; //(DBGU) Reset Transmitter&Reciever
*AT91C_DBGU_CR = AT91C_US_RSTTX | AT91C_US_RSTRX; // Reset Receiver and Transmitter
*AT91C_DBGU_MR = AT91C_US_CHMODE_NORMAL | AT91C_US_PAR_EVEN; //Normarl mode, Even Parity
*AT91C_DBGU_BRGR = DBGU_CD; //CD setting
*AT91C_AIC_IDCR = 1<<AT91C_ID_SYS; // SYS인터럽트 핀 커맨드 비 활성화
AT91C_AIC_SVR[AT91C_ID_SYS] = (unsigned int)DBGU_RX_ISR; // 핸들러 등록
AT91C_AIC_SMR[AT91C_ID_SYS] = AT91C_AIC_SRCTYPE_POSITIVE_EDGE|
AT91C_AIC_PRIOR_LOWEST; // 동작모드 및 우선순위 결정
*AT91C_AIC_ICCR = 1<<AT91C_ID_SYS; // 커맨드 레지스터 클리어
*AT91C_DBGU_IER = AT91C_US_RXRDY; //RXRDY 레지스터 활성화
*AT91C_AIC_IECR = 1<<AT91C_ID_SYS; // SYS 인터럽트 핀 인터럽트 활성화
*AT91C_DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN; //Enable Receiver and Transmitter
}
interrupt 핸들러에 등록되어 있는 함수를 만들자. 간단하게 메뉴를 띄우는 함수이다.
void DBGU_Menu()
{
DBGU_STR("1. LCD Print\n\r");
DBGU_STR("m. Menu Print\n\r");
}
void DBGU_RX_ISR()
{
//while(*AT91C_DBGU_RHR == 0);
switch((*AT91C_DBGU_RHR & 0x000000FF))
{
default : DBGU_STR("Wrong Instruction\n\r");
DBGU_Menu();
break;
case 'M' : DBGU_Menu();
break;
case 'm' : DBGU_Menu();
break;
}
//RX TX Enable
}
/*** 전체 소스 코드 ***/
#include <project.h> |
'Busan IT > ARM Controller' 카테고리의 다른 글
주파수와 ARM 메모리맵 (0) | 2015.08.28 |
---|---|
Interrupt Code, 초음파 센서 SRF05, Timer/Counter (0) | 2015.08.19 |
ARM USART(2) (0) | 2015.08.12 |
ARM USART (0) | 2015.08.11 |
AIC(2) (0) | 2015.07.31 |