Xil_In 함수에 관해 질문이 있습니다.
648
5 asked
안녕하세요, 해당 강의자료를 참고하여 c code를 작성하고 있습니다. 현재 제가 사용하고 있는 코드의 main 문은 다음과 같습니다.
int main()
{
u32 data;
u32 read_data;
init_platform();
xil_printf("[S/W BUILD]\t%s, %s\n\r",__DATE__, TIME);
xil_printf("[FPGA BUILD]\t%x \n\r",Xil_In32(FPGA_BUILD_ADDR));
xil_printf("--Starting SI5386 init Application--\n\r");
data = 0x00000000;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD, data);
data = 0x00000101;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_INT_STAT, data); // 0x0010
data = 0x00000101;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_INT_EN, data); // 0x0018
data = 0x00093ee0;
data = 0x00023e06;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_TGT_SIZE, data); // 0x0020
data = 0x021c01e0;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PIC_SIZE, data); // 0x0024;
data = 0x000000c4;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PIC_FMT, data); // 0x0028
data = 0x00000000;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PROF, data); // 0x002c
data = 0x00000205;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_NL, data); // 0x0034
data = 0x00000001;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_MODE, data); // 0x0038
data = 0x00000001;
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD, data); // 0x0000
usleep(50);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_INT_STAT);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_INT_EN);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_TGT_SIZE);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PIC_SIZE);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PIC_FMT);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_PROF);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_NL);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_MODE);
read_data = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD);
usleep(50);
cleanup_platform();
return 0;
}
다음과 같이 Xil_Out32 함수가 쭉 써지고, 각각의 메모리 주소에 대해 data를 write 합니다. 이후 해당 주소에 대한 데이터 값을 read 하는 과정에서, hardware에서 인식을 하지 못합니다.
위 사진과 같이, microblaze에서 data address가 첫번째 read 할 주소인 0x44a10004에서 멈춰있는 것을 확인할 수 있습니다.
axi쪽 I/F는 다음과 같습니다.
제 C code에서 Read 동작이 되지 않는 이유가 무엇일까요?
감사합니다.
Answer 2
0
block design은 다음과 같습니다.
Master axi를 하나 더 추가하여(M04_AXI_0) port로 뺀 다음 rtl 상에서 모듈과 연결했습니다.



0
c 코드에 주소값들이 define 상수로 되어 있어서 어떤 값인지 난해하네요.
Xil_Out32(), Xil_In32() 함수 후에 printf 문을 추가하여 디버깅 메시지를 확인해 보시는 게 좋을 것 같네요.
예를 들면,
Xil_Out32(TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD, data);
data = 0x00000101;
xil_printf("out_addr : %X, data : %X \n", TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD, data);
read_data_1 = Xil_In32 (TMC_JXSE_BASE_ADDR + TMC_JXSE_INT_STAT);
xil_printf("out_addr : %X, data : %X \n", TMC_JXSE_BASE_ADDR + TMC_JXSE_ENC_CMD, read_data_1);
c 코드로 넘어 오면, printf 문으로 디버깅하는 것이 좋습니다.
그리고 함수 마지막에 while(1) ; 문을 추가해서 프로그램이 종료되는 것을 막는게 좋을 것 같습니다.
대충 보았을 때에는 특이한 문제가 보이지는 않습니다만,
M04_AX_0 를 추가하는 부분을 한번 더 확인해 보시길 바랍니다. 옵션이나 혹시 잘못된 부분이 있는지 확인해 보세요.
인터럽트 컨트롤러 요청 처리와 처리 완료 구문 중 이해가 안되는 내용이 있습니다.
1
15
2
enable_latch가 F/F이 아니라 래치인 이유가 궁금합니다.
1
23
2
카페 등업신청
0
33
1
fpga
1
59
2
test class의 constructor 부분을 보다가 궁금한 점이 있어 질문드립니다.
0
35
1
FPGA 연결 확인 방법
0
44
1
Arty z7 -20 보드의 경우
1
57
2
RVALID/RREADY 핸드셰이크 발생 시 RDATA 전이가 발생해도 문제가 없는 이유?
1
83
4
강의노트는 어디서 받을 수 있나요?
0
66
2
lwip 실험중 오류 상황
0
65
2
uvm config db에 대해 궁금한 점이 있습니다.
0
66
1
이 강의 zboz7보드에서도 실행 가능한가요?
1
71
1
강의자료 기한 연장 + 로드맵 문의
0
65
2
Chapter 16 FSM 관련 질문
1
84
2
강의 환경(linux) 관련 질문
1
101
2
Block Memory Interface 응용
0
402
1
수업 내용중 질문드립니다.
0
429
1
수업 자료 링크 오류
0
272
1
xdc파일 핀할당에 대해 문의드립니다.
0
448
1
lwip echo server ping test 문의 드립니다.
0
475
1
W5500코드 관련 질문
0
385
1
w5500
0
386
1
자료링크 "접근이 불가능합니다"
1
297
1
한 페이지가 안보입니다.
1
323
1

