AVR 상식

cdm·2023년 12월 1일
0

AVR

목록 보기
2/8

모든 정보는 data sheet에 쓰여 있음.

Atmega328p(8bit-microcontroller)

  • 16MHz
  • Two 8-bit Timer/Counters with separate prescaler and compare mode(Timer0, Timer2)
  • One 16-bit Timer/Counter with separate prescaler, compare mode, and capture
    mode(Timer1)
  • 풀업 저항 설정
    If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated.
    핀이 입력 핀으로 구성될 때 PORTxn이 논리 1로 기록되면 풀업 저항이 활성화됩니다.
    To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output pin.
    풀업 저항을 끄려면 PORTxn을 논리 0으로 쓰거나 핀을 출력 핀으로 구성해야 합니다.
    The port pins are tri-stated when reset condition becomes active, even if no clocks are running.
    클록이 실행 중이 아니더라도 리셋 조건이 활성화되면 3상태가 됩니다.

  • Register의 Flag를 초기화 하는 작업
    해당 Flag의 bit에 '1'이 쓰여 있을 경우 '1'을 쓰게 되면 0으로 clear됨.(MCU에서 정함)

  • BYTE data를 비트로 수신했을 경우 비트 단위로 잘라서 저장하기
// ex) 32비트(4BYTE)정보를 8비트 단위로 수신해서 4BYTE정보 만들기.
ISR(USART_RX_vect) { // 수신 인터럽트
    for (unsigned int i = 0; i < 4; ++i) {
        _delay_us(10);
        Data |= ((uint32_t)UDR0) << (i * 8);	// 비트 이동
    }
}
  • 4BYTE to 8bit data 자르기 2
	unsigned long Data = 0xF00FF00F;
	unsigned char temp[4] = {0,0,0,0};
	temp[0] = ((Data & 0xFF000000) >> 24);	// 앞에 8bit 제외 0으로 만든 후 비트 연산
	temp[1] = ((Data & 0x00FF0000) >> 16);	// (Data & 0x..) 괄호 중요
	temp[2] = ((Data & 0x0000FF00) >> 8);	// 연산자 우선순위를 위해 꼭 괄호 처리
	temp[3] = (Data & 0x000000FF);

Little-endian 방식 : LSB(Least Significant Bit) 가장 낮은 bit 먼저 이동
big-endian 방식 : MSB(Most Significant Bit) 가장 높은 bit 먼저 이동






0개의 댓글