좋은자료가 보여서 프랑켄님의 블로그에서 담아왔습니다! 주소는 아래와 같습니다!

http://blog.naver.com/PostList.nhn?from=postList&blogId=ranken&categoryNo=43&currentPage=5


상 수 (추가 : 2010. 4. 5, 수정 : 2010. 5. 4)

  RAMEND : 칩에 존재하는 RAM의 마지막 주소 (byte 주소)

  XRAMEND : 지정 가능한 램의 마지막 주소 (외부램의 없다면 RAMEND와 동일)

  E2END : EEPROM의 마지막 주소

  FLASHEND : flash memory 끝 주소 (byte 주소)

  SPM_PAGESIZE : flash memory page size (byte 단위)

  E2PAGESIZE : EEPROM의 페이지 크기

  SIGNATURE_0 : device signature (byte 0)

  SIGNATURE_1 : device signature (byte 1)

  SIGNATURE_2 : device signature (byte 2)

 

  FUSE_MEMORY_SIZE : FuseBit bytes의 크기 (fusebit bytes는 low, high, extended로 구성)

 

  F_CPU : 사용자가 제공하는 CPU 클럭 정보

 

 * SIGRD가 정의되어 있지 않다는 컴파일러 에러가 발생하는 버그가 존재하므로

  #ifndef SIGRD

  #define SIGRD  5

  #endif

  위의 코드를 추가하여 컴파일.

 

 

매크로(추가 : 2010. 4. 5,  수정 : 2011, 11. 17)

  _BV() : bit value    특정 비트 플래그의 값을 검사하기 위한 비트마스크를 만드는 매크로

  예) 1 << TXC   =====>   _BV(TXC)

        while( !(UCSRA & (1<<TXC) );        ====>    while( !(UCSRA & _BV(TXC) );

  sei() : 전역 인터럽트 활성화, 어셈블리 명령어 sei와 동일함.

  cli() : 전역 인터럽트 비활성화, 어셈블리 명령어 cli와 동일함.

  bit_is_set(sfr, bit) : sfr레지스터의 bit가 set이면 참(0이아닌 값).

  bit_is_clear(sfr, bit) : sfr레지스터의 bit가 clear면 참(0이아닌 값).

  loop_until_bit_is_set(sfr, bit) : sfr레지스터의 bit가 set 될 때까지 대기. (while 루프)

  loop_until_bit_is_clear(sfr, bit) : sfr레지스터의 bit가 clear 될 때까지 대기. (while 루프)

 

헤더파일

  avr/io.h : device에 관련된 기본적인 정의 (추가 : 2010. 4. 23)

  컴파일러 옵션 '-mmc='으로 전달된 avr에 대한 적절한 입출력 관련된 정의들을 불러들인다.

  <avr/ioXXXX.h>를 include함으로써 이 작업을 수행한다. 모든 AVR에 공통적인 레지스터는

  <avr/common.h>에 정의 되어 있고, avr/io.h에서 읽어들인다.

  읽어들이는 헤더파일

  <avr/sfr_defs.h>

  <avr/portpins.h>

  <avr/common.h>

  <avr/version.h>

 

  avr/boot.h : 부트로더 지원 (추가 : 2010. 4. 16)

  부트로더에서 제공하는 기능들에 대한 C 언어 지원 매크로, 함수, 상수

  전역 인터럽트는 자동으로 disable 되지 않고 프로그래머가 결정하도록 한다.

  페이지 기록하는 예제 코드도 포함되어 있다.

 

  avr/pgmspace.h : flash memory에 접근 기능 제공 (추가 : 2010. 4. 16)

  장치의 플래시 메모리 영역에 저장된 데이터에 접근하기 위한 인터페이스를 제공한다.

  대상 장치는 LPM이나 ELPM 명령을 지원해야 한다. 

  IAR C의 헤더파일과의 호환성을 위해 제공되지만 100% 호환되지는 않는다.

  ram에 기초한 문자열을 다루는 경우에는 avr_string에서 설명하는 표준 문자열 함수를 사용.

 

  inttypes.h : 정확한 길이의 정수형 타입 정의 (추가 : 2010. 4. 16)

  그 길이를 정확하게 사용할 필요가 있는 정수형 데이터를 정의하는 stdint.h를 확장한다.

  "far" 포인터(64kbytes 초과하는 주소를 위한), printf/scanf에 사용하는 formatting options


 

  avr/interrupt.h : 인터럽트 서비스 루틴 작성에 필요한 매크로 지원(추가 : 2010. 5. 4)

  C언어는 하드웨어에 종속적이지 않은 추상화된 언어이기 때문에 하드웨어에 따라서 달라지

  는 인터럽트 서비스 루틴을 직접 지원할 수가 없다. 따라서, AVR 컴파일러에 따라서 인터럽트

  지원 방법을 나름대로의 방식으로 구현한다. avr-gcc에서는 인터럽트 벡터 테이블이 미리

  정의된 특정 이름을 가지고 있다.

 

  util/setbaud.h : 보오레이트 계산에 필요한 매크로 지원(추가 : 2010. 5. 11)

  F_CPU(시스템 클럭), BAUD_TOL(허용 오차율%, 기본값은 2%), BAUD(보오레이트)의 3개의

  상수를 제공 받아서 UBRRH_VALUE, UBRRL_VALUE, USE_2X(2배속 사용여부)를 전처리기에

  서 계산해서 상수로 쓸 수 있도록 한다.

 

 

 #undef BAUD      // 이전에 BAUD를 define 했다면 컴파일러 오류를 피한다.
 #define BAUD 38400
 #include <util/setbaud.h>
   UBRRH = UBRRH_VALUE;
   UBRRL = UBRRL_VALUE;
 #if USE_2X
   UCSRA |= _BV(U2X);
 #else
   UCSRA &= ~_BV(U2X);
 #endif

 

  avr/eeprom.h : EEPROM에 읽기/쓰기 위한 지원 매크로 및 함수 지원(추가 : 2010. 5. 13)

  EEPROM이 사용 가능한가를 알아보는 eeprom_is_ready()와 사용 가능할 때까지를 기다리는

  eeprom_busy_wait()를 제공하고, EEPROM에 읽고, 쓰는 eeprom_read_XXX, eeprom_write_XX

  제공. 단, 모든 함수는 폴링을 위한 인터페이스로서 인터럽트 기반 처리를 위해서는 스스로

  구현해야 한다.


  stdio.h :  C언어의 표준 입출력 함수를 제공 (추가 : 2010. 5. 14)

  AVR과 MCU는 제한된 기능으로 인해서 모든 표준 IO 인터페이스가 구현될 수가 없다.

  printf와 scanf를 AVR의 특정 IO로 연결 시키고 싶다면 입출력 함수를 작성해서 이 함수를

  fdev_setup_stream()을 이용해서 stream을 생성/등록하고 이것을 stdin, stdout, stderr과

  연결하면 된다.

+ Recent posts