==========================================================================================
ARM
==========================================================================================
<ARM>
=DBGU INTERRUPT RX 구현
:EXTERNAL INTERRUPT

=
<DBGU.C>
#include "dbgu.h"
unsigned char DBGU_Rx(void) { while(0 == (*AT91C_DBGU_CSR & AT91C_US_RXRDY)); return *AT91C_DBGU_RHR; }
void DBGU_Tx(char cData) { while(0 == (*AT91C_DBGU_CSR & AT91C_US_TXRDY)); *AT91C_DBGU_THR = cData; return; }
void DBGU_Str(char * cpStr) { while(0 != *cpStr) { DBGU_Tx(*cpStr); ++cpStr; } return; }
void DBGU_Menu(void) { DBGU_Str("1. LCD Print\n\r"); DBGU_Str("M. MENU Print\n\r"); return; }
void DBGU_Rx_ISR(void) { switch ((*AT91C_DBGU_RHR)&0x000000FF)// 1byte 추출 { case 'M': case 'm': DBGU_Menu(); break; default : DBGU_Str("Wrong Command\n\r"); DBGU_Menu(); break; } return; }
void DBGU_Init_ISR(void) // Interrupt { *AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; // Peripheral A setting *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; // PIO Disable *AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX; // Reset & Disable -ref) p224 *AT91C_DBGU_MR = AT91C_US_PAR_EVEN | AT91C_US_CHMODE_NORMAL; // Parity:EVEN /CHmode: Normal *AT91C_DBGU_BRGR = DBGU_CD; // Baud Rate setting *AT91C_AIC_IDCR = 1 << AT91C_ID_SYS; AT91C_AIC_SVR[AT91C_ID_SYS] = (unsigned int)DBGU_Rx_ISR; // 핸들러 등록 // 동작모드 및 우선순위 결정 -ref) p176 AT91C_AIC_SMR[AT91C_ID_SYS] = AT91C_AIC_SRCTYPE_POSITIVE_EDGE | AT91C_AIC_PRIOR_LOWEST; *AT91C_AIC_ICCR = 1 << AT91C_ID_SYS; // 커맨드 레지스터 클리어 //*AT91C_AIC_ISCR = 1 << AT91C_ID_PIOA; // 커맨드 레지스터 셋 *AT91C_DBGU_IER = AT91C_US_RXRDY; *AT91C_AIC_IECR = 1 << AT91C_ID_SYS; *AT91C_DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN; // Enable //AT91C_US_RXDIS | AT91C_US_TXDIS; // Disable return; }
void DBGU_Init_Polling(void) // Polling { *AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; // Peripheral A setting *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD; // PIO Disable *AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX; // Reset & Disable *AT91C_DBGU_MR = AT91C_US_PAR_EVEN | AT91C_US_CHMODE_NORMAL ; // Parity:EVEN /CHmode: Normal *AT91C_DBGU_BRGR = DBGU_CD; // Baud Rate setting *AT91C_DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN; // Enable //AT91C_US_RXDIS | AT91C_US_TXDIS; // Disable return; }
void DBGU_Init(void) { //DBGU_Init_Polling(); DBGU_Init_ISR(); return; } |
