티스토리 툴바


2009/06/05 16:36 수업자료/ARM





x ☞주변장치 번호

posted by 롯데우승
2009/06/05 01:11 수업자료/ARM




AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_SYS, 우선순위, src_type(01), PIT_ISR)
    ☞ SRCTYPE: Interrup Source Type
          ▶00 = 내부 인터럽트의 경우 high level sensitive,  외부 인터럽트의 경우 low level sensitive.
          ▶01 = 내부 인터럽트의 경우 positive edge trigger, 외부 인터럽트의 경우 negative edge trigger.
          ▶10 = 내부 인터럽트의 경우 high level sensitive,  외부 인터럽트의 경우 high level sensitive.
          ▶11 = 내부 인터럽트의 경우 positive edge trigger,  외부 인터럽트의 경우 positive edge trigger.





posted by 롯데우승
2009/06/05 01:08 수업자료/ARM

posted by 롯데우승
2009/06/04 13:37 수업자료/ARM
 [CG ROM에 저장되어 있는 기본 문자 폰트]
▶ 사용자가 화면에 표시하고자 하는 문자 코드를 DD RAM에 써주기만 하면 이것에 해당하는 
              폰트가 자동으로 CG ROM에서 찾아져서 화면에 디스플레이 된다.
            ▶상위비트 하위비트 H=1 L=0
   ex)A = LHLL LLLH 》0100 0001 》65(A의 ASCII값과 일치)

☞기본 문자 이외의 문자(한글)를 화면에 표시 하려면 사용자 정의 문자를 만들어 사용
 CG RAM을 사용하며 5*7 도트를 사용하는 경우 최대 8문자까지 정의
 5*10 도트를 사용하는 경우 최대 4문자까지 정의

▶사용자 정의 문자 지정방법◀
x x x 0 1 0 0 0                 8bit 중 5bit만 사용
x x x 0 1 1 0 0                 x는 don't care
x x x 0 1 1 1 0                 
x x x 0 1 1 1 1 
x x x 0 1 1 1 0                 '▶' 이렇게 나옴
x x x 0 1 1 0 0
x x x 0 1 0 0 0
x x x 0 0 0 0 0
16진수로 0x08, 0x0c, 0x0e, 0x0f, 0x0e, 0x0c, 0x08, 0x00으로 배열로 찍어줌



▶사용자 정의 문자를 사용한 예제◀

/* -------------------------------------------*/
/*         By CHAE Minyong, 2009.06.04.       */
/* -------------------------------------------*/
#include "project.h"

#define  D_BUS  0x000000ff
#define RS    0x00000800
#define RW    0x00001000
#define EN    0x00002000
#define BL    0x00004000

void LCD_Init();
void LCD_Instruction(unsigned char ucSData);
void LCD_Data(unsigned char ucSData);
void Set_font();

int main()
{
  volatile unsigned int iCount = 0;
  *PIO_PER = D_BUS | RS | RW | EN | BL;
  *PIO_OER = D_BUS | RS | RW | EN | BL;


  LCD_Init();
  LCD_Instruction(0x06);//Entry mode set
  LCD_Instruction(0x80);//DDRAM Address
  
  Set_font();
  while(1)
  {
      LCD_Instruction(0x85); //문자의 시작 위치
      LCD_Data(0x06);//'♥'
      LCD_Data(0x00);//'ㅊ'
      LCD_Data(0x01);//'ㅐ'
      LCD_Data(0x02);//'미'
      LCD_Data(0x03);//'요'
      LCD_Data(0x06);//'♥'
  
      LCD_Instruction(0xC8); //2라인의 시작위치
      LCD_Data(0x04);//'ㄴ'
      LCD_Data(0x05);//'ㅇ'
  }
  return 0;
}

void LCD_Init()
{
  LCD_Instruction(0x01);//Clear Display
  LCD_Instruction(0x3c);//Function set
  LCD_Instruction(0x0c);//Display ON/OFF Control
  LCD_Instruction(0x01);//Clear Display
}

void Set_font()
{
  unsigned int i;
  unsigned int font[] = {
    0x040x040x1f, 0x020x040x0a, 0x110x00,  //'ㅊ' 0x00
    0x0a, 0x0a, 0x0a, 0x0e, 0x0a, 0x0a, 0x0a, 0x00,  //'ㅐ' 0x01
    0x000x1d, 0x150x150x150x1d, 0x000x00//'미' 0x02
    0x040x0a, 0x0a, 0x040x0a, 0x0a, 0x1f, 0x00,  //'요' 0x03
    0x080x080x080x0e, 0x000x000x000x00,  //'ㄴ' 0x04
    0x060x090x090x060x000x000x000x00//'ㅇ' 0x05   
    0x000x0a, 0x1f, 0x1f, 0x0e, 0x040x000x00};//하트  0x06

  LCD_Instruction(0x40);
  for(i=0; i<56; ++i) //문자가 7개 이므로 8*7만큼 저장 시킴
    LCD_Data(font[i]);
}

