==========================================================================================

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;
}









'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150818  (0) 2015.08.19
20150817  (0) 2015.08.18
20150813  (0) 2015.08.13
20150812  (0) 2015.08.13
20150811  (0) 2015.08.11
Posted by ahj333
,