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
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
채팅소스파일입니다. (2) | 2015.08.25 |
---|---|
20150824-14번-박제혁-일일업무일지 - FD_ISSET, select 함수를 이용한 채팅프로그램 (8) | 2015.08.25 |
20150821-20번-엄민웅-일일업무일지 - windbg 어셈블리 (8) | 2015.08.21 |
20150820-19번-안향진-일일업무일지 - 어셈블리 컴파일 (6) | 2015.08.21 |
20150818-16번-박태인-일일업무일지 - select 함수로 입출력 다중화 구현 (7) | 2015.08.18 |
업무일지 작성 순서 (0) | 2015.08.18 |
20150817-13번-박서연-일일업무일지 - 어셈블리 레지스터 (5) | 2015.08.17 |
20150814 11번 남수진 - ARM(DBGU 수신 인터럽트 사용) (6) | 2015.08.14 |