void LCD_Instruction(unsigned char ucSData)
{
  volatile unsigned int iCount = 0;
 
  for(iCount=0;10000 >= iCount; ++iCount); //초기화를 수행하기 전의 Delay

  *PIO_CODR = EN;//LCD 비활성화
  *PIO_CODR = RS;//명령모드 레지스터 선택  
  *PIO_CODR = RW;//Write 선택

  for(iCount=0;10000 >= iCount; ++iCount); // time delay Tas
    *PIO_SODR = EN;//lcd enable

  for(iCount=0;10000 >= iCount; ++iCount); // time delay Tdsw
    *PIO_CODR = D_BUS;  //dbus clear 
    *PIO_SODR = ucSData; //버스에 8bit 씀 set dbus

  for(iCount=0;10000 >= iCount; ++iCount); // time delay Th 
    *PIO_CODR = EN;//EN을 H에서 L로 lcd disable

  for(iCount=0;10000 >= iCount; ++iCount);  
}

void LCD_Data(unsigned char ucSData)
{
  volatile unsigned int iCount = 0;
 
  for(iCount=0;10000 >= iCount; ++iCount); //초기화를 수행하기 전의 Delay

  *PIO_CODR = EN;//LCD 비활성화
  *PIO_SODR = RS;//명령모드 레지스터 선택  
  *PIO_CODR = RW;//Write 선택

  for(iCount=0;10000 >= iCount; ++iCount);
    *PIO_SODR = EN;//EN

  for(iCount=0;10000 >= iCount; ++iCount);
    *PIO_CODR = D_BUS;
    *PIO_SODR = ucSData; //버스에 8bit 씀

  for(iCount=0;10000 >= iCount; ++iCount);
    *PIO_CODR = EN;//EN을 H에서 L로

  for(iCount=0;10000 >= iCount; ++iCount);
}


▶사용자 정의 문자를 사용한 결과◀


♥ 채민용♥


 

posted by 롯데우승
2009/05/28 15:22 수업자료/ARM
H-jtag 홈페이지에서 다운로드 합니다.



압축된 파일 2개를 받습니다. 분할 압축이 되어있는거 같은지 2번은 파일을 열 수 없다는 경고 메세지가 나옵니다.


1번 폴더를 열면 EXE파일을 실행 시킵니다.




여기서 부터는 Install 입니다. 그냥 다 next로 다 넘겼습니다.





H-jtag 설치후 실행한 화면 칩을 연결하기 위해 Operations에서 Detect Target으로 사용되는 도구 연결

H-jtag 설치  후, H-jtag Server 프로그램에서 옵션메뉴를 선택하여 위 그림과 같이 설정한다.
위의 UNKNOWN이라고 떳을 때 부터 setting에서 LPT Jtag setting을 하여도 됩니다.
AT91SAM7S256 소자를 인식하여 화면에 나타나는 것입니다.

flsher에서 -> Start H-Flasher메뉴를 선택해서 내가 사용하는 ARm칩을 선택한다.

5번 프로그래밍을 선택하면 위와 같은 화면이 나온다. 

Src File에서 생성한 bin파일을 읽어 온다.
Dst Addr은 0x00000000를 사용함 

마지막으로 오른쪽에 있는 Program을 선택하여 프로램을 칩에 올림....
이렇게 하게 되면 SAMBA로 프로그램을 올릴 때의  메모리 셋을 하게 되는 번거로움을 덜 수 있습니다.
posted by 롯데우승
2009/05/26 20:02 수업자료/ARM

 

cygwin홈페이지에서 cygwin v1.5다운

 

Setup >>


Install 디렉토리 지정 - 저는 D드라이브에 깔았습니다.



다운 받는 싸이트 - 일본 싸이트가 빠르다고 함


Package 선택에서 초기에 Devel이 Default로 설정 되어 있는 것을 Install로 바꿔주고 Install 합니다.





GnuArm 싸이트에서 gcc toolchain Cygwin용 받습니다.

 

Setup>>


설치가 끝나후 cygwin을 실행하여 windows상에서 제대로 실행되는지 확인함.
arm-elf-gcc 입력후 no input files가 뜨면 성공

위의 그림처럼 색 구분을 위해 /home/Administrator(제꺼는 채민용) 안에 있는 .bashrc 파일을 열어

아래 그림과 같이 수정합니다.

cygwin상에서 vi .bashrc로 열어 수정 할 수 있습니다.


마지막으로 cygwin 경로 설정을 해줍니다.
참고로 GNUARM은 Install시 설정이 됩니다.

posted by 롯데우승