코스웨어/15년 스마트컨트롤러
20150819-18번-안해운-일일업무일지 - 초음파센서 SRF05, Timer/Counter
알 수 없는 사용자
2015. 8. 20. 10:15
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;
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