목차 1. 기본설정 1-1. 설치해야할프로그램및파일 2. 문서읽는법 Cygwin 설치법 GNUARM 설치법 AT91SAM7S256 드라이버설치및컴퓨터연결 2-1. 개요 2-2. 회로도읽기 2-3. 데이터시트읽기 2-4. 타이밍차트읽

Similar documents
INDEX 1. DataSheet 및 Circuit 1-1 DataSheet 1-2 Circuit 2. ADC 를통한조도센서, 온도센서활용. 2-1 조도센서, 온도센서활용 (ADC) 3. DBGU 를통한 LED, Relay, LCD, 초음파센서활용. 3-1 LED 토글

Microsoft Word ARM_ver2_0a.docx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

2주차: 입출력 제어 복습

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

API 매뉴얼

CAN-fly Quick Manual

RealDSP UT 프로그램 메뉴얼

KEY 디바이스 드라이버

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

T100MD+

슬라이드 1

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - AM-SLCD_시리얼 LCD_ 메뉴얼.doc

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

정보보안 개론과 실습:네트워크

API 매뉴얼

CANTUS Evaluation Board Ap. Note

MicrocontrollerAcademy_Lab_ST_040709

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

ATmega128

H3250_Wi-Fi_E.book

Microsoft Word - AM-GYRO-P V02 메뉴얼.doc

(MHT-SB112\273\347\276\347\274\255.hwp)

Microsoft Word doc

BY-FDP-4-70.hwp

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

OSTSen-THL100 사용자설명서 Ver 1.1 Onsystech OSTSen-THL100 Ver1.1 1 of 8 Onsystech

Microsoft PowerPoint - es-arduino-lecture-03

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

RVC Robot Vaccum Cleaner

Microsoft Word - LKP-RTD 사용자 설명서

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint UNIX Shell.ppt

ADP-2480

[8051] 강의자료.PDF

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft Word - PEB08_USER_GUIDE.doc

1

고급 프로그래밍 설계

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

Microsoft Word - logic2005.doc

Visual Basic 반복문

UI TASK & KEY EVENT

Microsoft PowerPoint - Chapter 8_USART Serial Communication

OSTSen-PIR100 사용자설명서 Ver 1.1 Onsystech OSTSen-PIR100 V1.1 1 of 8 Onsystech

슬라이드 1

실험 5

IoT FND8 7-SEGMENT api

슬라이드 1

DE1-SoC Board

OSTSen-MOS100 사용자설명서 Ver 1.1 Onsystech OSTSen-MOS100 Ver of 8 Onsystech

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft Word - CooCox

<4D F736F F D20B1E2BCFAC0DAB7E1202D20454F435220B8F0B5E5B9F6BDBA20C5EBBDC5C1A6C7B020BBE7BFEBB9FD202D F302E646F63>

Remote UI Guide

SRC PLUS 제어기 MANUAL

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Microsoft Word - codevision사용법_pdf버전.docx

PowerPoint Template

슬라이드 1

Lab 3. 실습문제 (Single linked list)_해답.hwp

슬라이드 제목 없음

Microsoft Word - ASG AT90CAN128 모듈.doc

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

슬라이드 1

윈도우즈프로그래밍(1)

<4D F736F F F696E74202D205BBDC7BDC0345DC1B6B5B5BCBEBCADC1A6BEEE2E BC8A3C8AF20B8F0B5E55D>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

Microsoft Word - Ahram_ISP_V15_Manual_V20.doc

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

온습도 판넬미터(JTH-05) 사양서V1.0

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

2009년2학기 임베디드시스템 응용

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터

untitled

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16),

게임 기획서 표준양식 연구보고서


Microsoft PowerPoint - 30.ppt [호환 모드]

구성품 - UMD 2808 모듈 - JTAG 커넥터 - 젂원 케이블 주요 특징 모듈의 부품화 : 고신뢰성의 DSP 모듈을 최적화된 시스템에 적용 용이 TMS320F2808 ZGMS - 100MHz 탑재 : 확장된 온도규격 (-40 도 ~ 125 도) 적용 Ultralo

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Transcription:

ARM (AT91SAM7S256) 보고서 2013 년 6 월 7 일 스마트컨트롤러 2013 조유진

