Spartan6에서 microblaze mcs를 움직이는 ③소프트웨어편
hellow world를 말한 곳에서 아무것도 기쁘지 않기 때문에, 프로그램을 조금 변경해 보겠습니다.
프로그램 동작 사양
이상의 동작을 만족시키는 C의 코드를 써 보겠습니다.
C 소스
main.c#include "platform.h" //とりあえず必要
#include "mb_interface.h" //とりあえず必要
#include "ADR_MAP.h" //自前のヘッダファイル
//ASCIIコードのバイナリ定義
#define BS 0x08 //バックスペース
#define CR 0x0D //復帰
#define LF 0x0A //改行
#define ESC 0x1B //エスケープ
//-----------------------------
//グローバル変数
//-----------------------------
unsigned char g_led=0;
//-------------------------------------------------------------------------------
//割込みハンドラ
//-------------------------------------------------------------------------------
void Int_Handl(void) {
unsigned char msg;
//割り込みフラグ落とす
IRQ_ACK = 0xFFFFFFFF;
//受信文字を持ってくる
msg=UART_RX;
//エコーバック
xil_printf("%c",msg);
//受信文字に応じた処理
switch(msg){
case CR://エンター
//LEDをインクリメント
g_led++;
GPO1=g_led;
break;
case BS://バックスペース
//LEDをデクリメント
g_led--;
GPO1=g_led;
break;
default://
//なにもしない
break;
}//switch
}
//============================================================
//メインループ
//============================================================
void main()
{
//ハードの初期化
init_platform();
//割込みハンドラの登録
microblaze_register_handler((XInterruptHandler)Int_Handl,(void*)0);
//使用する割込み選択(bit[2]⇒UART割り込み)
IRQ_ENABLE = 0x00000004;
//割り込みを有効にする
microblaze_enable_interrupts();
xil_printf("*******************\r");
xil_printf("Start!!!!!\r");
xil_printf("*******************\r");
//メインループ
while(1){
}
}
헤더 파일
이번 사용하고 있는 레지스터는 UART_RX
와 GPO1
뿐입니다.
ADR_MAP.h#ifndef ADR_MAP_H_
#define ADR_MAP_H_
#define UART_RX (*(volatile unsigned int *) 0x80000000)
#define UART_TX (*(volatile unsigned int *) 0x80000004)
#define UART_STATUS (*(volatile unsigned int *) 0x80000008)
#define GPO1 (*(volatile unsigned int *) 0x80000010)
// #define GPO2 (*(volatile unsigned int *) 0x80000014)
// #define GPO3 (*(volatile unsigned int *) 0x80000018)
// #define GPO4 (*(volatile unsigned int *) 0x8000001C)
#define GPI1 (*(volatile unsigned int *) 0x80000020)
// #define GPI2 (*(volatile unsigned int *) 0x80000024)
// #define GPI3 (*(volatile unsigned int *) 0x80000028)
// #define GPI4 (*(volatile unsigned int *) 0x8000002C)
#define IRQ_STATUS (*(volatile unsigned int *) 0x80000030)
#define IRQ_ENABLE (*(volatile unsigned int *) 0x80000038)
#define IRQ_ACK (*(volatile unsigned int *) 0x8000003C)
//MicroBraze_mcs のIOバスは 0xC000_0000 が先頭アドレス
#endif
빌드
SDK에서 ctrl+B를 누르면 프로그램이 빌드됩니다.Debug
폴더에 elf 파일이 생성됩니다.
프로그램 쓰기 시 주의사항
드디어 프로그램을 씁니다.
이번 사용하고 있는 Spartan6 ATLYS 보드 은, FPGA의 기입 데이터(bit 파일)를 impact로 기입할 때에 "PROG"라고 표기되어 있는 USB 커넥터로부터 기입할 수 있습니다.
그러나 SDK에서 프로그램을 업로드하면 오류가 발생합니다. (내 환경에서는)
Xilinx의 FPGA 라이터(Platform Cable USB Ⅱ)를 사용하고 있는 경우는 문제없이 쓸 수 있습니다.
프로그램 쓰기
Program FPGA
버튼을 누릅니다.
품목
지정할 데이터
Bitstream
ISE에서 생성된 비트 파일을 지정합니다.
BMM 파일
SDK의 작업 디렉토리 내에 작성한 하드웨어 프로젝트 디렉토리에 있는 것(LOC 정보를 추가한 것)을 지정합니다.
ELF 파일
SDK에서 빌드 완료 후 생성된 elf 파일을 지정합니다.
그리고 "Program"버튼을 누르면 회로 데이터(bit 파일)와 소프트웨어(elf 파일)를 합성한 데이터가 FPGA로 전송되고,
프로그램이 실행됩니다.
동작 확인
Tera Term을 사용하여 직렬 포트를 시작합니다.
ATLYS 보드에서는 "UART"라고 적혀있는 J17 커넥터에 micro USB를 연결하여 COM 포트로 인식합니다.
TeraTerm에서 엔터나 백 스페이스를 누르면 무사히 LED 점등 위치가 응답하고 있었습니다.
Reference
이 문제에 관하여(Spartan6에서 microblaze mcs를 움직이는 ③소프트웨어편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takeru0x5569/items/683e3a2fb6b65b4a7c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include "platform.h" //とりあえず必要
#include "mb_interface.h" //とりあえず必要
#include "ADR_MAP.h" //自前のヘッダファイル
//ASCIIコードのバイナリ定義
#define BS 0x08 //バックスペース
#define CR 0x0D //復帰
#define LF 0x0A //改行
#define ESC 0x1B //エスケープ
//-----------------------------
//グローバル変数
//-----------------------------
unsigned char g_led=0;
//-------------------------------------------------------------------------------
//割込みハンドラ
//-------------------------------------------------------------------------------
void Int_Handl(void) {
unsigned char msg;
//割り込みフラグ落とす
IRQ_ACK = 0xFFFFFFFF;
//受信文字を持ってくる
msg=UART_RX;
//エコーバック
xil_printf("%c",msg);
//受信文字に応じた処理
switch(msg){
case CR://エンター
//LEDをインクリメント
g_led++;
GPO1=g_led;
break;
case BS://バックスペース
//LEDをデクリメント
g_led--;
GPO1=g_led;
break;
default://
//なにもしない
break;
}//switch
}
//============================================================
//メインループ
//============================================================
void main()
{
//ハードの初期化
init_platform();
//割込みハンドラの登録
microblaze_register_handler((XInterruptHandler)Int_Handl,(void*)0);
//使用する割込み選択(bit[2]⇒UART割り込み)
IRQ_ENABLE = 0x00000004;
//割り込みを有効にする
microblaze_enable_interrupts();
xil_printf("*******************\r");
xil_printf("Start!!!!!\r");
xil_printf("*******************\r");
//メインループ
while(1){
}
}
이번 사용하고 있는 레지스터는
UART_RX
와 GPO1
뿐입니다.ADR_MAP.h
#ifndef ADR_MAP_H_
#define ADR_MAP_H_
#define UART_RX (*(volatile unsigned int *) 0x80000000)
#define UART_TX (*(volatile unsigned int *) 0x80000004)
#define UART_STATUS (*(volatile unsigned int *) 0x80000008)
#define GPO1 (*(volatile unsigned int *) 0x80000010)
// #define GPO2 (*(volatile unsigned int *) 0x80000014)
// #define GPO3 (*(volatile unsigned int *) 0x80000018)
// #define GPO4 (*(volatile unsigned int *) 0x8000001C)
#define GPI1 (*(volatile unsigned int *) 0x80000020)
// #define GPI2 (*(volatile unsigned int *) 0x80000024)
// #define GPI3 (*(volatile unsigned int *) 0x80000028)
// #define GPI4 (*(volatile unsigned int *) 0x8000002C)
#define IRQ_STATUS (*(volatile unsigned int *) 0x80000030)
#define IRQ_ENABLE (*(volatile unsigned int *) 0x80000038)
#define IRQ_ACK (*(volatile unsigned int *) 0x8000003C)
//MicroBraze_mcs のIOバスは 0xC000_0000 が先頭アドレス
#endif
빌드
SDK에서 ctrl+B를 누르면 프로그램이 빌드됩니다.Debug
폴더에 elf 파일이 생성됩니다.
프로그램 쓰기 시 주의사항
드디어 프로그램을 씁니다.
이번 사용하고 있는 Spartan6 ATLYS 보드 은, FPGA의 기입 데이터(bit 파일)를 impact로 기입할 때에 "PROG"라고 표기되어 있는 USB 커넥터로부터 기입할 수 있습니다.
그러나 SDK에서 프로그램을 업로드하면 오류가 발생합니다. (내 환경에서는)
Xilinx의 FPGA 라이터(Platform Cable USB Ⅱ)를 사용하고 있는 경우는 문제없이 쓸 수 있습니다.
프로그램 쓰기
Program FPGA
버튼을 누릅니다.
품목
지정할 데이터
Bitstream
ISE에서 생성된 비트 파일을 지정합니다.
BMM 파일
SDK의 작업 디렉토리 내에 작성한 하드웨어 프로젝트 디렉토리에 있는 것(LOC 정보를 추가한 것)을 지정합니다.
ELF 파일
SDK에서 빌드 완료 후 생성된 elf 파일을 지정합니다.
그리고 "Program"버튼을 누르면 회로 데이터(bit 파일)와 소프트웨어(elf 파일)를 합성한 데이터가 FPGA로 전송되고,
프로그램이 실행됩니다.
동작 확인
Tera Term을 사용하여 직렬 포트를 시작합니다.
ATLYS 보드에서는 "UART"라고 적혀있는 J17 커넥터에 micro USB를 연결하여 COM 포트로 인식합니다.
TeraTerm에서 엔터나 백 스페이스를 누르면 무사히 LED 점등 위치가 응답하고 있었습니다.
Reference
이 문제에 관하여(Spartan6에서 microblaze mcs를 움직이는 ③소프트웨어편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takeru0x5569/items/683e3a2fb6b65b4a7c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
드디어 프로그램을 씁니다.
이번 사용하고 있는 Spartan6 ATLYS 보드 은, FPGA의 기입 데이터(bit 파일)를 impact로 기입할 때에 "PROG"라고 표기되어 있는 USB 커넥터로부터 기입할 수 있습니다.
그러나 SDK에서 프로그램을 업로드하면 오류가 발생합니다. (내 환경에서는)
Xilinx의 FPGA 라이터(Platform Cable USB Ⅱ)를 사용하고 있는 경우는 문제없이 쓸 수 있습니다.
프로그램 쓰기
Program FPGA
버튼을 누릅니다.
품목
지정할 데이터
Bitstream
ISE에서 생성된 비트 파일을 지정합니다.
BMM 파일
SDK의 작업 디렉토리 내에 작성한 하드웨어 프로젝트 디렉토리에 있는 것(LOC 정보를 추가한 것)을 지정합니다.
ELF 파일
SDK에서 빌드 완료 후 생성된 elf 파일을 지정합니다.
그리고 "Program"버튼을 누르면 회로 데이터(bit 파일)와 소프트웨어(elf 파일)를 합성한 데이터가 FPGA로 전송되고,
프로그램이 실행됩니다.
동작 확인
Tera Term을 사용하여 직렬 포트를 시작합니다.
ATLYS 보드에서는 "UART"라고 적혀있는 J17 커넥터에 micro USB를 연결하여 COM 포트로 인식합니다.
TeraTerm에서 엔터나 백 스페이스를 누르면 무사히 LED 점등 위치가 응답하고 있었습니다.
Reference
이 문제에 관하여(Spartan6에서 microblaze mcs를 움직이는 ③소프트웨어편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takeru0x5569/items/683e3a2fb6b65b4a7c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Tera Term을 사용하여 직렬 포트를 시작합니다.
ATLYS 보드에서는 "UART"라고 적혀있는 J17 커넥터에 micro USB를 연결하여 COM 포트로 인식합니다.
TeraTerm에서 엔터나 백 스페이스를 누르면 무사히 LED 점등 위치가 응답하고 있었습니다.
Reference
이 문제에 관하여(Spartan6에서 microblaze mcs를 움직이는 ③소프트웨어편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takeru0x5569/items/683e3a2fb6b65b4a7c1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)