본문 바로가기
OS 포팅

ATmega128에 FreeRTOS 올리기

by 희황 2013. 6. 20.

후 성공한지는 꽤 오랜시간이 지났지만


 

이넘의 디바이스 드라이버가 말썽 ㅜㅜ


 

거기다 다른 일들이 겹치는 바람에 ㅠㅠ


 

(어제는 그동안 작업했던 하드가 날라가 버렸다. OTL)


 

그나마 subversion을 통해 백업해둔 것이 있어서 다행


 

그래서 더 날리기전에 웹어 올리려겠다.


 

서론이 넘길군


 

FreeRTOS Porting 단계

1. FreeRTOS

    FreeRTOS
+- Demo
|   +- AVR_ATMega323_WinAVR
|   +- Common
|
+- License
|
+- Source
|
+- TraceCon

    FreeRTOS 소스를 다운 받아 압축을 풀면 위와 같은 구조를 볼 수 있다.


2. FreeRTOS -> Demo -> AVR_ATMega323_WinAVR의 FreeRTOSConfig.h 파일을 연다.

     #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 8000000 )
   윗 줄을 다음 아래 줄로 수정한다. ( Board의 Clock 수정 8MHz -> 4MHz )
     #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 4000000 )


3. FreeRTOS 내부에 있는 Serial code는 ATmega128에서 정상동작하지 않는다. 특히 이번 제작보드는
ATmega128에서도 UART1번을 사용하므로 다음과 같은 소스를 코딩한다.

+------------------------------------------파일명 AT128_Serial.c------------------------------------------+
#ifdef GCC_MEGA_AVR
 /* EEPROM routines used only with the WinAVR compiler. */
 #include <avr/eeprom.h>
|#endif

#define KHz   4000

void UART1_Init(int SPEED);
void UART1_tx(unsigned char data);


/*****************************************************************************************/
/* UART0_TX() */
/*****************************************************************************************/
void UART1_Init(int SPEED)
{
 PORTB |= 0x01;

 UBRR1H = 0x00;
 //UBRR1L = (unsigned)( KHz * 1000 / (16 * SPEED) ) - 1; // 0x19
 UBRR1L = 0x19;
 UCSR1A = 0x00;            
 UCSR1B = (1<<RXEN1) | (1<<TXEN1);      
 UCSR1C = (3<<UCSZ00);
}

void UART1_tx(unsigned char data)
{
 while( !(UCSR1A & (1<<UDRE1)) )  // UDR0의 송신버퍼가 비어있음..새로운 송신 데이터 받을준비 됨
   ;
 UDR1 = data;    // UDR0 버퍼에 저장
}

+---------------------------------------------------------------------------------------------------------+


4. FreeRTOS 소스 자체에는 Serial code가 있다. 소스 부분에 다음 선언문을 추가하여 ATmega323 register명을 ATmega128
register명에 맞게 수정한다.( 이 소스를 컴파일안하면 make 과정에서 에러가 생긴다. 괜히 긁어 부스럼 만들지 말고,
register명만 수정해서 편하게 쓰자 ㅡㅡ;)

+----------------------------------------------+
#define ATMEGA128

#ifdef ATMEGA128
 #define UCSRB UCSR1B
 #define UCSRC UCSR1C
 #define UBRRL UBRR1L
 #define UBRRH UBRR1H
 #define UDR UDR1
#endif
+----------------------------------------------+


5. 컴파일하기전 make 파일을 수정하자

MCU = atmega323 부분을 MCU = atmega128 와 같이 수정하여한다.
SRC = \
main.c \
ParTest/ParTest.c \
serial/serial.c \
  부분에 AT128_Serial.c \를 추가하여 새롭게 코딩한 소스를 같이 컴파일해준다

--출처 http://skyoon.tistory.com/search/freertos

'OS 포팅' 카테고리의 다른 글

FreeRtos 일기 01/20  (0) 2013.06.20
OS 종류  (0) 2013.06.20
FreeRTOS 분석 - 고급운영체제  (0) 2013.06.20
FreeRTOS API  (0) 2013.06.20
FreeRTOS 구조  (0) 2013.06.20