목차 1. 기본설정 1-1. 설치해야할프로그램및파일 2. 문서읽는법 1-1-2. Cygwin 설치법 1-1-3. GNUARM 설치법 1-1-4. AT91SAM7S256 드라이버설치및컴퓨터연결 2-1. 개요 2-2. 회로도읽기 2-3. 데이터시트읽기 2-4. 타이밍차트읽기 3. 캐릭터 LCD(PIO) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 4. 온도센서및조도센서 (ADC) 4-1. 개요 4-2. 사용하는레지스터 4-3. Source Code 4-4. 실습사진 5. LCD 및초음파센서활용 (PIO, AIC) 5-1. 개요 5-2. 사용하는레지스터 5-3. Source Code 5-4. 실습사진 6. DBGU 활용 (LED, 릴레이 On/Off) 6-1. 개요 6-2. 사용하는레지스터 6-3. Source Code 6-4. 실습사진

1. 기본설정 환경 준비물 Windows 컴퓨터, AT91SAM7S256, 케이블, 개념 1-1. 설치해야하는프로그램및파일 이름 Cygwin 설명윈도우에서리눅스환경을제공해주는에뮬레이터프로그램. GCC를사용가능하게해주며, make명령어로컴파일할수있다. GNUARM GNU 재단에서제작한 ARM 용 GCC 확장컴파일러. SAM-BA Atmel 에서제공하는 ISP(In-System Programmer) 프로그램. 컴파 일하고나온 bin 파일을 AT91SAM7S256 에올리기위해사용된다 프로젝트파일 컴파일을하기위한 makefile과, 사용자가프로그래밍한내용을 실행시킬수있는 Cstartup.s 등이제공된다. 칩을제작한 Atmel 사에서제공하는데이터시트이다. 레지스터들 데이터시트 회로도 의정보와, 스펙등이기술되어있어프로그래밍을하기전무조건확인해야할문서이다. 보드를제작한우리로봇기술 ( 제작사에는차이가있을수있음 ) 에서제공하는회로도이다. PIN번호등을확인할때쓰인다. 이름을클릭하여 URL 이동 1-1-1. Cygwin 설치법

적당하게다음버튼을눌려준다. 1. 전체 Uninstall 2. Devel Install 3. Editor : gvim, vim, nano 4. Shell : zsh

이후에러가뜨면확인버튼만누르며기다리다보면설치가된다. 설치이후리눅스명령어를윈도우에서쓸수있게된다. 1-1-2. GNUARM 설치법 Cygwin DLL 함께설치체크를해제한다.( 이미깔려있으므로 ) 1-1-3. AT91SAM7S256 드라이버설치및컴퓨터연결 1 TST ON 2 POWER ON 3 약 10초대기 4 POWER OFF 5 TST OFF 6 POWER ON 첫시도에자동으로드라이버설치화면이나오는데, 이때 Windows 7에서는자동으로 GPS 드라이버를 잡으므로 취소하여 수동으로 설치해야 한다. 드라이버가 존재하는 경로는 SAM-BA를설치한디렉터리의 drv 폴더에있다. 이를선택하고설치하면 SAM-BA에서보드 를잡을수있고, 컴파일등의이용이가능해진다.

2. 문서읽는법 3-1. 개요 기기마다회로구성이나 PIN들이동작하는내용이다를수있으므로회로도와데이터시트는보드를받았을때제일우선적으로체크해야할것들이다. 또한모듈을이용할때타이밍차트없이는동작시킬수가없다. 3-1. 회로도읽기 이미지 VCC n V GND 설명 저항콘덴서전해콘덴서무엇과연결된핀연결되지않은핀 LED 3-1. 데이터시트읽기 레지스터나칩에대한정보를알기위해서는데이터시트가필요하다. 보통일반적으로 Register Summary같은항목을제공하여레지스터리스트를볼수있고, 원하는레지스터를찾아어떤역할을하는지를자세히알수있다. 또한기기의스펙이나적정전압을찾을수있어큰도움이된다. 레지스터주소계산법 : 기준주소 + Offset ( 예시 : 기준주소 :0xFFFFF400, Offset:0x100 인레지스터의주소는 0xFFFFF500 이다.) 3-1. 타이밍차트읽기 모듈이작동하는순서를알려주는도표이다. Lowers와 High로상태를구분한다. 도표에맞게신호를넣어주어야작동하며, 어떤상태를가지던무관한부분이있고무조건 L/H부터시작해야하는것도있다. 이에유의하여프로그래밍해야한다. 일직선으로뻗어있는부분들은부가적으로 txxx라고기술되어있는데, 이는최소 ( 혹은최대 ) 몇시간단위만큼대기해야제대로작동한다는의미이다. 이부분은적당한딜레이를주어처리한다.

