본문 바로가기
코스웨어/15년 스마트컨트롤러

20150819-18번-안해운-일일업무일지 - 초음파센서 SRF05, Timer/Counter

by 알 수 없는 사용자 2015. 8. 20.
728x90
반응형

-ARM


dbgu.c 소스

#include <project.h>

void DBGU_Init(void)
{
  DBGU_Init_ISR();
}

void DBGU_Init_Polling(void)
{
  *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;
  
  *AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;
  
  //DBGU컨트롤 레지스터에서  먼저 RX, TX을  Reset 시켜준다. (지금 ENABLE 하면 안된다.) 
  *AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;

  //Even Parity, NormalMode
  *AT91C_DBGU_MR = AT91C_US_PAR_EVEN | AT91C_US_CHMODE_NORMAL;

  //BaudRate Set
  *AT91C_DBGU_BRGR = DBGU_CD;

  //DBGU컨트롤 레지스터에서  먼저 RX, TX 활성화 
  *AT91C_DBGU_CR = AT91C_US_RXEN |AT91C_US_TXEN; 
  
  return;
}

void DBGU_Init_ISR(void)
{
  *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;
  
  *AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;
  
  //DBGU컨트롤 레지스터에서  먼저 RX, TX을  Reset 시켜준다. (지금 ENABLE 하면 안된다.) 
  *AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;

  //Even Parity, NormalMode
  *AT91C_DBGU_MR = AT91C_US_PAR_EVEN | AT91C_US_CHMODE_NORMAL;

  //BaudRate Set
  *AT91C_DBGU_BRGR = DBGU_CD;

  *AT91C_AIC_IDCR = 1 << AT91C_ID_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;
  
  *AT91C_AIC_IECR = 1 << AT91C_ID_SYS;

  
  //DBGU컨트롤 레지스터에서  먼저 RX, TX 활성화 
  *AT91C_DBGU_CR = AT91C_US_RXEN |AT91C_US_TXEN; 
  
  return;
}

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

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)
  {
    case '1':
      Lcd_Inst(LCD_INST_CLR);
      Lcd_Print("Hello ARM");
      break;
      
    case 'M':
    case 'm':
      DBGU_Menu();
      break;    
      
    default :
      DBGU_Str("Wrong Commend\n\r");
      DBGU_Menu();
  }

  return;

}


초음파센서 SRF05




Timer / Counter

초음파 센서를 사용하려면 Timer/Counter 와 인터럽트를 사용한다.


Timer/Counter (pdf 447페이지)









Figure 33-8. WAVSEL = 00 with tirgger에서 다양한 파형을 만들 수 있고

Figure 33-11. WAVSEL = 01 Without Trigger에서 더 다양한 파형을 만들 수 있다.



728x90