728x90
반응형
http://chilles.tistory.com/22
001.
//---------- 입출력 IO설정
002.
#define PIO_PER (*(volatile unsigned int *) 0xFFFFF400) //병렬 입출력 제어 레지스터 병렬 입출력 포트로 사용한다.
003.
#define PIO_PDR (*(volatile unsigned int *) 0xFFFFF404)
004.
#define PIO_OER (*(volatile unsigned int *) 0xFFFFF410) //출력 방향 설정
005.
#define PIO_SODR (*(volatile unsigned int *) 0xFFFFF430) //출력
006.
#define PIO_CODR (*(volatile unsigned int *) 0xFFFFF434) //출력 하지 않음
007.
#define PIO_ISR (*(volatile unsigned int *) 0xFFFFF44C) //인터럽트 스테이터스 레지스터
008.
#define PIO_ASR (*(volatile unsigned int *) 0xFFFFF470)
009.
#define PIO_BSR (*(volatile unsigned int *) 0xFFFFF474)
010.
011.
//----------- 인터럽트 IO설정
012.
#define AIC_IDCR (*(volatile unsigned int *) 0xFFFFF124)
013.
#define AIC_SVR ((volatile unsigned int *) 0xFFFFF080)
014.
#define AIC_SMR ((volatile unsigned int *) 0xFFFFF000)
015.
#define AIC_ISR ((volatile unsigned int *) 0xFFFFF108)
016.
#define AIC_ICCR (*(volatile unsigned int *) 0xFFFFF128)
017.
#define AIC_IECR (*(volatile unsigned int *) 0xFFFFF120)
018.
019.
//---------- DBGU IO설정
020.
#define DBGU_CR (*(volatile unsigned int *) 0xFFFFF200)
021.
#define DBGU_MR (*(volatile unsigned int *) 0xFFFFF204)
022.
#define DBGU_IER (*(volatile unsigned int *) 0xFFFFF208)
023.
#define DBGU_CSR (*(volatile unsigned int *) 0xFFFFF214)
024.
#define DBGU_RHR (*(volatile unsigned int *) 0xFFFFF218)
025.
#define DBGU_THR (*(volatile unsigned int *) 0xFFFFF21C)
026.
#define DBGU_BRGR (*(volatile unsigned int *) 0xFFFFF220)
027.
028.
//---------- 전력 제어 설정
029.
#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10)
030.
031.
#define MASTERCLOCK 48000000
032.
033.
void
DBGU_TX_char(unsigned
int
data);
034.
035.
void
Delayms(unsigned
int
ms)
//딜레이 함수..
036.
{
037.
volatile
unsigned
int
count, countmax = (MASTERCLOCK / 10000) * ms;
038.
039.
for
(count = 0; count < countmax; count++);
040.
}
041.
042.
void
DBGU_RX_ISR(
void
)
/* DBGU interrupt service routine */
043.
{
044.
static
int
flag = 0;
045.
046.
flag ^= 1;
047.
048.
if
(flag)
049.
{
050.
PIO_SODR = 0x000000FF;
051.
DBGU_TX_char(
'1'
);
052.
}
053.
else
054.
{
055.
PIO_CODR = 0x000000FF;
056.
DBGU_TX_char(
'2'
);
057.
}
058.
DBGU_TX_char(DBGU_RHR);
059.
}
060.
061.
void
DBGU_TX_char(unsigned
int
data)
/* transmit a character by DBGU */
062.
{
063.
while
(!(DBGU_CSR & 0x0002));
// wait until TXRDY=1
064.
DBGU_THR = data;
// transmit a character
065.
}
066.
067.
int
main(
void
)
068.
{
069.
PMC_PCER = 1 << 2;
070.
PIO_OER = 0x000000FF;
071.
PIO_CODR = 0x000000FF;
072.
073.
// 주변장치A DTXD와 DRXD를 사용
074.
PIO_ASR = (unsigned
int
)1 << 10 | (unsigned
int
)1 << 9;
075.
// 주변장치B 사용 불가
076.
PIO_BSR = 0;
077.
// PA9,PA10을 병렬I/O포트로 사용하는것을 금지(주변장치로 사용O)
078.
PIO_PDR = ((unsigned
int
)1 << 10 | (unsigned
int
)1 << 9) | 0;
079.
080.
// 패리티 사용X
081.
DBGU_MR = 0x00000800;
// normal mode, no parity
082.
// 보레이트 발생 레지스터
083.
DBGU_BRGR = 26;
// MCK/16/26 = 115200 bps
084.
085.
// 0x150 = 101010000
086.
// RSTSTA=1, TXEN=1, RXEN=1
087.
// DBGU_SR 레지스터의 PARE,FRAME,OVRE 에러비트를 RESET, 송신부/수신부 동작 허용
088.
DBGU_CR = 0x00000150;
// TX, RX enable
089.
090.
// RXRDY = 1 (RX레디 인터럽트허용)
091.
DBGU_IER = (unsigned
int
)1 << 0;
092.
093.
// 주변장치1(System Controller)의 인터럽트 금지
094.
AIC_IDCR = (unsigned
int
)1 << 1;
095.
// 인터럽트 서비스 루틴의 Addr을 저장
096.
AIC_SVR[1] = (unsigned
int
)DBGU_RX_ISR;
097.
// SRCtype과 우선순위 설정
098.
AIC_SMR[1] = 1 | 7;
099.
// SYS의 에지 검출기 클리어
100.
AIC_ICCR = (unsigned
int
)1 << 1;
101.
// SYS의 인터럽트 허용(AIC_IDCR과 반대)
102.
AIC_IECR = (unsigned
int
)1 << 1;
103.
while
(1);
104.
}
728x90
'관리자 기고' 카테고리의 다른 글
vi vim 편집기 문장 치환, Dos 캐럿 문자(^M 엔터) 제거 (0) | 2019.03.29 |
---|---|
뿌띠 PuTTY SSH 자동 로그인 접속 설정 (0) | 2019.03.29 |
인디언 기도문 (0) | 2018.09.05 |
ATMega ADC Convert Pseudo Code (0) | 2013.06.05 |
AVR 매크로 어셈블리 (atmega2560 MACRO ASSEMBLY) (4) | 2013.06.03 |
AT91SAM7S ARM 수업 pseudocode Timer0_Init (5) | 2013.05.14 |
AT91SAM7S의 USART(DBGU) 수업 보조 자료 (6) | 2013.05.07 |
[양식] 프로젝트 제안서 (9) | 2013.05.06 |