3. 캐릭터 LCD(PIO) 사용기능 조작물품 PIOA, 모듈활용 캐릭터 LCD 3-1. 개요 캐릭터 LCD는글자만을출력하기위한 LCD 장치이다. 우리는모듈을이용해조작한다. 모듈을조작하려면우선어떻게신호를주면어떤동작을하는지확인해야하므로타이밍차트를분석해코드를구상해야한다. 캐릭터 LCD 타이밍차트 Write(LCD_CmdWrite, 커맨드명령에쓰임 ) Read(LCD_DataWrite, 데이터입력시쓰임 ) Read 시에는 Write 때와다름없지만 R/W 핀이특정시점에서무조건 H 가되어야한다. 기본적으로작동하는방법

PIO에서조작할핀네개를미리선언해둔다.(LCD_RS, LCD_RW, LCD_EN, LCD_BS) 그리고 Write 타이밍도를참고하여 LCD_CmdWrite함수를제작하고, 이를이용해 LCD를어떤방식으로쓸지세팅해주기위해 LCD_Init함수를만들어초기화함수도만들어준다. 초기화는모듈에서명령을제공해주며이는데이터시트를참조하도록한다. 명령어및설명 이름 Clear display Return home Entry mode set Display on/off control Cursor or display shift Function set Set CG RAM address Set DD RAM address Write data to CG or DD RAM Read data from CG of DD RAM 설명화면상의모든글자를없앰원시작점으로커서를되돌림커서가움직이는방향과쉬프트되는방법을정함디스플레이 / 커서 / 깜빡이를설정커서와디스플레이를옮김데이터길이 / 표시할줄수 / 캐릭터폰트를설정 CG RAM 주소를정해줌 DD RAM주소를정해줌데이터를 DD RAM이나 CG RAM에씀데이터를 DD RAM이나 CG RAM으로부터읽음 여기서우리는 Function set, Entry mode set, Cursor or display shift, Display, Clear display, Return Home 순으로명령을넣어주는것으로초기화를끝낼수있다. 이후 LCD_DataWrite 함수를이용하여글자를출력시켜확인할수있다. ASCII 코드 ( a' 등 ) 로입력하면, 메모리에서해당하는숫자의번지속폰트를화면에띄워주는방식이다. 사용자제작폰트추가하기 현재우리가사용하는모델은일어 / 영어 / 숫자 / 일부기호만출력이가능하고한글출력이나다른기호의출력이불가능하다. 그래서모듈자체에있는폰트메모리에사용자가추가할수있는영역이존재하는데, 이곳에폰트의모양을숫자로변환하여추가할수있다. 폰트를추가하려면직접메모리에접근해야하는데, 이를제공하는명령어가 Set CG RAM address(0x40) 이다. 명령어를실행한직후 LCD_DataWrite함수를이용해쓸내용을전부입력해준다. 하지만폰트의구조에대해유의해야할점이있는데, 한글자입력할시한줄한줄씩만입력하여 8줄, 즉 8*5크기로쓴다는점이다. 위의그림과같이생긴폰트를추가하고싶다면, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x04, 0x00, 0x04 순으로등록하면그림과같은폰트를화면상에서볼수있다. 그리고이를읽어올때는 LCD_DataWrite( 0x00 ) 식으로사용해폰트메모리속의해당번지글자를띄워준다.

3-2. 사용하는레지스터 이름 주소 페이지 설명 PIO_PER FFFFF400 250 PIO Enable Register PIO_OER FFFFF410 251 Output Enable Register PIO_SODR FFFFF430 254 Set Output Data Register PIO_CODR FFFFF434 255 Clear Output Data Register 3-3. Source code lcd.h lcd.c

3-4. 실습사진

4. 온도센서및조도센서활용 사용기능 조작물품 ADC, PIN 조작, 캐릭터 LCD 조작 캐릭터 LCD, LED, 조도센서, 온도센서 4-1. 개요 온도센서와조도센서는저항의일종이다. 특정상황이주어지면소자의저항값이높아지는것으로, ADC와연결된 PIN으로들어가 AT91SAM7S256 보드에흘러들어가면아날로그- 디지털컨버터에서축차비교법 ( 전압을전체 5V( 보드에서흐르는전압 ) 에서분해능만큼 (8bit/10bit) 나누어전압을서서히올려비교하는방법 ) 을이용하여아날로그값을디지털로변환한다. 이과정에서어느정도의값이손실되나실제값과거의유사한값을얻을수있게된다. 그리고얻어진값을통해여러응용이가능하다. 작동방법 우선, 저항의값을알아내기위해 ADC컨버터를이용해야한다. ADC컨버터를설정해주기위해먼저 PMC_PCER레지스터를이용해 ADC에전원을공급해주고, 제어레지스터 (ADC_CR) 로소프트웨어리셋을해준다. 그리고센서들이연결된핀의채널을사용가능하게해주고, ADC_MR을이용하여분해능을 10비트, 변환속도를 4Mhz로설정해주는것으로 ADC 설정함수 (ADC_Init) 은끝난다. 설정이끝났으므로, ADC_CR 레지스터를이용해작동을시작한다. 그리고 ADC_SR에있는 DRDY비트 ( 변환이완료되었음을알린다 ) 가 1이될때까지대기한후, ADC_LCDR(Last Converted Data) 혹은해당채널의데이터레지스터에서값을읽어오는것으로이용이가능하다. 4-2. 사용하는레지스터 이름 주소 페이지 설명 ADC_CR 0xFFFD8000 547 Control Register ADC_MR 0xFFFD8004 548 Mode Register ADC_CHER 0xFFFD8010 550 Channel Enable Register ADC_CHDR 0xFFFD8014 550 Channel Disable Register ADC_CHSR 0xFFFD8018 551 Channel Status Register ADC_SR 0xFFFD801C 552 Status Register ADC_LCDR 0xFFFD8020 553 Last Converted Data Register ADC_IER 0xFFFD8024 553 Interrupt Enable Register ADC_IDR 0xFFFD8028 554 Interrupt Disable Register ADC_IMR 0xFFFD802C 555 Interrupt Mask Register ADC_CDR0 0xFFFD8030 556 Channel Data Register 0 ADC_CDR1 0xFFFD8034 556 Channel Data Register 1 ADC_CDR2 0xFFFD8038 556 Channel Data Register 2 ADC_CDR3 0xFFFD803C 556 Channel Data Register 3 ADC_CDR4 0xFFFD8040 556 Channel Data Register 4 ADC_CDR5 0xFFFD8044 556 Channel Data Register 5 ADC_CDR6 0xFFFD8048 556 Channel Data Register 6 ADC_CDR7 0xFFFD804C 556 Channel Data Register 7 PMC_PCER 0xFFFFFC10 204 Peripheral Clock Enable Register

해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람. 4-3. Source code adc.h

adc.c 4-4. 실습사진

5. 초음파센서활용 사용기능 조작물품 AIC, 타이머카운터, 캐릭터 LCD 조작 캐릭터 LCD, 초음파센서 (SRF05) 5-1. 개요 초음파는인간의가청영역을벗어난고음파인데, 이를여러방향으로쏘아되돌아오는시간을측정하여거리를재는것이초음파센서이다. 초음파센서는액체에서높은효율을발생하여의료기기나돌고래등이사용한다. 일반적으로는기기의한계로인해 2~3m정도만측정이가능하다. 같은센서종류임에도불구하고조도센서나온도센서와는동작하는원리에차이가있다. 조도센서 / 온도센서는축차비교를하여센서값을읽어오는반면에초음파센서는메아리핀의상승에지가얼마나오래 HIGH상태로있는지를체크하고, 이를계산하여거리를측정한다. 음파는 1초당 340m씩갈수있으므로이를나누어보면약 0.00029초당 1cm 나아감을알수있다. 그리고초음파는왕복해야하므로, 이를이용해타이머카운터로약 0.00058초마다카운터를올려거리를잴수있다. 이원리는어떤모듈이든똑같이적용된다. SRF05 초음파센서타이밍도 작동하는방법 초음파센서는사용자가트리거펄스를주는부분과, 에코펄스가들어오기전설정해야할것, 인터럽트, 타이머카운터등설정해주어야할것들이다소많이있다. 우선, 타이머카운트설정부터보겠다. 타이머카운트를사용하려면해당번호의장치를 PMC로부터전원공급을해주어야하며, Clock의분주기를고쳐야하므로 TC_CCR레지스터를이용해타이머 Clock을우선중지시킨다. 그리고 TC_IDR를이용해모든인터럽트를우선중지시킨다. TC_SR는읽혀지면초기화되는성질이있는데, 이를이용하여초기화한다. 그리고 TC_CMR를이용해분주비를오차가제일적은 8로, 비교방식을축차비교로설정해준다. 분주비가 8이면 MCK인 48000000를 1sec에서나누면 Clock 하나에소모되는시간이나오는데, 여기서 8을곱하면분주비 8일시 1 Clock 당소모되는시간이되고, 기기가처리할시간단위를정해주기위해 1Clock 당소모되는시간을몇배해야원하는시간 ( 음파가 1cm가는시간 ) 이나오는지계산하여그값을 TC_RC에넣어준다. 그리고 AIC_IDCR에서인터럽트를비활성화하고, AIC_SVR에서타이머핸들러를등록하고, AIC_SMR에서인터럽트의모드를설

정해준다.( 상승에지체크, 우선순위최하 ) 혹시다른값이있을수있으므로 AIC_ICCR에서전부 Clear해주고, TC_IER을통해 TC_RC에서설정한값을비교하여그값이되면활성화되는인터럽트를켠다. 이후 AIC_IECR를통해 TC0의인터럽트를켜준다. 그러나클록활성화및타이머실행을하지는않았으므로여기서바로실행되지는않는다. 353번클록이돌면실행되는 Timer_Handler함수는단순히 Tick변수를증가시켜해당변수만큼음파가가고있음을알수있게해주고, TC_SR변수를읽어다시카운트하도록해준다. 그리고이후실행되는 TRG_Init함수는사용자가직접모듈의트리거핀에펄스를생성시켜모듈을동작하는신호를보내기전설정하는것이다. 우선 PIOA를사용하므로 PIO_PER로핀을활성화하고, PIO_OER로출력활성화를한후, 타이밍차트에따라시작은 L상태여야하므로 PIO_CODR을이용해초기화해둔다. 또, 우리가거리를계산하는데에쓰이는 Echo핀을쓰기위해이것도초기화해둔다. 이것도인터럽트가걸리므로 AIC를함께쓴다. 때문에 PMC_PCER을통해전원공급을해준다. 그리고해당핀을입력에만쓸것이므로 PIO_ODR을통해출력비활성화를해준후, PIO_PER을통해핀활성화를한다. 그리고인터럽트를쓰기전우선 PIO_IDR을통해에코핀의인터럽트를비활성화해준다. 또한 AIC_IDCR로 PIOA장치의인터럽트를비활성화한다. 이후우리는하강에지를찾아인터럽트를사용할것이므로, PIO_PPUDR(PIO_PUDR) 을이용해 Pull-up ( 입력전에는무조건 H상태이다가, 입력한순간 L가된다. 반대로는 Pull-Down이있다.) 을에코핀에서비활성화해준다. 이후 AIC_SVR에 ULT_Handler함수를등록하면인터럽트가걸릴때해당함수의주소가자동으로 pc에들어가불러와진다. 그리고 AIC_SMR를통해설정하는데, 여기서유의해야할점은앞에서 Pull-Up을비활성화해주었으므로하강에지를찾아야끝난다는것이다. 그러면하강에지가찾아올때 ULT_Handler함수가불러와질것이다. 이후잡내용을날리기위해 AIC_ICCR로 Clear해주고, 오차발생을방지하기위해 PIO_IFER 로 Glitch Filter를에코핀에걸어준다. 그리고 AIC_ISCR을이용해 PIOA전체에인터럽트를걸어주고, PIO_IER을통해에코핀에인터럽트를, AIC_IECR로 AIC장치가인터럽트를처리하게활성화해준다. 여기서 AIC_SVR에등록해준 ULT_Handler함수는불러와지는시점에서는이미음파가되돌아온상태이므로 ( 거리계산이끝난상태 ) 현재까지받아온거리를전역변수에게넘겨주고, AIC_EOICR에 0을대입해거리를다계산하였으므로인터럽트를끝냄을알리는함수이다. 사용자가초음파센서전체를동작시키기위해만들어진 ULT_Run함수는, 우선트리거펄스를주어모듈에게시작을알린다 (TRG_Pulse). 이함수는 PIO_SODR로트리거핀을출력하고 48Cycle이상대기해 10uS이상지연시킨다. 그리고 PIO_CODR을통해다시출력을없앤다. 이후트리거신호가끝났으면 while 문과 PIO_PDSR로에코핀이상승에지를만날때까지지연시켜준다. while문을벗어나면상승에지를만났다는것이므로 TC_CCR로타이머 Clock을활성화시키고타이머를시작시켜계속거리를잰다. 에코신호가하강에지를띄면거리재는것을멈추어야하므로 PIO_IER로에코핀의인터럽트를활성화시켜준다. 그리고 AIC_IECR로 PIOA의인터럽트를활성화한다. 이후끝날때까지계속시간을재게하며, ULT_Handler를만나재는상태가끝나면에코핀과타이머카운터를다시초기화하여다시쓸수있게하며동작을중단시킨다. 이후전역변수로선언된거리를문자열로변환시켜해당문자열을반환하는것으로초음파센서작동함수가끝이난다. 반환된문자열은캐릭터 LCD에띄워확인할수있다.

5-2. 사용하는레지스터 이름 주소 페이지 설명 AIC_SMR FFFFF000 175 Source Mode Register AIC_SVR FFFFF004 177 Source Vector Register AIC_IECR FFFFF120 180 Interrupt Enable Command Register AIC_ICCR FFFFF128 181 Interrupt Clear Command Register AIC_IDCR FFFFF124 181 Interrupt Disable Command Register AIC_EOICR FFFFF130 182 End of Interrupt Command Register AIC_ISCR FFFFF12C 182 Interrupt Set Command Register PMC_PCER FFFFFC10 204 PMC Peripheral Clock Enable Register PIO_PER FFFFFC00 250 PIO Enable Register PIO_OER FFFFFC14 251 Output Enable Register PIO_IFER FFFFFC20 253 Glitch Input Filter Enable Register PIO_SODR FFFFFC30 254 Set Output Data Register PIO_CODR FFFFFC34 255 Clear Output Data Register PIO_ODR FFFFFC14 255 Output Disable Register PIO_IER FFFFFC40 256 Interrupt Enable Register PIO_IDR FFFFFC44 257 Interrupt Disable Register PIO_ISR FFFFFC4C 258 Interrupt Status Register PIO_PPUDR FFFFFC60 260 Pull-up Disable Register TC_CCR FFFA0000 466 Channel Control Register TC_CMR FFFA0004 467 Channel Mode Register TC_RC FFFA001C 475 Register C TC_SR FFFA0020 476 Status Register TC_IER FFFA0024 478 Interrupt Enable Register TC_IDR FFFA0028 479 Interrupt Disable Register 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람. 5-3. Source code ultra.h

ultra.c

5-4. 실습사진

6. DBGU 활용 (LED, 릴레이 On/Off) 사용기능 조작물품 AIC, 타이머카운터, PIOA 조작, DBGU LED, 릴레이, 초음파센서, 하이퍼터미널 6-1. 개요 ARM에서처리할수있는통신에는크게비동기방식 (UART) 과동기방식 (USART) 이있는데, 여기서디버깅목적으로만들어진비동기방식통신장치가있고, 이가 DBGU이다. 이를이용하면직렬 ( 시리얼 ) 로컴퓨터의하이퍼터미널프로그램을이용하여데이터를주고받을수있다. 이를응용하면공장기기제어프로그램, 도서대여시스템등을제작할수있다. 작동하는방법 우선 DBGU제어레지스터 (DBGU_CR) 로송신기와수신기를 Clear한다. 이후 Baud Rate공식에따라 DBGU_BRGR에 Baud Rate를입력해준다. 그리고 DBGU_MR로채널모드를 Normal로, Parity Code를짝수로설정해준다. 이후 PIO_PDR로송신으로사용할핀과수신으로사용할핀을비활성화하고, 이들의장치모드를 PIO_ASR을통해 A로변경해준다.( 원래는 PIOA이다 ) DBGU_CR로송수신을활성화하면 DBGU초기화가완료된다. 그리고 DBGU 인터럽트초기화함수는 DBGU_Init과유사한부분은미리생략하여설명한다. 이함수의특징은인자로함수포인터를받아이인자를 SVR에넣는것이다. 우선 DBGU의모든인터럽트를비활성화한다. 이후 DBGU_SR를읽어상태정보를전부날려준다. 그리고 AIC_IDCR로 SYSC를비활성화하여 Global Interrupt를꺼준다. 이후 AIC_SVR에인자인함수를넣어준다. 그리고 AIC_SMR를통해모드를설정해준다 ( 내외부 Sensitive, H상태를감지한다 ). AIC_ICCR로 SYSC에있는인터럽트를 Clear하여오류를방지하고, AIC_IECR로활성화를, DBGU_IER로수신인터럽트를켜준다. 그리고 DBGU_CR로송수신을활성화한다. 송수신함수에는인터럽트 Handler로쓰인함수와, DBGU_SendChar, DBGU_SendString, DBGU_RecvChar가있다. 우선 DBGU_SendChar는하이퍼터미널에단한글자만전송해주는함수로, 단순히상태레지스터 (DBGU_SR) 에서송신준비가되어있을때까지대기한후, DBGU_THR에해당값을대입하는식으로글자를보낸다. 그리고 DBGU_SendString에서는이를단순히문자열을받아여러번 DBGU_SendChar를호출하게해주는것이다. DBGU_RecvChar는하이퍼터미널로부터수신받을때쓰이는데, 상태레지스터 (DBGU_SR) 에서수신준비가될때까지대기한후, DBGU_RHR에있는값을반환하여이를처리한다. 대신이함수는자동으로불러와지지않으므로, 무언가실시간으로입력받아야할때처리가곤란하다는단점이있다. 이것을확장하여인터럽트와함께쓸수도있다. DBGU_InterruptHandler는무언가수신된상태면자동으로인터럽트가걸리며해당함수가호출되는데, 그때자동으로수신처리함수인 DBGU_RecvChar를불러와반환된값을통해입력을처리한다.

6-2. 사용하는레지스터 이름 주소 페이지 설명 DBGU_CR 0xFFFFF200 225 Control Register DBGU_MR 0xFFFFF204 226 Mode Register DBGU_IER 0xFFFFF208 227 Interrupt Enable Register DBGU_IDR 0xFFFFF20C 228 Interrupt Disable Register DBGU_IMR 0xFFFFF210 229 Interrupt Mask Register DBGU_SR 0xFFFFF214 230 Status Register DBGU_RHR 0xFFFFF218 232 Receive Holding Register DBGU_THR 0xFFFFF21C 233 Transmit Holding Register DBGU_BRGR 0xFFFFF220 234 Baud Rate Generator Register DBGU_CIDR 0xFFFFF240 235 Chip ID Register DBGU_EXID 0xFFFFF244 238 Chip ID Extension Register DBGU_FNR 0xFFFFF248 238 Force NTRST Register PIO_PDR 0xFFFFF404 250 PIO Disable Register PIO_ASR 0xFFFFF470 261 Peripheral A Select Register AIC_SMR 0xFFFFF000 175 Source Mode Register AIC_SVR 0xFFFFF080 177 Source Vector Register AIC_IVR 0xFFFFF100 177 Interrupt Vector Register AIC_FVR 0xFFFFF104 178 FIQ Interrupt Vector Register AIC_ISR 0xFFFFF108 178 Interrupt Status Register AIC_IPR 0xFFFFF11 179 Interrupt Pending Register AIC_IMR 0xFFFFF11C 179 Interrupt Mask Register AIC_CISR 0xFFFFF114 180 Core Interrupt Status Register AIC_IECR 0xFFFFF120 180 Interrupt Enable Command Register AIC_IDCR 0xFFFFF124 181 Interrupt Disable Command Register AIC_ICCR 0xFFFFF128 181 Interrupt Clear Command Register AIC_ISCR 0xFFFFF12C 182 Interrupt Set Command Register AIC_EOICR 0xFFFFF130 182 End of Interrupt Command Register AIC_SPU 0xFFFFF134 183 Spurious Interrupt Vector Register AIC_DCR 0xFFFFF138 183 Debug Control Register 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람. 6-3. Source code dbgu.h

dbgu.c

6-4. 실습사진